Azotirovanie.ru

Инженерные системы и решения
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Цикл с параметром счетчиком

Цикл с параметром счетчиком

Этот вид оператора цикла называют for можно реализовать двумя способами.

Вариант 1 (с увеличением счетчика).

for Счетчик := НачальноеЗначение to КонечноеЗначение do
begin
< Инструкции >
end;

Ключевые слова for, dо обозначают «для», «выполняй» соответственно. Строка, содержащая for . do , называется заголовком цикла, оператор, стоящий после do образует его тело. Очень часто тело цикла — составной оператор. Если тело цикла представлено одиночным оператором, то begin и end не пишутся.

На блок-схеме алгоритма цикл с параметром удобно обозначать следующим образом (рис. 3.4).

Рис. 3.4. Условное обозначение на схемах алгоритмов цикла с параметром

Инструкции между begin и end , выполняются столько раз, сколько определяет выражение [(КонечноеЗначение — НачальноеЗначение) + I] .

Это соответствует всем значениям счетчика от начального до конечного включительно.

Если НачальноеЗначение больше, чем КонечноеЗначение , то инструкции между begin и end не выполняются ни разу.

Например, выполнение цикла — фрагмента программы:

For i:=10 to 14 do write (i:3);

выведет на экран последовательность цифр в виде:

Вариант 2 (с уменьшением счетчика).

for Счетчик := НачальноеЗначение downto КонечноеЗначение do
begin
< Инструкции >
end;

Инструкции между begin и end , выполняются столько раз, сколько определяет выражение [(НачальноеЗначение — КонечноеЗначение) + I] .

Если НачальноеЗначение меньше, чем КонечноеЗначение , то инструкции между begin и end не выполняются ни разу.

Например, выполнение цикла — фрагмента программы:

For i:=14 downto 10 do write (i:3);

выведет на экран последовательность цифр в виде:

Если переменная-счетчик имеет символьный char тип, то оператор:

For ch:=’a’ to ‘e’ do write (ch:2);

выведет на экран последовательность букв в виде:

For ch:=’e’ downto ‘a’ do write (ch:2);

выведет на экран последовательность букв в виде:

Обратите внимание — цикл for удобно использовать для организации вывода данных программы. Вместе с оператором if и функцией readln он позволяет выполнить постраничный вывод.

Например, при выполнении следующего цикла программа будет приостанавливать вывод после заполнения экрана столбцом цифр до нажатия клавиши .

for i:=1 to 50 do
begin
writeln (i);
if i mod 24 = 23 then readln;
end;

Следует знать:

• оператор (инструкция) for используется для организации циклов с фиксированным, заранее известным или определяемым во время выполнения программы числом повторений;

количество повторений цикла определяется начальным и конечным значениями переменной-счетчика. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла: от начального до конечного;

• переменная-счетчик должна быть порядкового типа: чаще — integer , реже — char, boolean или одного из пользовательских типов (см. разд. 2.1.2). Использование вещественного типа недопустимо;

начальное и конечное значения параметра цикла могут быть константами, переменными, выражениями и должны принадлежать к одному и тому же типу данных. Начальное и конечное значения параметра цикла нельзя изменять во время выполнения цикла;

• после нормального завершения оператора for значение параметра цикла равно конечному значению. Если оператор for не выполнялся, значение параметра цикла не определено;

параметр цикла for может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу. Если нужен другой шаг изменения параметра, предпочтительнее циклы repeat и while .

Примером действия оператора for может служить листинг 3.22, который выводит на экран таблицу перевода из градусов по шкале Цельсия(С) в градусы по Фаренгейту(Р) для значений от 15°С до 30°С с шагом 1 градус. Перевод осуществляется по формуле: F = С* 1.8+32.

Листинг 3.22. Таблица перевода из градусов по шкале Цельсия в градусы по Фаренгейту

В блоке описания переменных описаны параметр цикла I типа integer и переменная F — температура по Фаренгейту типа real . Переменная I , помимо функций управляющей переменной, является переменной, хранящей целочисленные значения температуры по шкале Цельсия. В начале выполнения программы на экран выводится надпись ‘ Температура ‘ , а затем оператором повтора выводится таблица соотношения температуры в шкалах Цельсия и Фаренгейта. Печать таблицы выполняется оператором Writeln(Tlo Цельсию= ‘ ,1,’ по Фаренгейту= ‘, F:5:2)

Цикл выполняется следующим образом.

При первом обращении к оператору for вычисляются значения начального (15) и конечного (30) параметров цикла, и управляющей переменной I присваивается начальное значение 15.

Затем циклически выполняется следующее:

1. Проверяется условие I .

2. Если оно соблюдается, то выполняется составной оператор в теле цикла, т. е. рассчитывается значение выражения 1*1.8+32 , затем оно присваивается переменной F , и на экран выводится сообщение ‘По Цельсию= ‘ ,1,’ по Фаренгейту= х, F:5:2

Если условие I не соблюдается, т. е. как только I станет > 30 , оператор тела цикла не выполняется, а управление в программе передается за пределы оператора for , в нашем примере на оператор end; .Программа завершает работу.

3. Значение параметра цикла I увеличивается на единицу, и управление передается в заголовок цикла for для проверки условия.

Далее цикл повторяется с п.1.

Листинг 3.23 содержит программу «Тест по таблице умножения», измененную таким образом, чтобы она задавала ученику ровно пять вопросов, а в конце тестирования выставляла оценку по пятибалльной системе. Естественно, в такой постановке задачи наилучшим решением будет являться цикл for .

Читайте так же:
Мортон личный кабинет счетчики

Листинг 3.23. Тест по таблице умножения (вариант № 4)

Листинг 3.24 содержит программу, которая вычисляет среднее арифметическое и определяет минимальное и максимальное число в последовательности действительных чисел, вводимых с клавиатуры.

Листинг 3.24. Определение среднее, минимума и максимума в группе чисел

Листинг 3.25 содержит программу, которая вычисляет частичные суммы n членов ряда 1, -1/3, +1/5, -1/7, +. сходящихся к значению p /4.

Листинг 3.25. вычисление частичной суммы членов ряда

&nbspпредыдущая &nbsp &nbsp &nbsp &nbsp&nbspменю &nbsp &nbsp &nbsp &nbspвверх &nbsp &nbsp &nbsp &nbsp&nbspследующая

Циклы — общее понятие; цикл с параметром

Запись последовательных команд не всегда может быть эффективным способом достижения поставленной цели. Очень часто в программе требуется выполнить одну и ту же последовательность действий несколько раз. Например, требуется вывести в текстовое поле (TMemo) числа от 1 до 100. Что делать в этом случае? Писать 100 строк кода? Конечно нет, это было бы просто глупо! Примеров можно привести множество. Причём во многих случаях число повторений может быть заранее неизвестно — в этом случае записать фиксированный набор команд просто невозможно.
На помощь придут циклы. Цикл — это специальная конструкция языка, позволяющая запрограммировать многократное выполнение определённого блока команд. Каждый "проход" цикла называется итерацией . В языке Pascal существует три типа циклов — цикл с параметром (цикл по переменной), цикл с предусловием и цикл с постусловием. В данном уроке мы познакомимся с циклом по переменной.

Цикл с параметром

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

Цикл с параметром описывается зарезервированным словом FOR (англ. "для"). Общий вид конструкции цикла FOR:

Переменная-счётчик — объявленная выше переменная перечислимого типа (в большинстве случаев — число).

Начальное значение и конечное значение — границы диапазона, который последовательно "пробежит" переменная-счётчик. Значения, естественно, того же типа данных, что и переменная-счётчик.

При этом следует обращать особое внимание на указанные значения. В зависимости от их соотношения используется либо ключевое слово TO, либо DOWNTO. Слово TO используется в том случае, когда конечное значение больше начального, а DOWNTO — наоборот, т.е. когда цикл пойдёт по убыванию. В случае, если указанные значения не будут соответствовать ключевому слову, то требуемый результат не будет достигнут — цикл, вероятно, выполнится всего один раз.

В качестве действий указывается какая-либо команда, либо набор команд. Если команд несколько, их, как обычно, следует заключать в блок BEGIN .. END.

Рассмотрим пример, речь о котором шла в начале статьи, только немного усложним его — будем выводить не только числа от 1 до 100, но и их квадраты.

Итак, мы заранее знаем, что нам следует выполнить одну и ту же команду — добавление строки в Memo, 100 раз. Запрограммируем это с помощью цикла FOR. Для начала следует разместить на форме TMemo (Memo1). Выполнение команд логичнее всего "повесить" на нажатие кнопки. Для добавления строк в TMemo следует воспользоваться методом Add его свойства Lines. Lines — это набор всех строк TMemo, а метод Add позволяет добавить указанную строку. Перед выполнением цикла содержимое Memo очищается.

Разберём, что здесь происходит: мы заводим переменную i (Integer, целое число) и указываем её как счётчик для цикла. Поскольку нам нужно вывести числа от 1 до 100, указываем соответствующий диапазон. Команда — добавление строки в Memo, содержащей текущее число и его квадрат. Преобразование типов (в данном случае — чисел в строки) обязательно. Как это будет работать: сначала переменной i будет присвоено значение 1, после чего выполнится указанная команда, т.е. в Memo добавится строка "1: 1", далее i станет равным 2 и снова команда повторится. Так произойдёт 100 раз — в результате в Memo и окажется 100 строк.

Одна из часто встречающихся ошибок — использование значения переменной-счётчика после завершена цикла. После выполнения цикла значение переменной-счётчика не определено! В данном случае после завершения цикла значение i не будет 100, хотя по случайности оно может быть. Если Вы хотите использовать значение переменной далее, присвойте ей это значение явным образом.

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

Никаких специальных конструкций для вложенных циклов нет. Всё работает точно также. Переменные-счётчики циклов, как правило, называют буквами I, J, K, хотя название, конечно, может быть любое.

Читайте так же:
Если жильцы не хотят ставить счетчик

Простейший пример применения вложенного цикла — вывод таблицы умножения. Для начала продумаем алгоритм: для вывода таблицы для одного конкретного числа (например, для 5), нужно создать цикл, который пройдёт значения от 1 до 9 и выведет произведение числа 5 на каждое из этих чисел. А чтобы вывести таблицу для самих чисел от 1 до 9, нужен ещё один такой же цикл.

Прерывание и продолжение цикла

Примечание: то, о чём пойдёт речь далее, применимо не только к циклу по переменной, но и к циклам с пред- и постусловием.

Не всегда выполнение фиксированного числа итераций приводит к нужному результату. Иногда в процессе выполнения могут возникнуть ситуации, когда цикл логично было бы завершить, не выполняя его до конца, т.е. нужно просто исключить все дальнейшие итерации. Такая возможность существует — для этого необходимо вызвать команду BREAK . Данная команда завершает цикл, который выполняется в данный момент, и продолжает выполнение программы. При этом текущая итерация не выполняется до конца — прерывание происходит именно в той строке, где указана команда Break.
Замечание: если цикл, выполнение которого прерывается командой Break, вложен в другой цикл, то "внешний" цикл продолжит своё выполнение, т.е. команда Break останавливает только один цикл, а не все имеющиеся.
Завершение цикла — экстренный метод. Иногда же нужно просто пропустить текущую итерацию и перейти к следующей. Вручную это можно сделать, заключив все команды в блок условного оператора, однако такой способен неудобен и только загромождает код. Именно поэтому существует команда продолжения цикла и называется она совершенно логично — CONTINUE . Эта команда "заставляет" цикл тут же перейти к следующей интерации, не продолжая выполнение текущей.

Данный пример призван продемонстрировать применение команды Break.
Задача. Определить, есть ли среди букв английского алфавита (A — Z, в верхнем регистре) такие символы, коды которых обладают следующим свойством: квадрат кода символа больше числа 5000. Если такие символы существуют, указать первый из них согласно алфавитному порядку.

Во-первых, следует определиться с циклом. Смвольный тип (Char) — перечислимый, значит его можно использовать для переменной-счётчика цикла For. Во-вторых, для определения кода символа служит функция Ord(). В-третьих, нам не обязательно просматривать абсолютно все символы — если будет найден хотя бы один, значит требуемое условие выполнено и этот символ мы должны вывести как результат работы. Просматривать остальные символы не требуется.

Опишем цикл, который последовательно пройдёт все символы от A до Z. Коды символов упорядочены согласно следованию соответстующих букв в алфавите, поэтому "пробег" произойдёт точно по алфавиту, для этого в коде не требуется дополнительно что-либо писать. Код будет приблизительно таким:

Как сработает этот цикл: сначала будет взят символ "A", будет проверен код этого символа, после этого будет взят символ "B", проверен его код и т.д. Когда условие выполнится (это будет на символе "G"), будет выведено сообщение с результатом, но после этого цикл не продолжится — он тут же завершится. Мы уже нашли искомый символ, у нас есть результат, — зачем же тратить время на проверку остальных символов? В данном случае задержка по времени будет практически незаметна, ведь в алфавите всего 26 символов. Но что будет, если обрабатывать несколько тысяч записей?

Цикл с шагом позволяет указать шаг прохода счётчиком указанного диапазона. Например, в случае, когда требуется пройти все числа от 0 до 1000, которые делятся на 10, шагом будет число 10, а границами диапазона — 0 и 1000. Цикл при этом будет выполняться таким образом: сначала будет взято первое число и выполнена соответствующая итерация, затем к счётчику будет прибавлена не 1, как обычно, а шаг, т.е. 10 — следующая итерация выполнится при значении счётчика, равном 10, далее — 20, 30 и т.д.
Однако есть одна проблема — в Pascal возможности задавать шаг. нет! Да, так уж сложилось, что этой конструкции не предусмотрено. В некоторых языках программирования она есть (например, в Basic), в некоторых — нет.

Однако не составляет труда написать небольшую надстройку над обычным циклом, которая позволит это сделать. Этот пример также продемонстирует использование команды Continue.

Всё просто — нам достаточно проверить, отстаёт ли текущее значение счётчика на целое число шагов от начального значения и, если да, то выполнить текущую итерацию, а если нет — продолжить цикл.

Для тех, кто забыл: оператор mod выполняет деление с остатком. Разберёмся, как работает данный цикл: переменная-счётчик проходит значения указанного диапазона (в примере — от 3 до 100). Для проверки, является ли итерация "попадающей" под шаг, выполняется проверка, делится ли пройденное число единиц нацело на указанный шаг. В данном примере после 3 "попадание" будет на числе 13, т.к. 13 — 3 = 10 = Шаг * 1. Далее — 23, 33 и т.д. При этом первое значение диапазона всегда будет попадать в шаг, какое бы оно ни было, а последнее — не всегда (в данном случае 100 не попадёт).

Читайте так же:
Масло для роторных счетчиков

Блок команд для выполнения в цикле в данном случае указывается после else.

Сегодня мы познакомились с циклами, определили, для чего они нужны, а также познакомились с циклом по переменной — каким образом этот цикл записывается и как работает. Помимо этого мы разобрались, как организовать цикл с шагом, и как применять команды остановки и продолжения цикла. В следующий раз речь пойдёт о других циклах — циклах с постусловием и циклах с предусловием.

Цикл с параметром счетчиком

Информатика и информационно-коммуникационные технологии в школе

Полная или частичная перепечатка каким бы то ни было способом материалов данного сайта допускается только с письменного согласия автора.
При цитировании или ином использовании материалов ссылка на сайт www.klyaksa.net обязательна.

MyTestX - лего и удобно

Алгоритмическая структура «цикл». Циклы со счетчиком и циклы по условию.

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

С необходимостью повторяющихся вычислений программисты сталкиваются постоянно. Например, если надо подсчитать, сколько раз буква "о" встречается в тексте необходимо перебрать все буквы. При всей простоте этой программы исполнить ее человеку очень трудно, а для компьютера это задача на несколько секунд.

Циклический алгоритм — описание действий, которые должны повторяться указанное число раз или пока не выполнено заданное условие.

Перечень повторяющихся действий называют телом цикла.

Например, на уроке физкультуры вы должны пробежать некоторое количество кругов вокруг стадиона.

Такие циклы называются — циклы со счетчиком.

На языке Basic они записываются следующим образом:

FOR Счетчик=НачЗнач TO КонЗнач [STEP шаг]
тело цикла
NEXT [Счетчик]

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

Пример: Вывести на экран все числа от 1 до 100. Для этого можно было бы написать следующую программу:

REM Вывод чисел от 1 до 100
PRINT 1
PRINT 2
PRINT 3
PRINT 4
PRINT 5
PRINT 6
PRINT 7
.
PRINT 98
PRINT 99
PRINT 100
END

Всего каких-то 102 строчки ;-). Хотя эту же программу можно написать намного короче:

REM Вывод чисел от 1 до 100
FOR I=1 TO 100
PRINT I
NEXT
END

Немного исправив программу можно сделать, чтобы она выводила все числа от a до b.

REM Вывод чисел от a до b
a=55
b=107
FOR I=a TO b
PRINT I
NEXT
END

В этом случае счетчик при первом прохождении цикла принимает значение переменной a, после чего выполняются операторы до ключевого слова NEXT. После этого счетчик увеличивается на единицу и сравнивается со значение переменной b, если счетчик меньше, то цикл выполняется еще.

Легко сделать чтобы программа выводила числа в обратном порядке. Для этого шаг цикла должен быть равен -1 (минус один). В этом случае значение счетчика каждый раз после прохождения цикла будет уменьшено на единицу.

REM Вывод чисел от b до a
a=55
b=107
FOR I=b TO a STEP -1
PRINT I
NEXT
END

Пример: Вычислить сумму двухзначных натуральных чисел.

REM Вычислить сумму двухзначных натуральных чисел
FOR I=10 TO 99
s=s+I
NEXT
PRINT "Результат = ",s
END

Программа перебирает числа от 10 до 99 каждый раз выполняя действия s=s+I. С точки зрения математики это совершенно бессмысленная запись, но рассмотрим её внимательней.
Процесс решения вычислительной задачи — это процесс последовательного изменения значений переменных. В итоге — в определенных переменных получается результат. Переменная получает определенное значение в результате присваивания. Вы помните, что присваивание — это занесение в ячейку, отведенную под переменную, определенного значения в результате выполнения команды.
В результате операции а=5 переменная а получает значение 5.
В результате операции с=a+b переменная с получает значение равное сумме значений переменной а и b.
В результате операции s=s+I переменная s получает значение равное сумме предыдущего значения переменной s и значения переменной I. Т.е., если до операции присваивания значение s было равно 5, а переменной I равно 3, то после операции значение переменной s будет равно 8 (5+3, старое значение s + значение I).
Значит после выполнения нашей программы в переменной s будет хранится сумма всех двузначных чисел от 10 до 99.

Пример: вычислить факториал числа а (записывается так: а!). Факториал — это произведение чисел от 1 до а. Например, 5! (факториал пяти) — это 5!=1*2*3*4*5.

REM Вычислить факториал числа
a=5
f=1
FOR I=1 TO a
f=f*I
NEXT
PRINT f
END

Вы, конечно, заметили, что до начала цикла мы присвоили переменной f значение равное единице. Иначе бы мы получили в результате ноль.

Читайте так же:
После установки счетчика затопило квартиру

В субботу вечером вы смотрите телевизор. Время от времени поглядываете на часы и если время меньше полуночи, то продолжаете смотреть телевизор, если это не так, то вы прекращаете просмотр телепередач.

Циклы такого вида называют — циклы с предусловием.

На языке Basic они записываются следующим образом:

DO WHILE условие
Тело цикла
LOOP

В этом цикле проверяется условие и если оно выполняется (ИСТИНА), то выполняется тело цикла до ключевого слова LOOP, затем условие проверяется снова . и так до тех пор пока условие истино.

DO UNTIL условие
Тело цикла
LOOP

Этот цикл отличается от предыдущего только тем, что он выполняется до тех пор пока условие не истинно (т.е. совсем наоборот).

Пример: Вывести все натуральные числа меньше данного.

REM Вывод всех чисел меньше данного
a=0
chislo=10
DO WHILE a<chislo
PRINT a
a=a+1
LOOP
END

Стоит обратить внимание на то, что цикл может быть не выполнен ни разу (если условие первоначально не истинно, например, a=5, а chislo=4). И наоборот, если условие будет истинно при любых значениях переменный, то цикл будет выполнятся бесконечное число раз (произойдет зацикливание).

Пример цикла, который будет выполнятся бесконечное число раз:

REM зацикливание
DO WHILE a=a
PRINT "Это сообщение будет выводится на экран постоянно"
LOOP
PRINT "А это сообщение вы не увидите никогда"
END

Вам надо поточить все карандаши в коробке. Вы точите один карандаш и откладываете его в сторону. Затем проверяете, остались ли карандаши в коробке. Если условие ложно, то снова выполняется действие ‘заточить карандаш’. Как только условие становится истинным, то цикл прекращается.

Циклы такого вида называют — циклы с постусловием.

На языке Basic они записываются следующим образом:

DO
Тело цикла
LOOP WHILE условие

DO
Тело цикла
LOOP UNTIL условие

Циклы такого рода отличаются тем, что хоть один раз, но тело цикла будет выполнено вне зависимости от условия. Условие проверяется после первого выполнения тела цикла.

Пример: Вычислите сумму цифр в числе.

REM Сумма цифр числа
DIM a, chislo, s AS INTEGER
INPUT "Введите число: ", chislo
a=chislo
DO
s=s+a MOD 10
a=a/10
a=INT(a)
LOOP UNTIL a=0
PRINT "Сумма цифр числа ",chislo ," равна: ", s
END

Переменную s используем для хранения суммы цифр. До начала цикла в переменную a заносим значение переменной chislo. Все дальнейшие преобразования осуществляем с переменной а. В цикле берем остаток от деления на 10 (последняя цифра числа) и прибавляем к тому, что уже есть в переменной s; делим значение переменной а на 10, берем целую часть (т.е. отбрасываем последнюю цифру числа) и заносим в а. Цикл продолжается до тех пор пока значение переменной а не окажется равным нулю (перебрали все цифры числа). Результат выводим на экран.

Цикл с параметром счетчиком

Цикл – это многократные повторяемые действия. В Турбо Паскале существует —
3 основных вида циклов:

-цикл с параметром

-цикл с предусловием

-цикл с постусловием

Цикл с параметром

Оператор имеет следующий формат:

For i:=A to B do S

где i – счетчик цикла, является переменной порядкового типа данных.

А – начальное значение, В – конечное значение счетчика цикла.

S – тело цикла (повторяющиеся действия).

Цикл работает следующим образом: переменной i присваивается начальное значение A, если A&lt-=B, то выполняется тело цикла S, после чего значение счетчика цикла i автоматическиувеличивается -на 1 и опять сравнивается с B. Цикл будет повторяться до тех пор, пока значение счетчика i не станет больше B. Если тело цикла S состоит из нескольких операторов, то они заключаются в операторные скобки (begin…end). Если в операторе for .. to последнее значение счетчика цикла меньше первого, то тело цикла не выполняется ни одного раза.

Блок-схема выглядит следующим образом:

Пример 1:Напечатать 10 раз фразу « турбо паскаль»

For i:=1 to 10 do writeln(‘турбо паскаль’)-

Существует еще одна разновидность цикла с параметром:

For i:=A downto B do S-

Цикл работает аналогично предыдущему, но после выполнения тела цикла, значение счетчика цикла автоматически —уменьшается -на 1. Если A&lt-B, то цикл не выполнится ни разу.

Цикл с предусловием

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

Цикл с предусловием(цикл «пока») имеет следующий формат:

While условие —do S

В качестве условия можно использовать любое логическое выражение, которое может быть либо истиной (true) ли ложью (false). S – тело цикла.

Сначала проверяется условие, если оно – истина, то выполняется тело цикла S и опять проверяется условие. Цикл будет повторяться до тех пор, пока условие – истина, как только условие станет ложным – происходит выход из цикла. Если изначально условие – ложь, то тело цикла не выполнится ни разу. В отличии от цикла с параметром в этом виде цикла не предусмотрено автоматическое изменение переменной цикла, поэтому в теле цикла S должны быть команды, изменяющие значение переменной цикла. В противном случае при запуске произойдет так называемое зацикливание программы (т.е. выполнение бесконечного цикла).

Читайте так же:
Аквариум со2 счетчик пузырьков

Если тело цикла S состоит из нескольких операторов, то они заключаются в операторные скобки (begin…end).

Блок-схема выглядит следующим образом:

Пример 2:Вводить числа с клавиатуры, пока не будет введено число 0

Урок 4 — Циклы в С++

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

Тип циклаСхема
Со счетчиком
С предусловием
С постусловием

План урока

1 Цикл со счетчиком — for

Цикл for применяется если тело цикла необходимо выполнить определенное число раз. Цикл выполняется в следующем порядке:

  1. инициализация счетчика;
  2. проверка условия — если результат развен false — цикл завершается;
  3. тело цикла;
  4. изменение счетчика;
  5. проверка условия — если результат развен false — цикл завершается;
  6. тело цикла;
  7. изменение счетчика;
  8. … (и так далее пока при проверке условия не будет получен false ).

Как и в других подобных случаях, фигурные скобки не обязательны если внутри цикла всего один оператор.

Допустим, нам необходимо посчитать сумму чисел от 1 до 50:

Сопоставьте ход выполнения этой программы с описанным выше порядком — это полезное упражнение. Попробуйте изменить начальное и конечное значение счетчика цикла, оператор <= на какой-нибудь другой.

2 Цикл с предусловием (while)

Цикл while очень похож на for (сравните приведенные выше схемы), но является наиболее общим — его стоит применять только если заранее не известно сколько раз нужно выполнить тело цикла.

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

Эта программа выводит двоичные разряды «задом-наперед», но в будущем мы научимся как это исправить.

3 Цикл с постусловием (do while)

Если тело цикла должно обязательно выполнится хотя бы один раз — то применяется цонструкция do while . В частности, такая конструкция нередко применяется для обеспечения корректности ввода — заставляя пользователя вводить данные пока они не окажутся корректными. Модифицируем программу из предыдущего урока — пусть пользователь обязательно введет правильный номер дня недели:

Обязательно запустите эту программу и попробуйте вводить разные данные.

4 Вложенные циклы. Операторы break и continue

Циклы могут сколько угодно раз вкладываться друг в друга. Рассмотрите пример программы, выводящей все «счастливые» четырехзначные билеты, попробуйте доработать ее для генерации шестизначных номеров:

В данном случае, каждый вложенный цикл генерирует очередную цифру билета. В результате 4 цикла сгенерируют все варианты билетов. Последний вложенный цикл проверяет «счастливость» (то есть равенство сумм цифр первой и второй половин номера).

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

Это самая большая программа в этом уроке, запустите ее и рассмотрите исходный код внимательно. Программа выводит меню до тех пор, пока пользователь сам не захочет выйти — мы не знаем когда именно это случится, поэтому в качестве условия в цикле записано true . Выход из этого цикла произойдет когда пользователь введет ноль (сработает оператор break ). Если пользователь ввел некорректный номер пункта меню — выведем ему сообщение об ошибке и повторим ввод еще раз (перейдем в начало цикла операротом continue ). Операторы break , вложенные в блок switch приводят к выходу из этого блока, но не цикла.

Операторы break и continue действуют на цикл, в который они непосредственно вложены.

5 Рекомендации по использованию циклов

К этому моменту, вам наверняка пришла мысль, что вместо одного типа цикла легко можно использовать другой. Например, в следующей таблице показано как каждым видом цикла можно вычислить сумму чисел от 1 до n:

циклом for
циклом while
циклом do. while

Наверняка, каждый предпочел бы первый вариант остальным — понять его наиболее просто. Кстати, решить эту задачу можно вообще без циклов — подймайте как.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector