Вы находитесь на странице: 1из 39

Кафедра менеджмента технологий

Основы алгоритмизации и
программирования на
языках высокого уровня

Холодова Елена Петровна


+375 29 681 63 09
alena-kholadava@yandex.ru
Минск, 2017 1
ТЕМА 4: Управляющие инструкции
языка С++

4.1. Операторы циклов

Институт бизнеса и менеджмента технологий БГУ


Операторы цикла позволяют многократно выполнять
серии однотипных действий. Действия выполняются до
тех пор, пока остается справедливым (или пока не будет
выполнено) некоторое условие.

1. Оператор for
2. Оператор while

Институт бизнеса и менеджмента технологий БГУ


№ 1. Оператор цикла for

Общий синтаксис оператора for:


for (инициализация; условие; изменение переменных)
{
оператор 1;
оператор 2;
…..
оператор N; В круглых скобках после ключевого слова
} for указывается программный код из 3-x
блоков (при этом каждый из блоков
может быть пустым). Блоки разделяются
точкой с запятой.

Институт бизнеса и менеджмента технологий БГУ


for (инициализация; условие; изменение переменных)

1-й блок является блоком инициализации.


В нем обычно присваиваются начальные
значения для переменной (или переменных)
цикла.
2-й блок - условие выполнения оператора
цикла. Пока справедливо условие, оператор
цикла будет выполняться.
3-й блок - это блок изменения индексных
переменных.

Институт бизнеса и менеджмента технологий БГУ


Институт бизнеса и менеджмента технологий БГУ
Пример. Один из наиболее простых способов использования
оператора цикла - для расчета суммы n натуральных чисел.

Институт бизнеса и менеджмента технологий БГУ


Основу программы составляет
оператор цикла for

Первый блок - инициализация


индексной переменной i начальным
единичным значением.
Второй блок - проверяемое условие i<=n. Это
означает, что оператор цикла выполняется до тех
пор, пока индексная переменная i не превышает
значения переменной n (значение переменной
предварительно вводится с клавиатуры).
В третьем блоке указана инструкция i++, в силу
чего значение индексной переменной на каждом
шаге увеличивается на единицу.

Институт бизнеса и менеджмента технологий БГУ


В основном блоке оператора цикла (в фигурных
скобках) использована команда s+=i, которой на
каждом шаге целочисленная переменная s
(начальное нулевое значение этой переменной
установлено при ее объявлении) увеличивается на
значение индексной переменной i.

Институт бизнеса и менеджмента технологий БГУ


Процедура выполнения оператора цикла следующая:
-Сначала индексной переменной присваивается
единичное значение.
-Затем проверяется условие, и если индексная
переменная меньше значения n, выполняется команда s+=i
(с текущими значениями переменных s и i).
-Далее выполняется команда i++, что приводит к
увеличению на единицу индексной переменной, после чего
снова проверяется условие.
Процесс будет продолжаться до тех пор, пока значение
индексной переменной не превысит значения переменной n.
Таким образом, после выполнения оператора цикла
значение переменной s определяется суммой натуральных
чисел от 1 до n. Это значение выводится на экран.

Институт бизнеса и менеджмента технологий БГУ


Предыдущий пример с промежуточным выводом результатов

Институт бизнеса и менеджмента технологий БГУ


ИСПОЛЬЗОВАНИЕ FOR С
ПУСТЫМИ БЛОКАМИ

Институт бизнеса и менеджмента технологий БГУ


Допускается использовать и
несколько иной синтаксис вызова
оператора цикла.
Некоторые (а то и все) блоки в
круглых скобках после ключевого
слова for могут быть пустыми.

Институт бизнеса и менеджмента технологий БГУ 13


Пример. Использование for без По сравнению с
предыдущим случаем,
блока инициализации
индексная переменная
i при объявлении
получает начальное
значение 1, а в
операторе цикла
отсутствует первый
блок (блок
инициализации).
В этом случае
необходимости в
первом блоке
инициализации
значений нет,
поскольку такая
инициализация для
индексной переменной
выполнена при ее
объявлении.
Институт бизнеса и менеджмента технологий БГУ
Пример. Использование for и без блока изменения
индексных переменных
В инструкции
for() отсутствуют
как первый, так и
третий блоки.
В этом случае
команду
изменения
значения
индексной
переменной
необходимо
вынести в
основной блок
оператора цикла
(11 строка).

Институт бизнеса и менеджмента технологий БГУ


Пример. Использование for без блока с В данном
условием выполнения цикла случае цикл будет
завершен
благодаря
инструкции
if (i>n) break;
в основном блоке
оператора for().
Как только
значение i
превысит
значение n, будет
выполнен
оператор break, в
результате чего
выполнение
оператора цикла
будет завершено.
Институт бизнеса и менеджмента технологий БГУ
Хотя инструкция for(;;) выглядит довольно
странно, функциональность программного кода
такая же, как и в предыдущих случаях. Однако
теперь, поскольку все три блока в круглых скобках
после инструкции for отсутствуют, инициализацию,
изменение значения индексной переменной и
проверку условия необходимо реализовывать при
объявлении переменных, до начала оператора
цикла и в основном блоке оператора цикла. Причем
пользователь должен самостоятельно
предусмотреть возможность завершения оператора
цикла!

Институт бизнеса и менеджмента технологий БГУ


ИСПОЛЬЗОВАНИЕ В БЛОКАХ FOR
НЕСКОЛЬКИХ ИНСТРУКЦИЙ

Институт бизнеса и менеджмента технологий БГУ


В блоке инициализации объявляются с
начальными значениями две переменные:
i со значением 1 и s со значением 0.
Переменные i и s локальны по отношению
к блоку for
Во втором блоке
проверяемое условие
i<=n является
традиционным

Третий блок состоит из команды s+=i++, в которой значение


индексной переменной i увеличивается на единицу, а значение
переменной s увеличивается на величину индексной переменной. В
команде s+=i++ оператор инкремента использован в постфиксной
форме. Поэтому сначала при текущем значении переменной i
вычисляется выражение s+=i, после чего переменная i увеличивается на
единицу.

Институт бизнеса и менеджмента технологий БГУ


Если заменить постфиксную форму
оператора инкремента на префиксную (т.е.
использовать команду s+=++i), алгоритм
изменится. Сначала на единицу будет
изменяться значение индексной переменной, а
уже после этого, на основе измененного
значения, будет рассчитываться значение
переменной s. В результате будет вычислена
сумма натуральных чисел не от 1 до n, а от 2 до
n+1.
Оператор summa=s присваивает текущее
значение s переменной summa, которая будет
видима вне блока for.
Институт бизнеса и менеджмента технологий БГУ
ИСПОЛЬЗОВАНИЕ ВЛОЖЕННЫХ
ОПЕРАТОРОВ FOR

Институт бизнеса и менеджмента технологий БГУ


Пример. Программа выводит на экран матрицу из 3 строк и
5 столбцов. Каждый элемент определяется по формуле 3*(j-
1)+i, где i – номер строки, j – номер столбца.

Институт бизнеса и менеджмента технологий БГУ


Индексная переменная i внешнего оператора цикла принимает
значения от 1 до 3 включительно. Эта переменная определяет
номер строки, в которой отображается число.
Номер столбца определяется индексной переменной j
внутреннего оператора цикла. Эта переменная при каждом
фиксированном значении переменной i пробегает значения от 1 до
5.
Во внутреннем операторе цикла выполняется всего одна
команда cout<<3*(j-1)+i<<" ";, с помощью которой выводятся
числа в соответствующей строке.
Что касается внешнего оператора цикла, то в рамках каждого
цикла выполняется две команды: внутренний оператор цикла
(выводятся числа в строке) и команда cout << endl; (для перехода к
новой строке).
Институт бизнеса и менеджмента технологий БГУ
Следует четко понимать разницу между двумя (или
более) вложенными операторами цикла и одним оператором
цикла с несколькими индексными переменными. Пример
такой ситуации проиллюстрирован в листинге.

Институт бизнеса и менеджмента технологий БГУ


В отличие от случая вложенных операторов, в
данной ситуации обе индексные переменные i и j
изменяются синхронно. Переменная i
инициализируется значением 10, а переменная j -
значением 90.
За каждый цикл значение переменной i
увеличивается на 5, а значение переменной j
уменьшается на 10. Значения переменных выводятся
на экран.
Процесс продолжается до тех пор, пока значение
переменной i меньше значения переменной j.

Институт бизнеса и менеджмента технологий БГУ


ДРУГИЕ ВАРИАНТЫ
ИСПОЛЬЗОВАНИЯ FOR

Институт бизнеса и менеджмента технологий БГУ


Пример. Цикл с уменьшающимся индексом

Институт бизнеса и менеджмента технологий БГУ


ЦИКЛЫ FOR С ИЗМЕНЯЮЩИМСЯ
ИНДЕКСОМ, НЕ РАВНЫМ ЕДИНИЦЕ

Институт бизнеса и менеджмента технологий БГУ


Пример. Программа считает сумму чисел 0.25,0.5, 0.75 и т.д.
до 5.

Институт бизнеса и менеджмента технологий БГУ


№ 2. Оператор цикла while

Помимо оператора цикла for (), широко используются


циклы
while () и do while ()

Институт бизнеса и менеджмента технологий БГУ


Общий синтаксис оператора while:
while (условие)
{оператор 1;
оператор 2;
…..
оператор N;
}
Сначала проверяется условие, указанное в
круглых скобках после ключевого слова while. Если
условие справедливо, поочередно выполняются
операторы, указанные в фигурных скобках после
инструкции while(). Если инструкция одна,
фигурные скобки можно не указывать.

Институт бизнеса и менеджмента технологий БГУ


Институт бизнеса и менеджмента технологий БГУ
Пример. Реализация программы для вычисления суммы натуральных
чисел с помощью оператора цикла while ()

Институт бизнеса и менеджмента технологий БГУ


Общий синтаксис оператора do while:

do {
оператор 1;
оператор 2;
…..
оператор N;
}
while (условие);

В операторе цикла do while() выполняемые команды


(заключенные в фигурные скобки) указываются после
ключевого слова do.
Далее проверяется условие, указанное в круглых скобках
после ключевого слова while. Если условие выполнено, снова
выполняются команды после ключевого слова do и т.д.

Институт бизнеса и менеджмента технологий БГУ


Институт бизнеса и менеджмента технологий БГУ
Пример. Реализация программы для вычисления суммы натуральных
чисел с помощью оператора цикла do while ()

Институт бизнеса и менеджмента технологий БГУ


Таким образом, принципиальная разница
между операторами while () и do while ()
состоит в том, что:
в первом случае сначала проверяется
условие, а затем (если верно условие)
выполняются команды;
во втором случае сначала по крайней
мере один раз выполняются команды, а затем
проверяется условие.

Институт бизнеса и менеджмента технологий БГУ


Если переменной n, например, присвоить отрицательное
значение, то первая программа в качестве значения суммы
укажет 0, в то время как во втором случае будет выведена 1.
Причина в том, что в цикле while () при ложном
проверяемом условии команды оператора цикла не
выполняются и в качестве значения суммы возвращается
начальное нулевое значение переменной s.
Во втором случае сначала выполняется один цикл и уже
после этого проверяется условие. За этот один выполненный
цикл значение переменной s увеличивается на 1, и в
результате программой для суммы натуральных чисел
возвращается единичное значение.
while(i<=n){ do {
s+=i; s+=i;
i++; } i++; }
cout<<"Сумма :"<<s; while(i<=n);
cout<<"Сумма : "<< s;
Институт бизнеса и менеджмента технологий БГУ
По сравнению с оператором цикла for(),
операторы while() и do while() требуют от
программиста большей ответственности в
первую очередь в плане детальной
проработки механизма изменения
значения проверяемого условия в процессе
выполнения команд основного блока
оператора.
Программный код должен быть
составлен корректно, чтобы не получить
бесконечный цикл.

Институт бизнеса и менеджмента технологий БГУ