Цикл FOR |
Необходимо написать программу, которая будет увеличивать значение введенной переменной на 10, распечатывая при это каждый свой шаг, т.е. ее вывод должен быть таким (для примера возьмем, что мы ввели число 7):
А+1 = 8;
А+2 = 9;
А+3 = 10;
А+4 = 11;
.............
A+10 = 17;
Решение я объяснять по шагам не буду (ни к чему это, верно?), а сразу приведу текст программы:
Program Example; var A: Integer; I: Byte; begin Write('Введите число: '); Readln(A); For I := 1 to 10 do Writeln(A,' + ',I,' = ',A+I); Readln; |
Обратите внимание на строку Writeln(A, ' + ' ,I, ' = ' ,A+I); - здесь я привожу ее более крупным шрифтом, чтобы было легче разобраться. Она хорошо демонстрирует множественность параметров процедуры Writeln, не так ли? Кроме того, обратите внимание, что я использую процедуру Writeln, а не Write - для того, чтобы переносить строку после каждого вывода. Таким образом строки будут выводиться в столбик.
Заметьте также, что я использую в цикле тип Byte. Дело в том, что Byte занимает меньше памяти, чем Integer или Word, тем самым программа становиться оптимизированнее. Мы ведь заранее знаем, что в цикле значение не перевалит через 10, верно? Зачем же использовать типы, способные хранить значения гораздо большие?
Есть еще некоторые вещи, которые вам необходимо знасть о цикле For. В частности, это границы диапазона и действие, производимое в цикле. Что я имею в виду? Вот смотрите, например мы пишем:
For I := 1 to 10 do
Что при этом будет происходит с переменной i?
1. Она будет приравнена к единице;
2. Она будет увеличиваться на единицу с каждым новым началом цикла (это называется итерацией - новый проход;), пока не станет равна 10.
Обратили внимание, она будет увеличиваться? А вот если написать так:
For I := 10 to 1 do
Переменная ведь должна уменьшаться? Судя по значениям - да. Но если так написать в программе, цикл не будет выполнен. Паскаль не выдаст ошибки, программа пойдет на выполнение, но цикл работать не будет. Почему? Просто в цикле For при каждой новой итерации (проходе) Паcкаль увеличивает на 1 переменную и проверяет - она больше заданного конечного значения? Если да, цикл завершен. Вот и здесь - переменная I увеличивается на 1, она теперь равна 11, то есть больше конечного значения (больше 1), цикл завершен. То есть он пуст - работать не будет. Начальное значение сразу же становиться больше конечного.
Однако, иногда необходимо, чтобы переменная в цикле уменьшалась. Например, модифицированный вариант предыдущей программы - уменьшать на 10 значение введенной переменной. Как же поступить? Именно для этих целей и существует расширение синтаксиса цикла FOR, которое позволяет уменьшать значения, то есть задавать "от большего к меньшему".
Для того, чтобы использовать эту возможность, Вам необходимо заменить служебное слово to словом downto, то есть оформление станет таким:
For I := 10 downto 1 do
Просто, верно? Но тем не менее работа цикла совсем меняется. Давайте теперь модифицируем нашу программу, т.е. сделаем, чтобы она уменьшалась на 10. Только уменьшать будем с 10 до 1, а не с 1 до 10, как мы делали ранее. Сделаем еще одно, чтобы усовершенствовать программу: так как мы будет вычитать сразу 10 из введенного числа, не хотелось бы, чтобы оно было меньше нуля. Зачем, скажете вы? Пусть будет... Да нет, возьмем это просто как условие, чтобы хоть как-то расширить интерфейс. Итак, мы будем проверять введенное число на больше/меньше нуля, после чего вычитать из него числа от 10 до 1. Пример программы:
Program Example; label var A: Integer; I: Byte; begin Write('Введите число: '); Readln(A); For I := 10 downto
1 do Writeln(A,' - ',I,' = ',A-I); Readln; |
Вот и все. Разберитесь в этой программе, здесь вам все знакомо.
Собственно, это и все про цикл FOR. Напишите самостоятельно несколько программ, не подглядывайте в рассылку. Попробуйте хорошенько запомнить синтаксис, без него никуда