Урок 9. Оператор цикла do while

Цикл for в Python итерирует по заданной последовательности и обладает следующим синтаксисом:

Как перебрать значения списка циклом for?

Циклы for перебирают коллекцию элементов, таких как list или dict, и запускают блок кода с каждым элементом из коллекции.

for i in [0, 1, 2, 3, 4]: print(i) # Вывод: # 0 # 1 # 2 # 3 # 4

Вышеприведенный цикл for выполняет итерацию по списку итерация устанавливает значение i для следующего элемента списка. Итак, сначала это будет , затем 1, затем 2 и т.д

Аналогично, цикл работает с любыми типами списков, например, со списком строк:

for x in [‘one’, ‘two’, ‘three’, ‘four’]: print(x) # Вывод: # one # two # three # four

Часто, необходимо сгенерировать последовательность чисел и обойти ее, для этого удобно использовать функцию range:

for x in range(1, 6): print(x) # Вывод: # 1 # 2 # 3 # 4 # 5

Оператор while в Java

Оператор цикла while имеется почти во всех современных языках программирования. Конечно, в Java он тоже есть. Эта конструкция позволяет выполнять один и тот же блок кода любое количество раз. Остановка выполнения происходит в том случае, если условие становится ложным, либо в коде прописан явный выход из цикла.

В общем виде данная конструкция выглядит так:

while (условие) { // тело цикла }

В данном случае условие должно возвращать true или false. Пока оно равно true, тело цикла выполняется. Как только условие принимает значение false, цикл while заканчивается.

Простой пример работы оператора while:

int counter = 0; int sum = 0;

while (counter < 10) { sum += counter; counter++; }

Читайте также:  Установка Linux Mint Debian Edition 4 (LMDE)

(sum); // 45

При выполнении обычного цикла while сначала проверяется условие. Если оно ложно, то тело цикла не выполнится ни разу:

boolean flag = false;

while (flag) { («не будет выполняться»); }

Оператор цикла с постусловием

Синтаксическая диаграмма цикла repeat

Условие данного цикла в общем случае задается логическим выражением, которое указывается после ключевого слова until. Тело цикла располагается между ключевыми словами repeat и until. Цикл с постусловием выполняется до тех пор, пока ложно условие цикла. То же самое можно сказать иначе: цикл с постусловием завершит свою работу, как только условие цикла станет истинным. Поэтому в цикле repeat нужно указывать условие окончания цикла, в отличие от цикла while, в котором указывается условие продолжения цикла.

Особенности цикла repeat:

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

2) В цикле repeat может выполняться любое количество операторов, и операторные скобки в этом случае не требуются (их роль играют служебные слова repeat и until).

3) Цикл выполняется пока условие цикла ложно.

4) Проверка условия цикла repeat происходит ровно столько раз, каково число повторений тела цикла.

5) В теле цикла должен быть оператор, влияющий на условие завершения цикла.

Пример 5. Пример организации корректного ввода в программе.

Repeat

WriteLn(‘Введите положительное число’);

ReadLn(x);

If x<=0 then Writeln(’Неверный ввод’);

Until x>0;

Пример 6. Составить программу, которая запрашивает числовой пароль до тех пор, пока он не будет правильно введён. Предусмотреть возможность завершения программы после 10 неудачных попыток. Если пользователю удалось правильно ввести пароль, вывести сообщение «Доступ разрешен», в противном случае – сообщение «Доступ запрещен».

Читайте также:  Как установить Linux: подробнейшая инструкция

Program kod;

Const parolOK=3424;

Var vvod:integer;

Counter:byte;

Begin Counter:=0;

Repeat

WriteLn(‘Введите пароль’);

ReadLn(vvod);

counter:=counter+1;

Until (parolOK=vvod) or (counter=10);

If parolOK=vvod then writeLn(’Доступ разрешен’)

else writeLn(’Доступ запрещен’)

End.

Пример 7. Целое положительное число p называется простым, если оно имеет только два делителя, а именно 1 и p. Единица (1) простым числом не считается. Определить, является ли натуральное число N простым. Использовать цикл с постусловием.

Program simple;

Var i, N:LongInt;

Begin

WriteLn(‘Введите натуральное число’);

ReadLn(n);

i:=1;

Repeat

i:=i+1

Until (i>n Div 2) Or (n Mod i=0);

If i>n Div 2 Then Writeln(‘Число ‘,n,’ – простое’)

Else Writeln(‘Число,n,’ – не простое’)

End.

Данное решение избыточно, т. к. достаточно было искать делители до

Пример №— вывод таблицы умножения

Вывод всевозможных таблиц — классический пример задач, где требуются вложенные циклы.Основная идея в подобных задачах состоит в том, что:

  1. есть какой-то главный (внешний) цикл, тело которого должно решить задачу вывода на экран очередной строки (ну и расчета значений, которые нужно выводить)
  2. но задача в вывода очередной строки в теле внешнего цикла, решается размещением в этом теле ещё одного вложенного цикла, который, например, формирует эту очередную строку из неких фрагментов, например символов или групп символов.

Таким образом получается, что на один виток внешнего цикла приходятся все витки внутреннего цикла, на второй виток внешнего внутренний цикл снова работает несколько раз до своего очередного завершения и т.д.

Рассмотрим решение задачи:

Вывести на экран таблицу умножения чисел от 1 до 9.

Решение (for в for):

var i, j: integer; begin for i := 1 to 9 do // цикл по строкам таблицы, счетчик как левый множитель begin for j := 1 to 9 do // выводим равенства очередной строки, счётчик как правый множитель write(i, ‘*’, j, ‘=’, i*j, ‘ ‘); writeln(); // переносим строку end; readln(); end.

Читайте также:  Установка и настройка Ubuntu 20.04 Server

Конечно, в качестве внешнего цикла можно было бы использовать любую другую из оставшихся двух конструкцию, например, давайте перепишем это решение используя вложение for в while:

var i, j: integer; begin i := 1; // начальное значение для счетчика внешнего цикла while (i <= 9) do // цикл по строкам таблицы, счетчик как левый множитель begin for j := 1 to 9 do // выводим равенства очередной строки, счётчик как правый множитель write(i, ‘*’, j, ‘=’, i*j, ‘ ‘); writeln(); // переносим строку i:=i+1; // увеличиваем значение счетчика внешнего цикла end; readln(); end.

Или даже while в repeat-until:

var i, j: integer; begin i := 1; // начальное значение для счетчика внешнего цикла repeat // начало тела внешнего цикла j := 1; // сбрасываем значение счетчика внутреннего цикла в единицу (чтобы он повторился как и предыдущий раз), или если речь идёт о первом витке, то это действие можно назвать заданием начального значения счетчика while (j<=9) do // выводим равенства очередной строки, счётчик как правый множитель begin write(i, ‘*’, j, ‘=’, i*j, ‘ ‘); j:=j+1; // увеличиваем значение счетчика внутреннего цикла end; writeln(); // переносим строку i:=i+1; // увеличиваем значение счетчика внешнего цикла until (i > 9); // проверка условия выхода из внешнего цикла и конец его тела readln(); end.