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

ЖАНРЫ

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

Вывод программы 5.2 The 200th triangular number is 20100 (200-е треугольное число = 20100)

Программа 5.2 требует некоторых пояснений. Для расчета 200-го треуголь-ного числа используется тот же метод, что и для 8-го треугольного числа: вы-числяется сумма чисел от 1 до 200.

Перед оператором for переменной triangularNumber присваивается значение 0. Все переменные необходимо инициализировать (присвоить им значение) до того, как они будут использованы в программе. Определенным типам перемен-ных начальные значения присваиваются по умолчанию, но надежнее присвоить переменным нужные значения явно.

Оператор for позволяет обойтись без явного написания всех чисел от 1 до 200. В общем виде

оператор for имеет формат for (начальное выражение]; условие_цикла; выражение_цикла) программный оператор

Три выражения, заключенные в круглые скобки: начальноевыражение, условие цикла и выражение_цикла — задают среду выполнения программного цикла. Следу-ющий за ними программный оператор (который заканчивается символом «точка с запятой») может быть любым оператором Objective-C. Количество выполнений этого оператора определяется параметрами, заданными в операторе for.

Первый компонент оператора for, начальноевыражениеу задает начальные зна-чения до выполнения цикла. В программе 5.2 эта часть оператора for задает на-чальное значение п, равное 1. Второй компонент оператора for указывает усло-вия, необходимые для продолжения цикла. Цикл повторяется, пока это условие истинно. В программе 5.2 условиецикла указывается следующим выражением отношения: n <= 200

Это выражение означает «п меньше или равно 200». Оператор « меньше или равно» (знак «меньше» [<], после которого сразу следует знак «равно» [=]) — это оператор отношения. Операторы отношения используются для проверки условий. Результатом проверки является ответ «да» (или TRUE), если условие выполняется, или «нет» (или FALSE), если условие не выполняется.

В таблице 5.1 приводится список всех операторов отношения Objective-C.

Табл. 5.1. Операторы отношения Оператор Описание Пример == Равно count == 10 != Не равно flag != DONE < Меньше, чем а < b <= Меньше или равно low <= high > Больше, чем points > POINT_MAX >= Больше или равно j>=0

Операторы отношения имеют меньший приоритет, чем все арифметические операторы. Выражение а < b-с

выполняется так: а < (b + с)

Оно истинно (TRUE), если значение а меньше, чем значение b + с, и ложно (FALSE) в противном случае.

Обратите внимание на оператор «равно» (==); его не следует путать с опе-ратором присваивания (=). Выражение а == 2

проверяет, равно ли значение а значению 2* а выражение а = 2

присваивает значение 2 переменной а.

Выбор оператора отношения зависит от типа проверки и от ваших предпочтений. Например, выражение отношения n <= 200

эквивалентно n < 201

В приведенном выше примере выполнение программного оператора, кото-рый образует тело цикла for (triangularNumber += п;), повторяется до тех пор, пока результат проверки выражения отношения равен TRUE (в данном случае — пока значение п меньше или равно 200). В этом операторе значение п прибавляется к значению переменной triangularNumber.

Если условие_цикла не выполнено, то программа продолжает выполняться со следующего оператора. В этой программе выполнение продолжается с оператора NSLog.

Последний компонент оператора for содержит выражение, которое вычис-ляется каждый раз после выполнения тела цикла. В программе 5.2 выражение_- цикла к значению п прибавляется 1. Значение п увеличивается на 1 каждый раз после прибавления этого значения к значению triangularNumber, и п изменяется от 1 до 201.

Последнее значение п (201) не прибавляется к значению triangularNumber, по-скольку цикл заканчивается, как только перестает выполняться условие цикла (п становится равным 201).

Итак, оператор for

выполняется следующим образом.

Сначала вычисляется начальное выражение. В этом выражении обычно за-дается (инициализируется) переменная, используемая внутри цикла, которую называют индексной переменной. Ей присваивается некоторое начальное значение (например, 0 или 1).

Проверяется условие цикла. Если это условие не удовлетворяется (выражение имеет значение FALSE), то цикл немедленно прекращается, и выполнение продолжается с оператора, расположенного непосредственно после цикла.

Выполняется программный оператор, содержащий тело цикла.

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

Возврат к шагу 2.

Условие цикла проверяется сразу после входа в цикл, до первого выполнения тела цикла. Нельзя ставить символ «точка с запятой» после закрывающей круглой скобки, поскольку это сразу прекращает цикл.

Программа 5.2 генерирует все 200 первых треугольных чисел. Создадим таб-лицу этих чисел. Для экономии места мы выведем таблицу, содержащую только первые 10 треугольных чисел. Эта задача выполняется в программе 5.3. // Программа, генерирующая таблицу треугольных чисел #import <Foundation/Foundation.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int n, triangularNumber; NSLog (@"TABLE OF TRIANGULAR NUMBERS"); NSLog (@" n Sum from 1 to n"); NSLog (@"-- ------"); triangularNumber = 0; for ( n = 1; n <= 10; ++n ) { triangularNumber += n; NSLog (@H %i %i", n, triangularNumber); } [pool drain]; return 0; }

Вывод программы 5.3 TABLE OF TRIANGULAR NUMBERS (Таблица треугольных чисел) n Сумма от 1 до n - ------------ 1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36 9 45 10 55

В программе 5.3 первые три оператора NSLog выводят заголовок и названий колонок вывода.

После это вычисляются первые 10 треугольных чисел. Переменная п используется, чтобы определить текущий номер, для которого вычисляется сумма от 1 до п, в переменной triangularNumber сохраняется значение n-го треугольного числа.

Выполнение оператора for начинается с присваивания переменной п значения 1. Программный оператор, следующий непосредственно после оператора for, содержит тело цикла. Чтобы выполнить в цикле не один, а несколько про-граммных оператор, нужно заключить их в фигурные скобки. Система интер-претирует этот блок (block) как один элемент. Вообще говоря, в любом месте программы на Objective-C вместо одного оператора можно использовать блок операторов, если заключить этот блок в фигурные скобки.

В программе 5.3 тело цикла состоит из выражения, в котором значение п добавляется к значению triangularNumber, и следующего за ним оператора NSLog. Обратите внимание, что эти операторы расположены с отступом, поскольку они образуют часть цикла for. Существуют разные стили программирования; неко-торые из них записывают цикл так, чтобы открывающая фигурная скобка рас-полагалась в отдельной строке после for. for ( n = 1; n <= 10; ++n ) { triangularNumber += n; NSLog (@" %i %i", n, triangularNumber); }

Следующее треугольное число вычисляется путем добавления значения п к предыдущему треугольному числу. При первом входе в цикл треугольное число равно 0, поэтому новое значение triangularNumber при п, равном 1, равно 1. Затем выводятся значения п и triangularNumber с соответствующим числом пробелов, вставляемых в строку формата, чтобы значения этих переменных были выров-нены под заголовками соответствующих колонок.

После выполнения тела цикла вычисляется выражение цикла. Но это выра-жение в данном операторе for выглядит странно: ++n

Поделиться с друзьями: