Язык Objective-C позволяет определить набор упорядоченных элементов данных, который называется массивом(array). На нашем блоге описывается определение и управление массивами. Также на блоге описывается использование массивов совместно с функциями, структурами, символьными строками и указателями.
Предположим, что вам нужно считать набор оценок(grades) и затем выполнить с ними некоторые операции, например, расположить их в порядке возрастания, вычислить среднее значение и найти медиану. Вы не можете выполнить эти операции, пока не введете все оценки.
В Objective-C вы можете определить переменную с именем grader, которая представляет не одно значение оценки, а весь набор оценок. Для ссылки на элементы этого набора используется число, которое называется порядковым номером, или индексом(index или subscript).
В математике i-й элемент набора x обозначается как xi. В Objective-C он обозначается как:
1 |
x[i] |
Тем самым, выражение:
1 |
grades[5] |
соответствует элементу с номером 5 в массиве с именем grades. В Objective-C элементы массива начинаются с номера 0, поэтому:
1 |
grades[0] |
на самом деле обозначает первый элемент массива.
Отдельный элемент массива можно использовать в любом месте как обычную переменную. Например, элемент массива можно присвоить другой переменной с помощью оператора:
1 |
g = grades[50] |
Здесь значение, содержащееся в grades[50], присваивается переменной g. В общем виде, если i объявлена как целая переменная, оператор:
1 |
g = grades[i] |
присваивает переменной g значение, содержащееся в элементе с номером i массива grades.
Чтобы сохранить значение в элементе массива, нужно указать этом элемент массива слева от знака равенства.
В операторе:
1 |
grades[100] = 95; |
значение 95 сохраняется в элементе с номером 100 массива grades.
Для перебора элементов массива нужно изменять значение переменной, которая используется как индекс массива. Например, в цикле:
1 2 |
for(i = 0; i < 100; ++i) sum += grades[i]; |
выполняется перебор первых 100 элементов массива grades(элементы 0-99), и значение каждой оценки(grade) добавляется к переменной sum. По окончании цикла for переменная sum будет содержать сумму первых 100 значений массива grades(если sum присвоено значение 0 до начала цикла).
Как и с другими типами переменных, необходимо объявить массив, прежде чем использовать его. Объявление массива — это объявление типа элементов, содержащихся в массиве — это объявление типа элементов, содержащихся в массиве(например: int, float или объект) и максимального числа элементов в массиве.
Определение:
1 |
Fraction *fracts[100]; |
объявляет fracts как массив, содержащий 100 дробей(fraction). Для обозначения элементов этого массива нужно использовать индексы от 0 до 99. Выражение:
1 |
fracts[2] = [fracts[0] add: fracts[1]]; |
представляет вызов метода add: класса Fraction для сложения первых двух дробей из массива fracts и сохранения результат в третьем элементе массива.
В программе 1.2 создается таблица из первых 15 чисел Фибоначчи. Попытайтесь предсказать ее результаты. Какая связь существует между числами этой таблицы?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Программа генерации первых 15 чисел Фибоначчи #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int Fibonacci[15], i; Fibonacci[0] = 0; /* по определению */ Fibonacci[1] = 1; /* тоже самое */ for(i = 2; i < 15; ++i) Fibonacci[i] = Fibonacci[i-2] + Fibonacci[i-1]; for(i = 0; i < 15; ++i) NSLog(@"%i", Fibonacci[i]); [pool drain]; return 0; } |
Вывод программы 1.2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 |
Первые два числа Фибоначчи, которые мы назовет F0 и F1, определяются соответственно как 0 и 1. Затем каждое следующее число Фибоначчи Fi определяется как сумма двух предыдущих чисел Фибоначчи Fi-2 и Fi-1.
Например, F2 вычисляется как сумма значений F0 и F1. В приведенной программе это соответствует вычислению Fibonacci[2] путем сложения значений Fibonacci[0] и Fibonacci[1]. Вычисление выполняется внутри сложения значений Fibonacci[0] и Fibonacci[1].
Вычисление выполняется внутри цикла for для значений F0-F14(то есть от Fibonacci[2] до Fibonacci[14]).