В нашей жизни много действий повторяются время от времени: каждый день мы ходим в школу, в школе мы присутствуем на уроках и т.д.
Но здесь есть 1 момент. Мы точно знаем, что в школу мы ходим с 1-го до примерно 270 дня, каждый день в школе в среднем мы присутствуем с 1-го по 6-ой урок. Это важно. В каждом случае мы знаем начальное и конечное значение.
Это было отступление. Теперь вернемся к нашему предмету.
В самом начале мы писали программу вывода на экран сообщения ‘Hello World’ и это выглядело так:
begin writeln('Hello World'); Writeln('Press Enter to Exit'); readln; end.
Усложним задачу. Выведем наше сообщение 2 раза.
begin writeln('Hello World'); writeln('Hello World'); Writeln('Press Enter to Exit'); readln; end.
Усложним задачу. Выведем наше сообщение 4 раза.
begin writeln('Hello World'); writeln('Hello World'); writeln('Hello World'); writeln('Hello World'); Writeln('Press Enter to Exit'); readln; end.
А теперь представим, что вывод нужно сделать 1000 раз. Сами понимаете, что код будет не особо интересный.
begin writeln('Hello World'); ...998 раз... writeln('Hello World'); Writeln('Press Enter to Exit'); readln; end.
Для выполнения однообразных действий, которые нужно выполнить известное количество раз в Паскале существует циклическая структура FOR с параметром.
Общий вид (2 варианта)
FOR счетчик:=начальное значение TO конечное значение DO FOR счетчик:=конечное значение DOWNTO начальное значение DO
Для первого случая: начальное значение<=конечное значение
Для второго случая: конечное значение>=начальное значение
Разберем что входит в эту структуру.
<счетчик> — это переменная целого типа (Integer) которая «про себя» считает, сколько раз выполнилось то что нам нужно по условию задачи. Чаще всего переменную счетчик называют i или j или k.
Когда мы считаем от минимального значения к максимальному, то пишем
FOR счетчик:=минимальное значение TO максимальное значение DO
Когда мы считаем от максимального значения к минимальному то пишем
FOR счетчик:=максимальное значение DOWNTO минимальное значение DO
ВАЖНО: счетчик увеличивается только на 1 (либо +1, либо -1).
ВАЖНО: после слова DO точка с запятой НЕ СТАВИТСЯ
ВАЖНО: те команды, которые выполняются в цикле — называют телом цикла
ВАЖНО: счетчик, начальное и конечное значение промежутка — Целого типа (Integer)
Начальное и конечное значение — это ОТ скольки и ДО скольки считать, или верхний и нижний порог нашего промежутка. Вернемся к нашему примеру о печати приветствия 1000 раз.
var i:integer; begin for i:=1 to 1000 do writeln('Hello World'); Writeln('Press Enter to Exit'); readln; end.
Выполняется цикл FOR следующим образом:
переменной-параметру присваивается начальное значение;
выполняется тело цикла;
переменная-параметр автоматически увеличивается/уменьшается на 1 ;
если параметр превышает конечное значение, то происходит выход из цикла, иначе — переход к пункту 2.
А что делать, если нужно выполнить несколько действий. Вспоминаем команду ветвления. Если условие выполняется и нужно выполнить несколько действий — мы использовали командные скобки BEGIN END. Аналогично поступаем и в этом случае.
Вывести 10 раз слово Hello и его порядковый номер.
var i:integer; begin for i:=1 to 10 do begin write(i); writeln(' Hello'); end; Writeln('Press Enter to Exit'); readln; end.
Простая задача
Вывести на экран числа от 1 до 15
var i:integer; begin for i:=1 to 15 do write(i,' '); Writeln('Press Enter to Exit'); readln; end.
Простая задача
Вывести на экран числа от 15 до 1
var i:integer; begin for i:=1 downto 15 do write(i,' '); Writeln('Press Enter to Exit'); readln; end.
Простая задача. Вывести на экран квадраты и кубы чисел от 1 до 10
Нам нужно вычислить квадрат и куб числа и вывести его на экран. Причем 10 раз
var i:integer; begin for i:=1 to 10 do begin writeln(i,' в квадрате =',i*i); writeln(i,' в кубе =',i*i*i); end; Writeln('Press Enter to Exit'); readln; end.
Сделать тоже самое, но в обратном порядке.
var i:integer; begin for i:=10 downto 1 do begin writeln(i,' в квадрате =',i*i); writeln(i,' в кубе =',i*i*i); end; Writeln('Press Enter to Exit'); readln; end.
В начальной школе вы изучали таблицу умножения. Давайте выведем таблицу умножения на 2. Изменяя значение n можно получить разные таблицы умножения.
var n,i,res:integer; begin n:=2; for i:=1 to 10 do begin res:=n*i; writeln(n,' * ',i:2,' = ',res:2); end; Writeln('Press Enter to Exit'); readln; end.
Можно усовершенствовать данную программу. Сделаем запрос значения n.
var n,i,res:integer; begin Write('N=');readln(n); for i:=1 to 10 do begin res:=n*i; writeln(n,' * ',i:2,' = ',res:2); end; Writeln('Press Enter to Exit'); readln; end.
В средней школе при изучении функции y=x*x вы строили таблицу для построения графика по точкам. Напишем программу, которая позволит нам автоматизировать этот процесс.
Найти значения функции на промежутке [-10,10] с шагом 1.
var x,y:integer; begin for i:=-10 to 10 do begin y:=x*x; writeln('При х=',x:3,' Y=',y:3); end; Writeln('Press Enter to Exit'); readln; end.
Важно понимать, что начальное и конечное значение счетчика For можно передавать как переменные. Усложним предыдущую задачу.
Найти значения функции Y=1/(x*x+2) на промежутке [a,b] с шагом 1.
Переменная Y не является целым числом. Важно что бы счетчик, начальное и конечное значения были целого типа.
var x:integer; y:real; a,b:integer; begin Write('a=');readln(a); Write('b=');readln(b); for x:=a to b do begin y:=1/(x*x+2); writeln('При х=',x:3,' Y=',y:3:3); end; Writeln('Press Enter to Exit'); readln; end.
Что нужно запомнить:
Общую структуру команды цикла с параметром.
Команда For используется когда известно количество повторений (начальное и конечное значения) и шаг 1.
В команде For счетчик и параметры должны быть целого типа (Integer).
Счетчик изменяется с шагом (+1) для слова ТО (возрастание) и (-1) для слова DOWNTO (спадание)
Тело цикла это набор команд между BEGIN — END.
Изменять значение счетчика в теле цикла НЕЛЬЗЯ
Если тело цикла состоит из одной команды BEGIN — END можно не писать
for i:=1 downto 15 do write(i,' ');
Если тело цикла состоит из двух и более команды обязательно использовать BEGIN — END
for i:=10 downto 1 do begin writeln(i,' в квадрате =',i*i); writeln(i,' в кубе =',i*i*i); end;
В команду цикла можна передавать значения переменных, для начального и конечного значения
for x:=a to b do begin y:=1/(x*x+2); writeln('При х=',x:3,' Y=',y:3:3); end;
Выполняется цикл FOR следующим образом:
1. переменной-параметру присваивается начальное значение;
2. выполняется тело цикла;
3. переменная-параметр автоматически увеличивается/уменьшается на 1 ;
4. если параметр превышает конечное значение, то происходит выход из цикла, иначе — переход к пункту 2.