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

ЖАНРЫ

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

Однако ++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

Основное изменение, внесенное в оператор NSLog — это включение описания ширины поля. Символы %2i указывают процедуре NSLog, что нужно вывести целое значение в определенной позиции и использовать для вывода не менее двух позиций. Любое целое число, занимающее менее двух позиций, будет выводиться с ведущим пробелом. Это называется выравниванием по правому краю (right justification). Ввод с клавиатуры

Программа 5.2 вычисляет только 200-е треугольное число. Как быть, если вам нужно вычислить 50-е или 100-е треугольное число? Нужно изменить програм-му, чтобы цикл for был выполнен соответствующее число раз, и изменить опе-ратор NSLog, чтобы вывести соответствующее сообщение.

Наиболее простое решение — сделать так, чтобы программа запрашивала, какое число вы хотите вычислить, а затем вычисляла его. Чтобы реализовать это решение, можно использовать процедуру с именем scant. Процедура scant действует аналогично процедуре NSLog, но процедура NSLog выводит значения на экран, а процедура scant позволяет вводить значения в программу. Конечно, если в программе на Objective-C используется графический интерфейс пользо-вателя (User Interface, UI) для такого приложения, как Cocoa или iPhone, то ни NSLog, ни scant вообще не потребуется.

Программа 5.4 спрашивает у пользователя, какое треугольное число нужно вычислить, вычисляет это число и выводит результаты. #import <Foundation/Foundation.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int n, number, triangularNumber; NSLog (@"What triangular number do you want?"); scant("%i", &number); triangularNumber = 0; for ( n = 1; n <= number; ++n ) triangularNumber += n; NSLog (@"Triangular number %i is %i\n", number, triangularNumber); [pool drain]; return 0; }

Вывод программы 5.4 What triangular number do you want? (Какое треугольное число вам нужно?) 100 Triangular number 100 is 5050 (100-е треугольное число равно 5050)

Согласно этому выводу, пользователь ввел число 100. Программа вычислила 100-е треугольное число и вывела результат 5050 на терминал. В первом опера-торе NSLog программы 5.4 у пользователя запрашивается ввод числа. Напомним пользователю, что конкретно нужно ввести. После вывода сообщения вызывается процедура scant. Первым аргументом для scant является строка формата, которая не начинается с символа У NSLog первым аргументом всегда является объект NSString, а у scant — С-строка. Перед строками в стиле С

не ставится символ @.

Строка формата указывает scant, какие типы значений должны считываться с консоли (из окна терминала, если вы компилируете программу с помощью приложения Terminal). Как и в случае NSLog, для указания целого значения ис-пользуются символы %i.

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

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

После ввода этого значения пользователем (и нажатия клавиши Enter на клавиатуре, указывающей на завершение ввода) программа вычисляет запро-шенное треугольное число. Это происходит так же, как; Вместо использования в программе 5.2 предела, равного 200, в этой программе используется значение number.

Затем выводятся результаты, и выполнение программы заканчивается. Вложенные циклы for

Программа 5.4 позволяет вычислить любое треугольное число. Теперь предпо-ложим, что нам надо вычислить пять треугольных чисел. Пользователь мог бы запускать эту программу пять раз, вычисляя все числа по очереди.

С точки зрения изучения Objective-C:, нужно, чтобы программа сама обра-батывала эту ситуацию. Для этого достаточно вставить в программу цикл для повторения всей последовательности вычислений. Вы можете использовать опе-ратор tor, чтобы задать такой цикл. Этот способ показан на примере программы 5.5 и вывода ее результатов. #import <Foundation/Foundation.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePoo! alloc] init]; int n, number, triangularNumber, counter; for ( counter = 1; counter <= 5; ++counter) { NSLog (@"What triangular number do you want?"); scant ("%i", &number); triangularNumber = 0; for ( n = 1; n <= number; ++n ) triangularNumber += n; NSLog (@"Triangular number %i is %i", number, triangularNumber); } [pool drain]; return 0; }

Вывод программы 5.5 What triangular number do you want? (Какое треугольное число вам нужно?) 12 Triangular number 12 is 78 (12-е треугольное число равно 78) What triangular number do you want? 25 Triangular number 25 is 325 What triangular number do you want? 50 Triangular number 50 is 1275 What triangular number do you want? 75 Triangular number 75 is 2850 What triangular number do you want? 83 Triangular number 83 is 3486

Эта программа содержит два уровня операторов for. Внешний оператор for: for ( counter = 1; counter <= 5; ++counter)

Он указывает, что цикл программы должен быть выполнен пять раз. Значение счетчика (counter) задается равным 1 и затем наращивается с шагом 1 и условием, что он меньше или равен 5 (т.е. пока он не достигнет 6).

В отличие от предыдущей программы, переменная counter в других местах программы не используется. Она применяется исключительно как счетчик цикла в операторе for. Тем не менее, поскольку это переменная, вы должны объявить ее в программе.

В цикл этой программы включены все остальные программные операторы, заключенные в фигурные скобки. Эту программу можно описать следующим образом. Пять раз { Получение числа от пользователя. Вычисление запрашиваемого треугольного числа. Вывод результатов. }

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