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

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

Жанры

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

Основное изменение, внесенное в оператор 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. Тем не менее, поскольку это переменная, вы должны объявить ее в программе.

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

Часть «Вычисление запрашиваемого треугольного числа» фактически состо-ит из задания значения 0 для переменной triangularNumber и цикла for, в котором вычисляется треугольное число. Таким образом, оператор for оказывается внут-ри другого оператора for. Вложение циклов может продолжаться до любого уровня.

Использование отступов становится крайне важным при работе с усложнен-ными программными конструкциями, такими как вложенные операторы for. Так вы сможете быстро определить, какие операторы содержатся внутри каждого оператора for. Варианты цикла for

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

Приказано выжить!

Малыгин Владимир
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.09
рейтинг книги
Приказано выжить!

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Курсант: назад в СССР 2

Дамиров Рафаэль
2. Курсант
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Курсант: назад в СССР 2

Неофит

Листратов Валерий
3. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неофит

Симфония теней

Злобин Михаил
3. Хроники геноцида
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Симфония теней

Лихие. Смотрящий

Вязовский Алексей
2. Бригадир
Фантастика:
попаданцы
5.00
рейтинг книги
Лихие. Смотрящий

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

Шайтан Иван 4

Тен Эдуард
4. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
8.00
рейтинг книги
Шайтан Иван 4

Герцог. Книга 1. Формула геноцида

Юллем Евгений
1. Псевдоним "Испанец" - 2
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Герцог. Книга 1. Формула геноцида

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Черный Маг Императора 16

Герда Александр
16. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 16

Как я строил магическую империю 5

Зубов Константин
5. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 5

Погранец

Поселягин Владимир Геннадьевич
2. Решала
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Погранец