Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Вычислительная циклическая программа




END.

Оператор цикла for

Выполняя программу печати чисел 3 5 7 9, оператор repeat выполнил цикл 4 раза. То же самое сделал и оператор while. Однако, обычно, когда мы пишем операторы repeat и while, нам совсем неважно знать, сколько раз они выполнят цикл. Тем не менее, существует много задач, для решения которых цикл нужно выполнить именно определенное количество раз. В этом случае удобно использовать оператор цикла for.

Задача: 200 раз напечатать слово ФУТБОЛ.

Попробуем сначала решить задачу при помощи оператора goto. Начнем с такого фрагмента:

metka: WriteLn('ФУТБОЛ');
goto metka

Но здесь цикл будет повторяться бесконечно, а нам нужно только 200 раз. Мы уже видели, что для выхода из цикла оператор goto нужно включить в состав оператора if. Кроме этого нужна переменная, меняющая свое значение от одного выполнения цикла к следующему. Придумаем этой величине какое-нибудь имя, скажем i. Проще всего задачу решает такой фрагмент:

i:=1;
metka: WriteLn('ФУТБОЛ');
i:=i+1; {увеличение i на 1}
if i<=200 then goto metka

Здесь i вначале равно 1, но к каждому следующему выполнению цикла оно увеличивается на 1. В первый раз выполняя оператор if, компьютер проверяет условие 2<=200 и найдя его истинным, выполняет оператор goto metka. Во второй раз проверяется условие 3<=200 и т.д. В 199-й раз компьютер проверяет условие 200<=200 и найдя его истинным, выполняет оператор goto metka. В 200-й раз компьютер проверяет условие 201<=200 и найдя его ложным, выходит из цикла.

В нашем фрагменте "полезную" работу выполняет только одна строка из четырех - WriteLn('ФУТБОЛ'). Остальные три строки заняты тем, что обеспечивают выполнение "полезной" строки ровно 200 раз. Нам пришлось организовать специальную переменную, значение которой в каждый момент выполнения программы говорит о том, в какой раз выполняется цикл. Переменная с таким свойством называется счетчиком циклов.

А теперь запишем программу полностью, правда, несколько усложнив ее, так чтобы логика ее выполнения полностью соответствовала логике выполнения программы с оператором for, которую я привожу параллельно и поясняю немедленно.

LABEL m1,m2; VAR i: Integer; BEGIN i:=1; m1: if i>200 then goto m2; WriteLn('ФУТБОЛ'); i:=i+1; goto m1; m2: END. VAR i: Integer; BEGIN for i:=1 to 200 do WriteLn('ФУТБОЛ') END.

Слово for читается "фо", переводится "для". Слово to читается "ту", переводится "до". Слово do читается "ду", переводится "делай". Конструкция for i:=1 to 200 do по-русски читается так: Для i, изменяющегося от 1 до 200, делай оператор, стоящий после слова do. Смысл повторения здесь такой же, как и в операторе while. Оператор, стоящий после do, тоже, конечно, может быть составным.

Синтаксис оператора for:

FOR имя:= выражение1 TO выражение2 DO оператор

Пример записи: for j:=a+b to2*s dok:=k+1.

Пояснения к синтаксической схеме:

имя - это имя произвольной переменной порядкового типа (см. 5.7 и 12.8), в частности целочисленной, называемой переменной цикла,

выражение1 ивыражение2 - произвольные выражения порядкового типа, в частности - целого.

Работа оператора for:

Прежде всего вычисляется выражение1, и переменной цикла (пусть это будет i) присваивается его значение. Затем вычисляется выражение2 и сравнивается с i. Если i > выражения2, то оператор for завершает свою работу, так ничего и не сделав. В противном случае выполняется оператор, стоящий после do. После выполнения этого оператора значение i увеличивается на 1 и снова сравнивается с выражением2. Если i > выражения2, то оператор for завершает свою работу, иначе снова выполняется оператор, стоящий после do, снова i увеличивается на 1 и т.д.

В нашем примере переменная i кроме того, что обеспечивает нам выход из цикла, никакой "полезной" работы не выполняет. Усложним же немного задачу. Пусть компьютер печатает такую информацию:

10 ФУТБОЛ 11 ФУТБОЛ 12 ФУТБОЛ..... 200 ФУТБОЛ

Вот программа:

VAR i: Integer;
BEGIN
for i:=10 to 200 do
begin Write(i);
Write(' ФУТБОЛ ')
end
END.

Здесь после do стоит уже составной оператор.

Можно ли удобно использовать оператор for для печати такой информации?:

100 ФУТБОЛ 99 ФУТБОЛ 98 ФУТБОЛ..... 40 ФУТБОЛ

Вполне, так как оператор for позволяет не только увеличивать, но и уменьшать переменную цикла. Однако, для этого нельзя писать for i:=100 to 40, а нужно писать for i:=100 downto 40. Читается downto - "'даунту", переводится буквально "вниз до". Соответственно, для выхода из цикла должно быть истинным не условие i > выражения2, а условие i < выражения2.

Вот объединенный синтаксис оператора for:

FOR имя:= выражение1 TO DOWNTO выражение2 DO оператор

 

Вертикальная черта между двумя элементами конструкции «TOиDOWNTO» говорит о том, что в конструкции должен присутствовать один из этих элементов.

Задание 42: Напечатать с помощью оператора for:

Прямой счет: -5 -4 -3 -2 -1 0 1 2 3 4 5 Обратный счет: 5 4 3 2 1 0 -1 -2 -3 -4 -5 Конец счета

 

Глава 7. Типичные маленькие программы

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

Задача: Во дворце 40 залов. Известны длина, ширина и высота каждого зала. Вычислить площадь пола и объем каждого зала.

Сначала напишем фрагмент для одного зала:

ReadLn (dlina, shirina, visota);

S:=dlina*shirina; {Площадь пола}

V:=S*visota; {Объем}

WriteLn(S,’ ‘,V)

Для решения задачи этот фрагмент нужно выполнить 40 раз, для чего вполне естественно использовать оператор for:

VAR i, dlina, shirina, visota, S, V: Integer;
BEGIN

for i:=1 to 40 do begin

ReadLn (dlina, shirina, visota);

S:=dlina*shirina;

V:=S*visota;

WriteLn(S,’ ‘,V)

end {for}
END.

Обратите внимание, что здесь мы несколько модифицировали описанный нами в 5.4 ступенчатый стиль, а именно записали end не под соответствующим ему begin, а под соответствующим ему for. Эта практика также распространена, так как экономит место по вертикали. Мне она нравится больше, поэтому я буду ее придерживаться. Чтобы не спутаться, откуда взялся end, пишем рядом комментарий {for}.

Теперь создадим более дружественный интерфейс, для чего, кроме всего прочего, дадим возможность пользователю самому задавать число залов во дворце:

VAR i, dlina, shirina, visota, N, S, V: Integer;
BEGIN

WriteLn(’Введите число залов‘);

ReadLn (N); {N - число залов}

for i:=1 to N do begin

WriteLn(’Введите длину,ширину и высоту зала‘);

ReadLn (dlina, shirina, visota);

S:=dlina*shirina;

V:=S*visota;

WriteLn(‘ Площадь пола= ’,S,’ Объем зала= ‘,V)

end
END.

Здесь курсивом я обозначил новые по сравнению с предыдущей программой элементы.

Пусть во дворце три зала размерами 20*15*4, 30*20*5 и 10*5*3. В этом случае мы вводим N=3 и оператор for выполняет цикл три раза. На каждом выполнении цикла компьютер останавливается на операторе ReadLn (dlina, shirina, visota), мы вводим числа и получаем результаты:

Площадь пола=300 Объем зала=1200

Площадь пола=600 Объем зала=3000

Площадь пола=50 Объем зала=150

Задание 43: Даны стороны N кубиков. Вычислить объем каждого.




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


Дата добавления: 2014-12-27; Просмотров: 359; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.026 сек.