Цикл – главное средство заставить компьютер много раз сделать одно и то же или похожее. Циклы очень широко применяются в программах, они упрощают работу программиста и компьютера, в Паскале существует три основных типа цикла, это repeat … until, while … do (это условные операторы цикла) и for … to … do (цикл со счетчиком).
Кроме них еще есть Оператор перехода Goto, который сейчас уже редко применяется, поэтому мы здесь его разбирать не будем. Итак, начнем с более простого, оператор цикла for … to … do.
Эта конструкция чаще всего используется, когда заранее известно количество выполняемых операций. Рассмотрим синтаксис. Он выглядит так:
For <Счетчик цикла> := <Начальное значение> … to <Конечное значение>… do <Команды>;
После слова do можно ставить операторные скобки Begin … End и писать там несколько команд. Давайте разберемся, что здесь что.
Цикл for существует до тех пор, пока счетчик находится в пределах между начального и конечного значений.
Что такое счетчик? Счетчик — это переменная, обязательно, целого типа или символьного типа. Обычно, счетчик программисты обозначают переменной i или j, если i уже использована (вложенные циклы). Итак, вот пример, простейшей программы.
Program Cikl1; var i:integer; Begin for i:=1 to 10 do write(i, ' '); End.
Эта программа просто в цикле выводит числа от 1 до 10, то есть счетчик цикла, который при каждом проходе цикла увеличивается на 1. Вот вторая похожая программа:
Program Cikl2; var i:char; Begin for i:='а' to 'я' do write(i, ' '); End.
Эта программа просто выводит все буквы русского алфавита. Также в Паскале существует цикл For с обратным счетчиком For <Счетчик цикла> := <Начальное значение> … downto <Конечное значение>… do <Команды>; Здесь цикл счетчика уменьшается. Вот пример подобной программы.
Program Cikl3; var i: integer; begin for i :=10 downto -10 do write(i*2, ' '); End.
Она выведет все четные числа от 20 до -20. Это получается, когда мы умножаем счетчик на 2, он с каждым проходом цикла уменьшается на 1, а выводимое число уменьшается на 2. Вот еще одна программа, в ней мы выведем числа от -5 до 5 в прямом и обратном порядке.
Program Schet; Var i : Integer; Begin Write('Прямой счет: '); for i:= -5 to 5 do Write(i,' '); Write('Обратный счет: '); for i:= 5 downto -5 do Write(i,' '); Write('Конец счета'); End.
Последняя программа по циклу for. Пусть пользователь задаст число кубиков и длину одной его стороны, а программа выведет объем каждого из них.
Program Kubiki; Var i, N, a : Integer; Begin WriteLn('Введите число кубиков'); ReadLn (N); for i:=1 to N do begin WriteLn('Введите длину стороны кубика'); ReadLn (a); WriteLn('Объем кубика=', a*a*a); end; End.
Следующий оператор цикла while … do, его называют еще цикл с предусловием While <условие> Do <оператор>. После слова do можно ставить операторные скобки Begin … End и писать там несколько команд. В этом цикле сначала компьютер проверяет истинность условия, стоящего после слова while. Если условие истинно, то выполняется оператор, стоящий после do. Затем снова проверяется истинность условия и в случае истинности снова выполняется этот оператор. И т. д. Если условие ложно, то оператор while прекращает свою работу и компьютер переходит к выполнению следующего оператора. Давайте в цикле выведем все числа от 1 до 10.
Program While1; var i:integer; Begin i:=0; while i<10 do begin inc(i); write(i, ' '); end; End.
Теперь напишем программу, которая будет вычислять квадрат чисел от 20 до 1.
Program Square; Var a : integer; Begin a:=20; while a>0 do begin WriteLn('Число = ', a, ' Квадрат = ', Sqr(a)); dec(a); end; End.
Здесь просто после инициализации переменно а выводится строка с самим числом и его квадратом, после чего с помощью процедуры dec() значение переменной a уменьшается на 1. Вот пример цикла While при работе со строками.
Program Stroka; Var st:string; i:integer; Begin readln(st); i:=1; while i<=length(st) do begin write(st[i]); inc(i); end; End.
Она просто считает строку и выведет ее на экран, конечно, вывод можно было сделать просто writeln(st); но этот цикл может быть полезен, когда Вам нужно что-то подсчитать с строке или изменить, например, давайте подсчитаем количество цифр. Вот ее код:
Program Stroka2; Const Cifri = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']; Var st:string; i:integer; Begin readln(st); i:=1; while i<=length(st) do begin if st[i] in Cifri then write(st[i]); inc(i); end; End.
Данный алгоритм очень прост. Мы просто заносим все цифры в константу, замечу, что, если вы работаете со строкой, то в константе цифры нужно указывать в одинарных кавычках, иначе будет ошибка несоответствия типов. Теперь перейдем к циклу repeat … until. Его синтаксис таков: Repeat <Фрагмент программы> until <условие>.
Сначала компьютер по очереди выполняет операторы, стоящие после слова repeat, пока не дойдет до слова until, после чего проверяет истинность условия, стоящего после until. Если условие ложно, то компьютер снова по очереди выполняет эти операторы и снова проверяет истинность условия и т.д.
Если условие оказывается истинным, то работа оператора repeat прекращается и компьютер переходит к выполнению следующего по порядку оператора. Заметим, что цикл repeat выполниться всегда хотя бы один раз, независимо от условия, ведь сначала выполняются операторы внутри самого цикла, а только потом проверяется условие.
Вообще, конструкция repeat until переводится с английского как «повторяй до тех пор, пока не…» Напишем программу, которая будет считывать строку от пользователя до тех пор, пока в строке не встретиться точка или количество символом в строке не превысит 20.
Program Repeat1; Var c:char; i:integer; str:string; Begin i:=0; str:=''; repeat inc(i); read(c); str:=str+c; until (c = '.') or (i>20); writeln(str); End.
Теперь поговорим немного о вложенных циклах. Они используются тогда, когда нужно внутри каждого оператора цикла повторить что-то несколько раз. Давайте напишем программу, которая будет выводить на экран таблицу умножения.
Program TableUmnozh; Var a,b,p: Integer; Begin for a:=1 to 9 do begin WriteLn; for b:=1 to 9 do begin p:=a*b; Write(a, '*' ,b, '=', p:2, '; ') end; end; End.
Здесь с помощью вложенность одного цикла for в другой и образуется таблица. Такой алгоритм чаще всего используется, когда нам нужно работать с двумерными массива или массивами строк.