Sibprompost.ru

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

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

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

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

Повторяемый блок вычислений называют телом цикла. В теле цикла должно быть обеспечено изменение значения счетчика, чтобы он мог завершиться. Если тело цикла состоит более чем из одного оператора, оно заключается в операторные скобки begin . end; . Однократное выполнение тела цикла называют его шагом.

Таким образом, для программирования цикла достаточно определить условие, управляющее числом его повторений и описать операторы, образующие тело цикла. С этой точки зрения, теоретически возможны всего два вида циклов — проверка условия либо предшествует выполнению тела цикла, либо происходит после него. Изобразим эти циклы в виде блок-схем (рис. 9.1).

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

Рис. 9.1. Блок-схемы циклов с предусловием и постусловием

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

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

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

while логическое_выражение do begin

Работу цикла можно описать словами: «пока логическое выражение истинно, повторяется тело цикла».

Логическое выражение строится по правилам, изученным в гл. 7. Тело цикла могут образовывать любые операторы Паскаля. Если в цикле находится всего один оператор, операторные скобки, показывающие начало и конец тела цикла, можно не писать.

Общая запись цикла с постусловием следующая:

Работает цикл с постусловием следующим образом: «тело цикла повторяется до тех пор, пока логическое выражение не станет истинным». Обратите внимание, что, в отличие от while , цикл repeat в Паскале работает, пока условие ложно. Это отличие подчеркивается использованием ключевого слова until («до тех пор, пока не») вместо while («до тех пор, пока»). Кроме того, в виде исключения, тело цикла repeat , даже если оно состоит из нескольких операторов, можно не заключать в операторные скобки.

Довольно часто циклы взаимозаменяемы. Представим, например, что для каждого из значений переменной x = 1 , 2 , . , 20 , нужно выполнить некоторый расчет (математически этот закон изменения x можно записать как или ). Это можно сделать как в цикле while :

Читайте так же:
Обнуление счетчика паролей iphone

while x do begin

так и с помощью repeat :

Как видно из листинга, управляющей переменной x в обоих случаях присвоено начальное значение 1 , оба цикла изменяют значение x и, соответственно, условие цикла, оператором x:=x+1; , но для цикла repeat условие «перевернуто» («пока x не станет больше 20 «), а тело не заключено в операторные скобки.

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

Операторы цикла в языке Си

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

Каждый цикл состоит из

  • блока проверки условия повторения цикла
  • тела цикла

Цикл выполняется до тех пор, пока блок проверки условия возвращает истинное значение.
Тело цикла содержит последовательность операций, которая выполняется в случае истинного условия повторения цикла. После выполнения последней операции тела цикла снова выполняется операция проверки условия повторения цикла. Если это условие не выполняется, то будет выполнена операция, стоящая непосредственно после цикла в коде программы.

В языке Си следующие виды циклов:

  • while — цикл с предусловием;
  • do…while — цикл с постусловием;
  • for — параметрический цикл (цикл с заданным числом повторений).

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

Общая форма записи

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

Пример на Си : Посчитать сумму чисел от 1 до введенного k

Результат выполнения

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

Пример бесконечного цикла

while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу если в момент первой проверки проверяемое условие окажется ложным.

Например, если в приведенном выше коде программы ввести k=-1, то получим результат

Цикл с постусловием do. while

Общая форма записи

Цикл do. while — это цикл с постусловием, где истинность выражения, проверяющего Условие проверяется после выполнения Блока Операций , заключенного в фигурные скобки. Тело цикла выполняется до тех пор, пока выражение, проверяющее Условие , не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз.

Использовать цикл do. while лучше в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла.

Пример на Си . Проверка, что пользователь ввел число от 0 до 10

Результат выполнения:

Параметрический цикл for

Общая форма записи

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

  • Инициализация — присваивание параметру цикла начального значения;
  • Условие — проверка условия повторения цикла, чаще всего — сравнение величины параметра с некоторым граничным значением;
  • Модификация — изменение значения параметра для следующего прохождения тела цикла.
Читайте так же:
Счетчик времени работы операционной системы

Эти три операции записываются в скобках и разделяются точкой с запятой ; ;. Как правило, параметром цикла является целочисленная переменная.
Инициализация параметра осуществляется только один раз — когда цикл for начинает выполняться.
Проверка Условия повторения цикла осуществляется перед каждым возможным выполнением тела цикла. Когда выражение, проверяющее Условие становится ложным (равным нулю), цикл завершается. Модификация параметра осуществляется в конце каждого выполнения тела цикла. Параметр может как увеличиваться, так и уменьшаться.

Пример на Си : Посчитать сумму чисел от 1 до введенного k

Результат выполнения

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

Параметры, находящиеся в выражениях в заголовке цикла можно изменить при выполнении операции в теле цикла, например

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
int main() <
int k; // объявляем целую переменную key
int sum = 0; // начальное значение суммы равно 0
printf( «k = » );
scanf( «%d» , &k); // вводим значение переменной k
for ( int i=1; i // цикл для переменной i от 1 до k с шагом 1
<
sum = sum + i; // добавляем значение i к сумме
i++; // добавляем 1 к значению i

>
printf( «sum = %dn» , sum); // вывод значения суммы
getchar(); getchar();
return 0;
>

В цикле for может использоваться операция запятая, — для разделения нескольких выражений. Это позволяет включить в спецификацию цикла несколько инициализирующих или корректирующих выражений. Выражения, к которым применяется операция запятая, будут вычисляться слева направо.

Вложенные циклы

В Си допускаются вложенные циклы, то есть когда один цикл находится внутри другого:

Пример : Вывести числа от 0 до 99, по 10 в каждой строке

Результат выполнения

Рекомендации по выбору цикла

При выборе цикла необходимо оценить необходимость проверки условия при входе в цикл или по завершении прохождения цикла.
Цикл с постусловием удобно применять в случаях, когда для проверки условия требуется вычислить значение выражения, которое затем будет размещено в теле цикла (см. выше пример ввода числа от 0 до 10).
Цикл c предусловием используется в случае если все переменные, участвующие в выражении, проверяющем условие, проинициализированы заранее, но точное число повторений цикла неизвестно или предполагается сложная модификация переменных, участвующих в формировании условия повторения цикла.
Если цикл ориентирован на работу с параметром, для которого заранее известно число повторений и шаг изменения, то более предпочтительным является параметрический цикл. Очень удобно использовать параметрический цикл при работе с массивами для перебора элементов.

Операторы прерывания и продолжения цикла break и continue

В теле любого цикла можно использовать операторы прерывания цикла — break и продолжения цикла — continue .

Оператор break позволяет выйти из цикла, не завершая его.
Оператор continue позволяет пропустить часть операторов тела цикла и начать новую итерацию.

Пример на Си : Вывести числа от 0 до 99 ниже главной диагонали

Результат выполнения

Пример на Си : Вывести числа от 0 до 99 исключая числа, оканчивающиеся на 5 или 8

Читайте так же:
Как рассчитать расход по общедомовому счетчику

Результат выполнения

При вложенных циклах действия операторов break и continue распространяется только на самую внутреннюю структуру, в которой они содержатся.

Оператор безусловного перехода goto

Общая форма записи

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

Пример на Си : Вывести все целые числа от 5 до 0.

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

Циклы

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

JavaScript предлагает программистам несколько разновидностей циклов. Рассмотрим их подробнее.

Цикл со счетчиком

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

Цикл со счетчиком записывается так:

Здесь используется ключевое слово for. Поэтому такие циклы часто называют «циклами for».

Выражение инициализации выполняется самым первым и всего один раз. Оно присваивает особой переменной, называемой счетчиком цикла, некое начальное значение (обычно 1). Счетчик цикла подсчитывает, сколько раз было выполнено тело цикла — собственно код, который нужно выполнить определенное количество раз.

Следующий шаг — проверка условия. Оно определяет момент, когда выполнение цикла прервется и начнет выполняться следующий за ним код. Как правило, условие сравнивает значение счетчика цикла с его граничным значением. Если условие возвращает true, выполняется тело цикла, в противном случае цикл завершается и начинается выполнение кода, следующего за циклом.

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

Пример цикла со счетчиком:

Этот цикл будет выполнен 10 раз. Мы присваиваем счетчику i начальное значение 1 и после каждого выполнения тела цикла увеличиваем его на единицу. Цикл перестанет выполняться, когда значение счетчика увеличится до 11, и условие цикла станет ложным.

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

Приведем еще два примера цикла со счетчиком:

for (i = 10; i > 0; i—) <
a += 3;
b = i * 2 + 1;
>

Здесь значение счетчика декрементируется. Начальное его значение равно 10. Цикл выполнится 10 раз и завершится, когда счетчик i будет содержать 0; при этом значения последнего будут последовательно уменьшаться от 10 до 1.

А в этом примере начальное значение счетчика равно 2, а конечное — 21, но цикл выполнится, опять же, 10 раз. А все потому, что значение счетчика увеличивается на 2 и последовательно принимает значения 2, 4, 6. 20.

Читайте так же:
Счетчик посещения сайта теги

Цикл с постусловием

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

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

Для задания цикла с постусловием предусмотрены ключевые слова do и while, по-этому такие циклы часто называют «циклами do-while».

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

А вот еще один пример:

var a = 0, i = 1;
do <
a = a * i + 2;
++i;
> while (i

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

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

Цикл с предусловием отличается от цикла с постусловием тем, что условие проверяется перед выполнением тела цикла. Так что, если оно (условие) изначально ложно, цикл не выполнится ни разу:

Для создания цикла с постусловием предусмотрено ключевое слово while. Поэтому такие циклы называют еще «циклами while» (не путать с «циклами do-while»!).

Пример цикла с предусловием:

Прерывание и перезапуск цикла

Иногда бывает нужно прервать выполнение цикла. Для этого JavaScript предоставляет Web-программистам операторы break и continue.

Оператор прерывания break позволяет прервать выполнение цикла и перейти к следующему за ним выражению:

В этом примере мы прерываем выполнение цикла, если значение переменной a превысит 50.

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

Здесь мы пропускаем выражение, вычисляющее a , для всех значений i от 10 до 20.

Циклы — Программирование

Цикл с предусловием (цикл ПОКА)

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

Условие проверяется до начала выполнения цикла, поэтому возможна ситуация, что тело цикла не будет выполнено ни разу.

Цикл с постусловием (цикл ДО)

Обеспечивает выполнение команд, составляющих тело цикла, пока условие не станет истинным (цикл выполняется, пока условие ложно).

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

Цикл с параметром (цикл со счётчиком, цикл ДЛЯ)

Обеспечивает выполнение блока команд, составляющего тело цикла, количество раз, заданное начальным, конечным значениями переменной-счётчика (параметра цикла) и шагом её изменения.

Первоначально переменной-счётчику (в данном примере — переменной i) присваивается начальное значение iH и выполняется тело цикла. После выполнения тела цикла значение счётчика увеличивается на заданную величину шага Δi и выполняется проверка: не превысило ли значение счётчика заданное конечное значение iK. Если не превысило, то вновь выполняется тело цикла. Иначе происходит выход из цикла.

В цикле с параметром количество выполнений тела цикла задано однозначно. В циклах же ПОКА и ДО количество выполнений тела цикла заранее не известно и определяется ситуацией. Поэтому необходимо проследить, чтобы во время выполнения циклов ПОКА и ДО происходило какое-то изменение переменных, задействованных в условии цикла (чтобы в какой-то момент истинность условия изменилась и цикл завершился). Несоблюдение этого требования приводит к бесконечному выполнению цикла (“зацикливанию” программы).

Читайте так же:
Учет по двух тарифным счетчикам

Конструкции циклов в языке Паскаль

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

Цикл с постусловием:

Цикл со счётчиком:

Тело цикла может включать в себя другой цикл. “Глубина вложенности” циклов теоретически может быть любой.

При выполнении вложенных циклов:

• начинает выполняться внешний цикл:

— выполняется тело внешнего цикла, в том числе целиком — внутренний цикл;

• проверяется условие внешнего цикла, если оно соблюдено, снова выполняется внешний цикл:

— выполняется тело внешнего цикла, в том числе целиком — внутренний цикл;

Правила построения вложенных циклов:

• циклы не должны “пересекаться”, т.е. внутренний цикл должен начинаться и полностью завершаться внутри тела внешнего цикла;

• во внутреннем и во внешнем циклах ДЛЯ должны использоваться разные переменные-счётчики.

Операторы досрочного завершения цикла

Оператор языка Паскаль

Оператор продолжения — выполнение данного оператора прекращает текущее выполнение тела цикла и передаёт управление на проверку условия цикла.

Оператор прерывания — выполнение данного оператора прекращает выполнение цикла и передаёт управление на следующий оператор после цикла.

Разбор типовых задач

Задача 1. Определите, что будет напечатано в результате работы следующего фрагмента программы:

Строится таблица трассировки.

Таким образом, выводится значение переменной k, равное 103.

Таблицу трассировки можно записывать упрощённо (подразумевая, что условие s 365, откуда d > 365/11, т.е. d > 33 2 /11 /или, учитывая, что числа — целые, d > 34.

4) Чтобы теперь оценить верхнюю границу интервала возможных значений d, надо учесть, что при слишком большом значении d цикл мог бы прерваться ещё после 10 проходов (а то и раньше). Значит, нам нужно определить значение d, на единицу меньшее, чем минимальное значение d, обеспечивающее выполнение 10 проходов цикла. В этом случае неравенство будет таким:

10d > 365, тогда d > 365/10, или d > 36,5.

5) Рассуждая аналогично п. 3, можно заключить, что минимальное значение d, при котором цикл завершится через 10 проходов, равно 37 (ближайшее целое число, большее 36,5). Нам же требуется значение d, на единицу меньшее. Это число 36.

Таким образом, диапазон возможных значений d, обеспечивающих выполнение 11 проходов цикла, составляет [34..36], а искомое максимальное значение d, при котором будет выведено число 55, равно 36.

Библиотека образовательных материалов для студентов, учителей, учеников и их родителей.

Наш сайт не претендует на авторство размещенных материалов. Мы только конвертируем в удобный формат материалы из сети Интернет, которые находятся в открытом доступе и присланные нашими посетителями.

Если вы являетесь обладателем авторского права на любой размещенный у нас материал и намерены удалить его или получить ссылки на место коммерческого размещения материалов, обратитесь для согласования к администратору сайта.

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

© 2014-2021 Все права на дизайн сайта принадлежат С.Є.А.

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