Циклом называется многократное повторение некоторого набора действий. Эти повторяющиеся действия называются телом цикла. Программа, содержащая цикл, называется циклической.
В языке Паскаль существует три оператора для организации циклов трех разных видов.
Цикл с предусловием.
While <условие> Do
<тело цикла>;
где <условие> - логическое выражение,
<тело цикла> - простой или составной оператор.
Компьютер сначала проверяет условие (поэтому цикл называется циклом с ПРЕДусловием). Если оно истинно, будет выполнено тело цикла, и произойдет переход снова на проверку условия. То есть, пока условие истинно, будет выполняться тело цикла. Таким образом, условие является в данном операторе условием выполнения цикла. Цикл с предусловием может быть представлен блок-схемой на Рис. 3.
Тело цикла может выполняться бесконечно (условие всегда истинно), может не выполниться ни разу (условие сразу ложно).
Цикл с постусловием.
Repeat
<тело цикла>
Until <условие>;
где <условие> - логическое выражение,
<тело цикла> - группа операторов.
Компьютер сначала выполняет тело цикла, затем проверяет условие (поэтому цикл называется циклом с ПОСТусловием). Если оно ложно, будет вновь выполнено тело цикла, и так до тех пор, пока условие не станет истинным. Таким образом, условие в данном операторе является условием окончания цикла. Цикл с постусловием может быть представлен блок-схемой на Рис. 4.
Тело цикла всегда выполнится хотя бы один раз, может выполняться бесконечно (если условие всегда ложно).
Цикл со счетчиком (с параметром).
For k:=A To B Do
<тело цикла>;
где k – счетчик (переменная перечислимого типа, в ней хранится количество сделанных повторов тела цикла),
А – начальное значение счетчика,
В – конечное значение счетчика,
<тело цикла> - простой или составной оператор,
шаг изменения счетчика +1.
При А>В тело цикла не будет выполнено ни разу.
Если необходимо использовать цикл со счетчиком, меняющимся с шагом -1, оператор приобретает вид:
For k:=A Downto B Do
<тело цикла>;
где А>В.
Если алгоритм требует другого шага изменения счетчика (отличного от +1 и -1), необходимо использовать другие операторы цикла (While или Repeat).
Примеры решаемых задач
Пример 1. Составить программу, которая выведет на экран числа от 1 до N.
Пояснение: составим три программы, т.е. решим данную задачу с использованием трех различных циклических конструкций.
Цикл с предусловием
Цикл с постусловием
Цикл со счетчиком
Program Numbers;
Uses Crt;
Var k, n : Integer;
Begin
Clrscr;
Write(‘Введите N ’);
Readln(n);
k:=1;
While k<=n do
Begin
Writeln(k);
k:=k+1
End;
Readln
End.
Program Numbers;
Uses Crt;
Var k, n : Integer;
Begin
Clrscr;
Write(‘Введите N ’);
Readln(n);
k:=1;
Repeat
Writeln(k);
k:=k+1
Until k=n+1;
Readln
End.
Program Numbers;
Uses Crt;
Var k, n : Integer;
Begin
Clrscr;
Write(‘Введите N ’);
Readln(n);
For k:=1 To n Do
Writeln(k);
Readln
End.
Пример 2. Составить программу, которая будет запрашивать пароль до тех пор, пока не будет введен верный ответ.
Программа:
Program Password;
Uses Crt;
Const Pass=’паскаль’; { верный ответ }
Var S : String;
Begin
Clrscr;
Repeat
Write (‘Пароль ’);
Readln (S); { вводим пароль }
If S <> Pass Then Writeln(‘Неверно!’)
Until S=Pass; { цикл закончен, если ввели верный пароль }
Writeln (‘Верно!’);
Readln
End.
Пример 3. Составить программу, которая выведет на экран все положительные члены арифметической прогрессии с разностью D= -1.5 и первым членом A.
Var A : Real; { В А будут храниться по очереди все члены прогрессии }
Begin
Clrscr;
Write (‘Введите первый член прогрессии ’);
Readln (A);
While A > 0 Do {пока очередной член прогрессии положителен}
Begin
Writeln(A); { печатаем число – член прогрессии }
A := A + D { вычисляем следующий член прогрессии и записываем его в ту же переменную А }
End;
Readln
End.
Пример 4. Составить программу, которая вычислит общее количество «5», «4», «3» и «2», полученных студентами группы за экзамен по программированию, а также средний балл за экзамен, если известны количество студентов в группе и отметки каждого из них.
Программа:
Program Students;
Uses Crt;
Var N, K, K5, K4, K3, K2, S, M : Integer;
{ N – количество студентов в группе,
K – счетчик всех студентов,
K5 – счетчик «5»,
K4 – счетчик «4»,
K3 – счетчик «3»,
K2 – счетчик «2»,
S – сумма всех отметок,
M – отметка очередного студента }
Sb : Real; { Sb – средний балл за экзамен }
Begin
Clrscr;
Write (‘Сколько студентов в группе? ’);
Readln (N);
For K := 1 To N Do { перебираем всех студентов }
Begin
Writeln (‘введите отметку ’, K, ‘студента ’);
Readln (M); {В переменную М вводим все отметки по очереди}
S := S+M; { В переменной S накапливается сумма всех отметок}
Case M Of { Увеличиваем нужный счетчик }
5 : K5 := K5 + 1;
4 : K4 := K4 + 1;
3 : K3 := K3 + 1;
2 : K2 := K2 + 1
End
End;
Sb := S / N; { Вычисляем средний балл }
Writeln (‘Количество «5» ’, К5);
Writeln (‘Количество «4» ’, К4);
Writeln (‘Количество «3» ’, К3);
Writeln (‘Количество «2» ’, К2);
Writeln (‘Средний балл группы за экзамен ’, Sb :5:2);
Readln
End.
Пример 5. Составить программу, которая определит наибольшее из N вводимых чисел.
Алгоритм поиска экстремума (максимума или минимума) числовой последовательности: сначала вводится первое число, оно полагается максимальным (или минимальным). После этого вводятся все остальные числа (от 2-го до N-го), каждое из них сравнивается с максимумом (минимумом), и если оно больше (меньше), то максимуму (минимуму) присваивается введенное число.
Программа:
Program Maximum;
Uses Crt;
Var Max, X : Real;
K, N : Integer;
Begin
Clrscr;
Write (‘Сколько чисел? ’);
Readln (N);
Write (‘Введите первое число ’);
Readln (Max);
For K := 2 To N Do
Begin
Writeln (‘Введите ’, K, ‘ число ’);
Readln (X);
If X > Max Then Max := X
End;
Writeln (‘Наибольшее из введенных чисел ’, Max);
Readln
End.
Пример 6. Составить программу, которая рисует в алфавитно-цифровом режиме звездное небо из N разноцветных звезд, расположенных на экране случайным образом.
Указание: Для решения данной задачи необходимо использовать специальную функцию – датчик случайных чисел. Она вызывается следующим образом: Random (N). Датчик случайных чисел возвращает случайное целое число из интервала от 0 до N-1. Таким образом, после выполнения команды
A := Random (10);
значением переменной А будет какое-то число (неизвестное заранее) из интервала от 0 до 9. Для того, чтобы при каждом запуске программы генерировалась новая последовательность случайных чисел, необходимо перед вызовом функции Random выполнить инициализацию датчика случайных чисел. Она выполняется командой Randomize (т.е. вызывается процедура с таким именем).
Кроме того, для решения данной задачи может потребоваться использование следующих процедур из модуля CRT:
1. ClrScr; - очистка экрана;
2. TextColor(c); - цвет выводимого текста, 0 £ с £ 15. Параметр С – это номер цвета (см. Приложение 1).
3. TextBackGround(c); - цвет фона, 0 £ с £ 7. Параметр С – это номер цвета (см. Приложение 1).
4. GotoXY(x,y); - позиционирование курсора в точку с координатами (x,y): 1 £ x £ 80, 1 £ y £ 25 (или 1 £ y £ 40 в зависимости от установленного максимального количества строк в алфавитно-цифровом режиме).
5. Delay(n); - приостановка (задержка) работы программы на n миллисекунд.