Вход/Регистрация
Программирование на Objective-C 2.0
вернуться

Кочан Стивен

Шрифт:

Если условие_цикла не выполнено, то программа продолжает выполняться со следующего оператора. В этой программе выполнение продолжается с оператора 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

Однако ++n — это вполне допустимое выражение Objective-C. Оно представляет новый оператор Objective-C: оператор приращения, или увеличения (increment operator). Этот оператор добавляет 1 к своему операнду. Приращение на 1 весьма распространено, и для этой цели существует специальный оператор. Выражение ++п эквивалентно выражению n = п + 1.

Конечно, ни один язык программирования, содержащий оператор прибав-ления 1, не будет полным без соответствующего оператора вычитания 1. Этот оператор называется оператором уменьшения (decrement operator), и для него используется двойной знак «минус». Выражение bean counter = bean_counter - 1

эквивалентно выражению --bean_counter

Некоторые программисты любят помещать ++ или — после имени пере-менной, как в n++ или bean_counter-.

Вероятно, вы обратили внимание, что последняя строка вывода программы 5.3 не выровнена. Вы можете устранить это небольшое несоответствие, заменив соответствующий оператор программы 5.3 следующим оператором NSLog: NSLog ("%2i %i", n, triangularNumber);

Ниже приводится вывод модифицированной программы (назовем ее про-граммой 5.ЗА).

Вывод программы 5.ЗА TABLE OF TRIANGULAR NUMBERS n Sum from 1 to n - --------------- 1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36 9 45 10 55

  • Читать дальше
  • 1
  • ...
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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