Оператор цикла с предусловием. Цикл While
Сегодня наш урок будет посвящен оператору While
. Для начала коротко о том, для чего он нужен.
В переводе на русский он означает "пока" (пока условие истинно, выполнять какое-либо действие). Бывает, что перед программистом стоит задача выполнить какую-нибудь процедуру некоторое количество раз, заранее неизвестное. Критерием выполнения этой процедуры служит какое либо логическое условие. Допустим, процедура должна будет выполняться до тех пор, пока рак на горе не свистнет. И вот каждый раз после ее выполнения цикл While будет проверять это условие, свистнул ли рак на горе или нет? Если нет, то процедура повторится еще раз, затем еще и еще, пока рак не свистнет. Я думаю, общий принцип вам понятен. Рассмотрим теперь структуру написания цикла While.
Такой оператор строится по следующей схеме:
где
while, do
- зарезервированные слова (в переводе на русиш - пока, выполнять);
выражение
- условие, управляющее повторениями, должно быть логического типа;
оператор
- любые операторы языка Pascal
1) Проверяется выражение. Если оно дает значение
true
, то выполняется оператор. В противном случае работа цикла прекращается;2) После того, как оператор выполнился, опять переходим к пункту №1.
По традиции разберем простенькую задачку с циклом While
: "Даны положительные числа А и В (А>B). На отрезке длины А размещено максимально возможное количество отрезков длины В (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка А."
Итак, чтобы понять какой код программы на языке Pascal вы должны написать, вам нужно подумать, как эта задача решается с точки зрения математики. Такие задачки решают в начальной школе. Представьте, что у нас есть большой отрезок (А), на котором размещены отрезки поменьше (В). Возьмите для примера отрезок А = 11
и отрезок В = 2
. Можете даже нарисовать их на черновичке, для большей наглядности. Как то так:
На отрезке А
умещается 5 отрезков В
. Как же нам найти оставшееся расстояние, помеченное вопросом? Я предлагаю отнимать от длины отрезка А
длину отрезка В
и сравнивать оставшуюся часть с длиной отрезка В
(хватит ли этого остатка, чтобы еще раз разместить на нем отрезок В
). Если этого остатка будет мало, то значит это и есть длина незанятой части отрезка А
.
Составляем программу. В начале программы объявим две переменные (A,B
), тип этих переменных будет real
, хотя вы можете использовать переменные целого типа (integer
). Более подробно о типах переменных можешь прочитать здесь "Простые типы данных в Pascal". Далее сделаем ввод значений этих переменных с клавиатуры ( о том как это делать я рассказывал в третьем уроке "Операторы ввода в Pascal").
program dlina;
var
A,B:real;
begin
writeln('Введите значение А');
readln(A);
writeln('Введите значение В');
readln(B);
Далее используем цикл While
. Условие для его выполнения будет таким: A>=B
. Действие, которое будет выполняться в теле цикла - это вычитание из длины отрезка A
длины отрезка B
, результат вычитания будет присваиваться переменной A
. После того, как цикл отработает, и нам станет известна незанятая часть, мы выведем ее значение на экран.
while A>=B do
A:=A-B;
write('Длина незанятого отрезка = ',A:2:2);
end.
Соберем весь код в кучу:
program dlina;
var
A,B:real;
begin
writeln('Введите значение А');
readln(A);
writeln('Введите значение В');
readln(B);
while A>=B do
A:=A-B;
write('Длина незанятого отрезка = ',A:2:2);
end.
Вот, собственно, и все, о чем я хотел вам рассказать на этом уроке. Если возникли какие-то вопросы, не стесняйтесь задавать их, контакты для связи со мной находятся здесь. Если вопросов нет - жду вас на следующих занятиях.