понедельник, 24 июня 2013 г.

Objective-C: Генерация случайного числа

Xcode: Version 4.6.3

Допустим нам надо получить случайное число в каком-то диапазоне положительных чисел, к примеру любое случайное число от 0 до 1, воспользуемся решением ниже:

// Метод генерации случайных чисел от начального положительного значения до конечного положительного значения
// Начальное положительного значение и конечное положительное значение входят в этот диапазон
- (NSUInteger) generate: (unsigned long) initialValue generate: (unsigned long) finalValue {
  
    // Возвращаем генерированное число
    return initialValue + (arc4random() % finalValue);
  

Проверка:

int a = 0, b = 1;

long v = [self generate:a generate: (b - a) + 1];

NSLog(@"Случайное число от %d до %d = %lu", a, b, v);

Objective-C: Женская русская фамилия из мужской

Xcode: Version 4.6.3 

Преобразование женской фамилии из мужской, подразумевает замену окончаний в слове. То есть действуют простые правила, если мужская фамилия заканчивается на -ов, -ев, -ин, -ёв то в конце добавляется -а. Если окончание на -ий, -ый, -ой добавляется -ая. Все остальные фамилии остаются как есть.

Набросаем метод:

// Метод преобразования русской женской фамилии из мужской русской фамилии
// От мужских русских фамилий на -ов, -ев, -ин, -ёв добавляется -а
// От мужских русских фамилий на -ий, -ый, -ой добавляется -ая
// Остальные остаются как есть
- (NSString*) conversionHumanWomanFamilyRu: (NSString*) humanManFamilyRu {
   
    // Забираем от строки(мужской фамилии) два последних символа
  NSString *endTwoCharactersHumanManFamilyRu = [humanManFamilyRu substringFromIndex:([humanManFamilyRu length] - 2)];
   
    //NSLog(@"String:%@, two last character of the string:%@, string length:%lu", humanManFamilyRu, endTwoCharactersHumanManFamilyRu, ([humanManFamilyRu length] - 2));
   
    // Сравниваем окончание
    if ( [endTwoCharactersHumanManFamilyRu isEqual: @"ов"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ев"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ёв"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ин"]) {
          
        humanManFamilyRu = [humanManFamilyRu stringByAppendingString:@"а"];
       
        // NSLog(@"%@",humanManFamilyRu);
       
    } else {
       
        if ([endTwoCharactersHumanManFamilyRu isEqual: @"ий"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ый"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ой"]) {
           
            humanManFamilyRu = [humanManFamilyRu stringByReplacingCharactersInRange: NSMakeRange(([humanManFamilyRu length]-2),2) withString:@"ая" ];
           
            // NSLog(@"%@",humanManFamilyRu);
           
        }
       
    }    
    // Возвращаем женскую фамилию
    return humanManFamilyRu;
}

И наконец производим правильность работы метода:

NSString *humanWomanFamilyRu =[self conversionHumanWomanFamilyRu:@"Ангарский"];

NSLog(@"Русская женская фамилия:%@", humanWomanFamilyRu);