Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dokument_Microsoft_Word_PROGA.docx
Скачиваний:
5
Добавлен:
28.09.2019
Размер:
156.22 Кб
Скачать

22. Возможности использования оператора цикла for.

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию. Тело цикла повторяется для разных, в данном случае последовательных, значений переменной i. Повторение иногда называется итерацией. Мы как бы проходим по последовательности значений переменной i, выполняя с текущим значением одно и то же действие, тем самым постепенно вычисляя нужное значение. С каждой итерацией мы подходим к нему все ближе и ближе. С другим принципом вычислений в программировании – рекурсией – мы познакомимся в разделе, описывающем функции.

Любое из трех выражений в заголовке цикла может быть опущено (в том числе и все три). То же самое можно записать следующим образом:

int sum = 0;

int i = 1;

for (; i <= 100; ) {

sum = sum + i;

i = i + 1;

}

Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. Другой вариант:

int sum = 0;

int i = 1;

for (; ;) {

if (i > 100)

break;

sum = sum + i;

i = i + 1;

}

В последнем примере мы опять встречаем оператор break. Оператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continue. Оператор continue заставляет пропустить остаток тела цикла и перейти к следующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100, которые не делятся на 7, можно записать это так:

int sum = 0;

for (int i = 1; i <= 100; i = i+1) {

if ( i % 7 == 0)

continue;

sum = sum + i;

}

23. Операторы циклы while и do while.

Цикл while в C++

Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.

// форма записи цикла while

while (/*условие продолжения цикла while*/)

{

/*блок операторов*/;

/*управление условием*/;

}

Условие продолжения цикла должно быть истинно "true", как только условие стало ложным, выполняется выход из цикла. Также как и в условных операторах выбора, фигурные скобочки могут опускаться в том случае, если тело цикла - это один оператор. Но как правило в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы.

Рассмотрим применение цикла while на примере движения автомобиля. На псевдокоде, то это будет так:

// Пока скорость движения автомобиля меньше 60 км/ч, продолжать наращивать скорость.

Истинным условием цикла, в данном случае, является скорость автомобиля меньше 60 км/ч, а ложным - скорость автомобиля больше или равно 60 км/ч. Повторение цикла будет продолжаться до тех пор пока скорость автомобиля не станет больше или равно 60 км/ч, после наступления этого момента условие цикла станет ложным, и программа выйдет из цикла. Рассмотрим фрагмент кода на C++ с циклом while решающим поставленную задачу.

int speed = 5; // начальная скорость автомобиля

while ( spped < 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; - с таким значением переменной закончилась работа цикла while. Давайте запрограммируем эту задачу, и убедимся в достоверности всего выше сказанного.

// while.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

int speed = 5, count = 1;

while ( speed < 60 )

{

speed += 10; // приращение скорости

cout << count <<"-speed = " << speed << endl;

count++; // подсчёт повторений цикла

}

system("pause");

return 0;

}

Итак, в строке 14 добавил переменную-счётчик, для подсчёта прохождений цикла. Тело цикла увеличилось, поэтому пришлось поставить фигурные скобочки.

Цикл do while в C++

Цикл 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, после которого обязательно нужно ставить точку с запятой. Рассмотрим программу на С++ с циклом do while, которая выполняет некоторые транзакции с денежным счётом в банке.

// do_while.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

#include <ctime>

using namespace std;

int main(int argc, char* argv[])

{

srand(time(0));

int balance = 8; // баланс

do // начало цикла do while

{

cout << "balance = " << balance << endl; // показать баланс

int removal = rand() % 3; // переменная, для хранения вычитаемого значения

cout << "removal = " << removal << endl; // показать вычитаемое значение

balance -= removal; // управление условием

}

while ( balance > 0 ); // конец цикла do while

system("pause");

return 0;

}

строке 11 объявлена переменная balance, она отвечает за остаток денежных средств на счету. С 12-й по 19-ю строки записан цикл do while. В цикле do while выполняются все транзакции со счётом balance, а именно - перевод денежных средств на какой-то другой счёт, строка 17. Строка 14 показывает остаток денежных средств на счету balance. В строке 15 объявлена переменная, в которой хранится вычитаемое значение, причём это значение генерируется случайно в интервале [0;2]. Переменная removal один раз объявляется в теле цикла do while, и каждый раз при повторении цикла эта переменная не переобъявляется. А вот её значение меняется, в зависимости от того, какое число сгенерировалось. В строке 19 записано условие цикла do while, как только условие станет ложным, программа передаст управление следующему оператору, после цикла do while, строка 20.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]