Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 02.doc
Скачиваний:
2
Добавлен:
21.08.2019
Размер:
90.11 Кб
Скачать

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, после которого обязательно нужно ставить точку с запятой.