"Программы без ошибок можно написать
двумя способами, но работает — третий"
Алан Джей Перлис

Оператор цикла с предусловием. Цикл 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.

Вот, собственно, и все, о чем я хотел вам рассказать на этом уроке. Если возникли какие-то вопросы, не стесняйтесь задавать их, контакты для связи со мной находятся здесь. Если вопросов нет - жду вас на следующих занятиях.