Задача. Создать проект ДНК для OSX.
1. Создайте новое консольное приложение в XCode.
2. Создайте класс Cell, который наследуется от NSObject.
3. В классе создайте переменную DNA типа NSMutableArray – массив из 100 символов. Этот массив будет представлять ДНК. Вам нужно самостоятельно разобраться с созданием массива и выбрать класс или тип для использования для символов.
4. Создайте собственный метод init. Не забудьте в нем вызвать super init. В этом методе задайте значение каждого из 100 символов в случайном порядке из множества A, T, G и С. Иными словами, каждая ячейка вашего массива должна быть одним из этих четырех символов.
5. Создайте метод hammingDistance, который возвращает int и принимает объект класса Cell. Этот метод должен сравнивать свой ДНК и ДНК переданного в качестве аргумента объекта и возвращать количество позиций где символы ДНК не совпадают. Например: ATGGCATTTAGC и ATAGCTTTTCGC. На трех позициях ДНК не совпадают, значит hamming distance = 3.
6. Создайте категорию mutator класса Cell. В ней опишите метод mutate, который возвращает void и принимает int.
7. Создайте имплементацию (реализацию) метода mutate. Метод должен заменить X процентов символов в массиве DNA в случайном порядке; Х – значение переданной переменной типа int. Нужно заменить строго Х процентов, то есть заменять одну ячейку можно максимум один раз.
8. В main-функции создайте два объекта класса Cell, выведите на экран hamming distance между их ДНК, потом мутируйте каждый из объектов и выведите на экран новый hamming distance.
В задаче необходимо:
1. Создать класс Cell (клетка с ДНК), являющийся потомком класса NSObject.
2. Внутри класса Cell создать массив типа NSMutableArray с имемнем DNA.
3. Внутри класса Cell создать метод init, в котором вызывается init родительского класса NSObject и массив DNA заполняется 100 случайными символами из набора A, T, G или С.
4. Внутри класса Cell создать метод hammingDistance, принимающий объект класса Cell. Метод hammingDistance должен возвращать значение типа int, в котором содержится число случаев несовпадений элементов в массивах DNA двух разных объектов (клеток) класса Cell.
Например:
ATCCGGACTG
CTGGTTACTG
hammingDistance = 5 (5 случаев несовпадений в двух массивах).
5. Создать отдельную категорию mutator, в которой создать метод mutate, принимающий значение x типа int. X представляет из себя количество символов, выбранных в случайной последовательности в массиве DNA каждой из клеток Cell, которые должны мутировать. Причем уже измененный символ не должен подвергнуться повторной мутации. Символы для мутаций берутся из набора A, T, G или С.
6. На экран с помощью метода NSLog должны быть выведены результаты сравнения hammingDistance двух разных клеток до мутации и после мутации обеих из них.
Решение задачи.
Код файла cell.h
#import <Foundation/Foundation.h>
@interface Cell : NSObject {
NSMutableArray *DNA;
}
-(int) intInRangeMinimum: (int) min andMaximum: (int) max;
-(void) DNA;
-(id) init;
-(int) hammingDistance: (Cell *) c;
@end
Код файла cell.m
#import "cell.h"
@implimentation Fraction
-(int) intInRangeMinimum: (int) min andMaximum: (int) max {
if (min > max) { return -1; }
int adjustedMax = (max + 1) - min; // arc4random returns within the set {min, (max - 1)}
int random = arc4random() % adjustedMax;
int result = random + min;
return result;
}
-(void) DNA {
return DNA;
}
-(id) init {
self = [super init];
if (self) {
NSArray *dna_letters = [[NSArray alloc] initWithObjects:@"A", @"T", @"G", @"C", nil];
for (int i = 0; i < 100; i++) {
[[self DNA] addObject: [dna_letters objectAtIndex: [self intInRangeMinimum: 0 andMaximum: 3]]];
}
[dna_letters release];
}
return self;
}
-(int) hammingDistance: (Cell *) c {
int distance = 0;
for (int i = 0; i < 100; i++) {
if ([[self DNA] objectAtIndex: i] != [[c DNA] objectAtIndex: i]) {
distance++;
}
}
NSLog(@"hammingDistance = %i", % distance);
}
@end
Код файла main.m
#import <Fonundation/Foundation.h>
#import "cell.h"
@interface Cell (mutator)
-(void) mutate: (int) x;
@end
@implimentaion Cell (mutator)
-(void) mutate: (int) x {
NSMutableArray *mutated_cells = [[NSMutableArray alloc] init];
int dna_position;
int number_of_mutations = x;
NSArray *dna_letters = [[NSArray alloc] initWithObjects:@"A", @"T", @"G", @"C", nil];
while (number_of_mutations > 0) {
dna_position = [self intInRangeMinimum: 0 andMaximum: 99];
if ([mutated_cells containsObject: dna_position]) {
continue;
} else {
[[self DNA] objectAtIndex: dna_position] = [dna_letters objectAtIndex: [self intInRangeMinimum: 0 andMaximum: 3]];
[mutated_cells addObject: dna_position];
number_of_mutations--;
}
}
[mutated_cells release];
[dna_letters release];
}
@end
int main (int argc, const char *argv[])
{
@autoreleasepool {
Cell *firstCell;
Cell *secondCell;
firstCell = [[Cell alloc] init];
secondCell = [[Cell alloc] init];
[firstCell hammingDistance: secondCell];
[firstCell mutate: 10];
[secondCell mutate: 20];
[firstCell hammingDistance: secondCell];
[firstCell release];
[secondCell release];
}
return 0;
}
Best eCOGRA Sportsbook Review & Welcome Bonus 2021 - CA
ОтветитьУдалитьLooking casino-roll.com for an eCOGRA Sportsbook Bonus? https://septcasino.com/review/merit-casino/ At 1xbet login this https://deccasino.com/review/merit-casino/ eCOGRA Sportsbook review, we're talking about a goyangfc.com variety of ECCOGRA sportsbook promotions.