- •В. Г. Васильев Лабораторная работа №2
- •Работа рассчитана на 2 часа (1 занятие)
- •2.2. Цикл с параметром – оператор for
- •2.3 Циклы с неизвестным количеством повторений – оператор while
- •2.4 Цикл с постусловием – оператор do while
- •Пример 3. Пример того, что цикл выполниться хотя бы 1 раз.
- •Задание на дом
2.3 Циклы с неизвестным количеством повторений – оператор while
Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным. По статистике цикл while применяется в 20% циклически выполняемых операций.
// форма записи цикла while
while (/*условие продолжения цикла while*/)
{
/*блок операторов*/;
/*управление условием*/;
}
Условие продолжения цикла должно быть истинно "true", как только условие стало ложным, выполняется выход из цикла. Также как и в условных операторах выбора, фигурные скобки могут опускаться в том случае, если тело цикла - это один оператор. Но, как правило, в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы.
Рассмотрим применение цикла while на примере движения автомобиля. На псевдокоде, то это будет так:
// Пока скорость движения автомобиля меньше 60 км/ч, продолжать наращивать скорость.
Истинным условием цикла, в данном случае, является скорость автомобиля меньше 60 км/ч, а ложным - скорость автомобиля больше или равно 60 км/ч. Повторение цикла будет продолжаться до тех пор пока скорость автомобиля не станет больше или равно 60 км/ч, после наступления этого момента условие цикла станет ложным, и программа выйдет из цикла. Рассмотрим фрагмент кода на C++ с циклом while решающим поставленную задачу.
int speed = 5; // начальная скорость автомобиля
while ( speed < 60 ) // заголовок цикла while
speed += 10; // тело цикла
Для начала в строке 1 была объявлена и инициализирована переменная speed. В строке 2 программа проверяет условие цикла while, 5 < 60 = true. Программа входит в цикл и выполняет оператор в строке 3. Теперь уже speed = 15. Опять выполняется проверка 15 < 60 = true. Условие истинно, значение в переменной изменяется, speed = 25. Таким образом, выполняются последовательные повторения цикла, переменная speed ещё принимает такие значения: 35, 45, 55, 65. Последнее изменение переменной speed приводит к тому, что условие в цикле while становится ложным 65 < 60 = false, и производится выход из цикла while. Таким образом, выполнилось 6 повторений, при этом speed = 65. C таким значением переменной speed закончилась работа цикла while.
Пример 2. Вычисляем ординаты функции y = x2 с шагом dx =0.1 до тех пор, пока текущее значение ординаты x не больше X_max.
void __fastcall TForm1::Panel2Click(TObject *Sender)
{
float dx = 0.1, y,x, X_max;
String S;
x =0.0;
X_max = StrToFloat (Edit1->Text);
while(x < X_max+dx)
{
y = x*x;
S.sprintf ("x=%5.2f y=%5.2f",x,y);
Memo1->Lines->Add (S);
x = x+dx;
}
return;
}
2.4 Цикл с постусловием – оператор do while
Это тип цикла применяется сравнительно редко. Цикл do while отличается от цикла while тем, что в цикле do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Из-за такой особенности цикл do while называют циклом с постусловием. Таким образом, если условие цикла do while заведомо ложное, то хотя бы один раз блок операторов в теле цикла do while выполнится. В итоге цикл do while отличается от цикла while структурой. Если в цикле while сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do while работает с точностью да наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do while, хотя бы раз, выполнится.
// форма записи оператора цикла do while:
do // начало цикла do while
{
/*блок операторов*/;
}
while (/*условие выполнения цикла*/); // конец цикла do while
В начале цикла do while пишется зарезервированное слово do, после идут фигурные скобки, которые можно опускать, в случае использования одного оператора в теле цикла do while. После закрывающей фигурной скобки, обозначающей конец тела цикла do while, стоит условие цикла do while, после которого обязательно нужно ставить точку с запятой.