Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

В программе 13.1 создается таблица из первых 15 чисел Фибоначчи. Попытайтесь предсказать ее результаты. Какая связь существует между числами этой таблицы? // Программа генерации первых 15 чисел Фибоначчи #import <Foundation/Foundation.h> int main (int arge, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int Fibonacci [15], i; Fibonacci [0] = 0; /* by definition */ Fibonacci[1] = 1; /* ditto 7 for ( i = 2; i < 15; ++i) Fibonacci[i] = Fibonacci[i-2] + Fibonacci [i-1]; for ( i = 0; i < 15; ++i) NSLog (@"%i", Fibonacci^]); [pool drain]; return 0; }

Вывод

программы 13.1 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

Первые два числа Фибоначчи, которые мы назовем F0 и F, определяются соответственно как 0 и 1. Затем каждое следующее число Фибоначчи F определяется как сумма двух предыдущих чисел Фибоначчи F 2 и F,. Например, F2 вычисляется как сумма значений F0 и F, В приведенной профамме это соответствует вычислению Fibonacci[2] путем сложения значений Fibonacci[0] и Fibonacci[1]. Вычисление выполняется внутри цикла for для значений F0-F14 (то есть от Fibonacci[2] до Fibonacci[14]). Инициализация элементов массива

Элементам массива можно назначать начальные значения точно так же, как переменным при их объявлении. Для этого нужно просто перечислить начальные значения массива, начиная с первого элемента. Значения в списке разделяются запятыми, и весь список заключается в фигурные скобки.

В операторе int integers[5] = { 0, 1, 2, 3, 4 };

элементу integers[0] присваивается значение 1, integers[1] — значение 1, integers[2] — значение 2, и т.д. Массивы символов инициализируются аналогичным образом. Например, в операторе char letters[5] = {'а', 'b', 'с', 'd', 'е'};

определяется массив символов, и пяти элементам этого массива присваиваются соответственно значения 'a', 'b', 'с', 'd' и 'е'.

Вы не обязаны полностью инициализировать весь массив. Если указано меньшее количество начальных значений, инициализируется соответствующее количество элементов; остальные значения задаются равными нулю. Например, в объявлении float sample_data[500] = { 100.0, 300.0, 500.5 };

инициализируются первые три значения массива sample_data (соответственно 100.0,300.0 и 500.5), а остальным 497 элементам присваивается значение 0. Заключая номер элемента в прямоугольные скобки, можно инициализировать определенные элементы массива в любом порядке. Например, в строках, int x = 1233; int а[] = {[9] = х + 1, [2] = 3, [1] = 2, [0] = 1 };

определяется массив а из 10 элементов (по максимальному указанному индексу) и для последнего элемента задается значение х + 1 (1234). Кроме того, происходит инициализация первых трех элементов (значения 1,2 и 3 соответственно). Массивы символов

В программе 13.2 показано, как использовать массив символов. Однако здесь есть одна особенность, требующая обсуждения. Вы уже видите ее? #import <Foundation/Foundation.h> int main (int arge, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; char word[] = {'H', 'e', 'l', 'l', 'o', '!'}; int i; for ( i = 0; i < 6; ++i) NSLog word[i]); [pool drain]; return 0; }

Вывод программы 13.2 H e l l о !

Наиболее примечательной особенностью этой программы

является объявление массива символов word без указания числа элементов. При определении массива без указания числа элементов размер массива определяется автоматически по числу инициализируемых элементов. Поскольку в программе 13.2 для массива word инициализируются шесть значений, язык Objective-C по умолчанию определяет, что данный массив содержит шесть элементов.

Этот принцип выполняется, если мы инициализируем каждый элемент массива в том месте, где определяется этот массив. В противном случае необходимо явным образом задать размер массива.

Если поместить завершающий нуль-символ ('\0') в конце массива символов, то создастся символьная строка (characterstring). Если в программе 13.2 заменить инициализацию массива word па строку char word[] = {'Н', 'е', 'l', 'l', 'o', '!', '\0'};

то в дальнейшем можно выводить эту строку с помощью одного вызова NSLog, например, NSLog (@"%s", word);

Символы форматирования %s указывают NSLog, что вывод символов должен продолжаться до тех пор, пока не будет достигнут завершающий нуль-символ. А именно этот символ мы поставили в конце массива word. Многомерные массивы

Все массивы, рассмотренные выше, являются линейными, то есть имеют одну размерность. Язык Objective-C позволяет определять массивы любой размер-ности. В этом разделе описываются двумерные массивы.

Типичным примером двумерного массива являются матрицы. Рассмотрим матрицу 4x5. 10 5 -3 17 82 9 0 0 8 -7 32 20 1 0 14 0 0 8 7 6

В математике для указания элемента матрицы используют два индекса. Если назвать эту матрицу М, то обозначение М.. будет указывать элемент /-й строки, у-го столбца, где / изменяется от 1 до 4 и/ изменяется от 1 до 5. Обозначение М3 2 указывает значение 20, которое находится в третьей строке втором столбце этой матрицы. Аналогичным образом, Л/45 указывает элемент, который находится в четвертой строке пятом столбце (значение 6).

В Objective-C при обозначении элементов двумерной матрицы используются аналогичные обозначения. Но поскольку в Objective-C нумерация начинается с 0, первая строка матрицы имеет номер 0, и первый столбец матрицы тоже имеет номер 0. Поэтому приведенная выше матрица будет иметь следующие обозначения строк и столбцов. Строка (i) Столбец (j) 0 1 2 3 4 0 10 5 -3 17 82 1 9 0 0 8 -7 2 32 20 1 0 14 3 0 0 8 7 6

Применяемое в математике обозначение Mij. заменяется в Objective-C обозначением M[i][j]

Напомним, что первый индекс указывает номер строки, и второй индекс — номер столбца. Тем самым, sum = М[0][2] + M[2J[4];

означает сложение значения из строки 0 столбца 2 (-3) со значением из строки 2 столбца 4 (14) и присваивание результата (11) переменной sum.

Описание двумерных массивов выполняется так же, как для одномерных массивов; например, int М[4][5];

означает объявление массива М как двумерного массива, содержащего 4 строки и 5 столбцов (всего 20 элементов). Каждый элемент этого массива должен со-держать целое значение.

Поделиться:
Популярные книги

АН (цикл 11 книг)

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
АН (цикл 11 книг)

Дважды одаренный. Том VI

Тарс Элиан
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Дважды одаренный. Том VI

Мы – Гордые часть 8

Машуков Тимур
8. Стальные яйца
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мы – Гордые часть 8

Законник Российской Империи. Том 4

Ткачев Андрей Юрьевич
4. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
5.00
рейтинг книги
Законник Российской Империи. Том 4

Роза ветров

Кас Маркус
6. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Роза ветров

Развод с генералом драконов

Солт Елена
Фантастика:
фэнтези
5.00
рейтинг книги
Развод с генералом драконов

Оживший камень

Кас Маркус
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Оживший камень

Наследник

Майерс Александр
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник

Последний Паладин. Том 10

Саваровский Роман
10. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 10

Законы Рода. Том 14

Андрей Мельник
14. Граф Берестьев
Фантастика:
аниме
фэнтези
эпическая фантастика
5.00
рейтинг книги
Законы Рода. Том 14

Излом

Осадчук Алексей Витальевич
10. Последняя жизнь
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Излом

Хозяин Теней 7

Петров Максим Николаевич
7. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 7

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи