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

Как называется цикл с заданным числом повторений

  • автор:

2. Программирование циклов с заданным числом повторений

Цикл с заданным числом повторений записывается в языке Паскаль при помощи оператора « for ».

Общий вид оператора:

Screenshot_13.png

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

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

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

printЗанятие № 2

Если какой-либо фрагмент алгоритма должен быть выполнен многократно, то это циклический алгоритм (цикл).
Циклические алгоритмы можно условно разделить на две группы.
1. Арифметический цикл, у которого заранее известно число повторений.
2. Итерационный цикл, у которого заранее неизвестно число повторений.

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

Можно выделить четыре составные части цикла.
1. Подготовка цикла: присваивание начальных значений переменным, в том числе параметру цикла.
2. Тело цикла: фрагмент, который должен быть повторен многократно.
3. Изменение параметра цикла: как правило, выполняется в теле цикла.
4. Проверка условия завершения цикла: в проверке условия, явно или нет,присутствует параметр цикла.
Не всегда эти составляющие присутствуют явным образом.

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

while (Условие) < //Количество повторений любое. Тело цикла > do < //Количество повторений любое. Тело цикла > while (Условие) for (объявление параметра цикла) < //Количество повторений фиксировано. Тело цикла >

Пример 1:
Алгоритм построения таблиц значений различных функций. Это,
чаще всего, арифметический цикл. Обычно параметром цикла является аргумент функции. Для функции задана формула вычисления значения `y(x)\ =\ F(x)` .
Известны диапазон изменения аргумента `x_0\ ≤\ x\ ≤\ x_n` , и шаг изменения dx.
Общая схема этого алгоритма на основе цикла while (Pascal) выглядит так:

x = x0; // Подготовка цикла. while x do // Проверка условия завершения. begin y = F(x); // Сколь угодно сложный алгоритм вычисления значения. // Вывод значения таблицы. x += dx; // Приращение управляющей переменной. end; // Выход из цикла. 

Общая схема этого алгоритма на основе цикла do … while на языке Pascal выглядит так:

x = x0; // Подготовка цикла. repeat y = F(x); //Сколь угодно сложный алгоритм вычисления значения. // Вывод значения таблицы. x += sx; // Приращение управляющей переменной. until (x > xn); // Проверка условия завершения. 

Общая схема этого алгоритма на основе цикла for языка Си выглядит так:

for (x = x0; x Все составляющие цикла в заголовке. < y = F(x); //Сколь угодно сложный алгоритм вычисления значения. // Вывод значения таблицы. >;

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

Пример 2. Вычисление суммы известного числа слагаемых. Пусть
требуется вычислить сумму `N` чисел натурального ряда
`S\ =\ 1\ +\ 2\ +\ 3\ +\ 4\ +\ …\ +\ N` , где `N` – любое наперед заданное число.
Это арифметический цикл, у которого параметром является номер слагаемого,который также определяет и значение очередного слагаемого, включаемого в сумму. Обозначим его буквой n, тогда общая формула тела цикла запишется так:
`S=S+n`
Смысл цикличности в том, что к значению суммы многократно прибавляются новые значения слагаемых, обновляя ее. Число повторений цикла равно числу действий сложения, которое нужно выполнить, чтобы достичь результата.
Номер слагаемого (и его значение) `n` меняется в диапазоне от 1 до `N` с шагом, равным 1.

// Код программы на С. int main (void) < int n; // Управляющая переменная. int S; // Сумма ряда. int N; // Число слагаемых, включённое в сумму. scanf ("%d", &N); S = 0; // Инициализация переменной S нулем обязательна. n = 1; // К нулю готовимся прибавить первое слагаемое. do < S += n; //Тело цикла. n ++; // Приращение параметра цикла. > while (n Печать результата вне цикла. printf ("%d", S); return 0; > // End of main 

Поскольку данный цикл арифметический, использование оператора цикла do … while не необходимо, но подчёркивает, что любой тип цикла в С++ можно реализовать с помощью любого оператора цикла.

Пример 3.Организация итерационного цикла на примере алгоритма суммирования. Пусть требуется найти сумму прогрессии
`S=1+1/2+1/3+…+1/n+…` c точностью `»eps»` (например, `»eps»` = 0.001).
Количество слагаемых, которое нужно включить в сумму для достижения заданной точности, неизвестно, но известно условие, определяющее точность вычислений.
Предел значения очередного слагаемого стремится к нулю при `n` , стремящемся к бесконечности.
поэтому можно считать, что именно это значение определяет требуемую точность вычислений, и можно закончить вычисления, когда очередное слагаемое настолько мало, что им можно пренебречь. Все переменные должны иметь вещественный тип, так как участвуют в вычислении вещественного значения.

// Код программы на C. int main (viod) < double S; double eps; // Значение точности вычислений. double n; // Номер слагаемого, определяет также его значение, // изменяется от 1 с шагом 1 scanf ("%lf", &eps); n = 1; S = 0; // Входит в подготовку цикла. do < S += 1. / n; n += 1; >while ( 1. / n >eps); // еps достаточно мало. printf("%8.5lf", S); return 0; > // End of main 

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

Как называется цикл с заданным числом повторений

На этом шаге мы изучим особенности конструкций циклов While и Repeat..Until .

  • цикл While (цикл «Пока»);
  • цикл Repeat..Until (цикл «До тех пор, пока»).

Рис.1. Общий вид циклов с неизвестным числом повторений

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

Цикл While Цикл Repeat..Until
1. Тело цикла выполняется, когда проверяемое условие является истинным . 1. Тело цикла выполняется, когда проверяемое условие является ложным .
2. Если проверяемое условие является изначально ложным, то тело цикла не выполнится ни разу . 2. Если проверяемое условие изначально является истинным, то тело цикла выполнится один раз .

Почему тело цикла Repeat..Until можно не заключать в операторные скобки Begin..End ?

Помимо указанного деления циклов (с неизвестным и известным заранее числом повторений) циклы также делятся на циклы с предусловием (цикл While) и циклы с постусловием (цикл Repeat..Until) .

К какой из указанных групп относится цикл For ?

Приведем блок-схемы циклов с предусловием и постусловием (рис.2), а также решение задачи о выводе на экран первых 10 натуральных чисел.

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

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

Program C1; Var x:Byte; Begin WriteLn('Первые 10 натуральных числа:'); x:=1; While x
Program C2; Var x:Byte; Begin WriteLn('Первые 10 натуральных числа:'); x:=1; Repeat WriteLn(x); x:=x+1; Until x>10; End.

Текст этой программы можно взять здесь. Текст этой программы можно взять здесь.

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

Как видно из приведенных программ начальное присваивание значения переменной x и увеличение ее значения на 1 осуществляются явно в обеих конструкциях цикла , в отличие от цикла For .

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

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

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

1. В каком случае программа, использующая цикл Repeat..Until , "зациклится"?
2. Дополните последние программы с циклами While и Repeat..Until конструкциями WriteLn(x); , расположив их после циклов. Что будет выведено на экран при выполнении каждой программы? Сравните полученный результат с аналогичной конструкцией для цикла For .
Ответы и тексты программ можно посмотреть здесь.

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

2.3.3. Цикл с заданным числом повторений

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

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

Предварительные вычисления, присваивание параметру начального значения

Проверка условия окончания цикла

Расчеты при текущем значении параметра цикла

Изменение параметра цикла по заданному закону и переход к блоку 2

Рис. 16. Развернутая схема цикла с заданным числом повторений

Следует подчеркнуть, что цикл с заданным числом повторений представляет собой соединение линейной структуры (начало цикла), структуры цикл-ПОКА (условие в нем заменено на противоположное) и снова линейной (последовательной) структуры в теле цикла.

Прочитать этот алгоритм можно следующим образом: «Меняя параметр от начального значения до конечного значения, повторять тело цикла».

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

Цикл по параметр от начальное значение

до конечное значение шаг приращение;

операторы тела цикла;

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

Рассмотрим использование циклической структуры этого типа на примере: составить алгоритм печати таблицы значений х, х 2 , sin(х) и 1/х при изменениях х от 1 с шагом 0.1 , пока выполняется условие х ≤ 10.

Составим алгоритм в виде псевдокодов:

2. Список данных:

x, fl, f2, f3 — вещественный;

3. Цикл по х от 1 до 10 шаг 0.1;

5. Вывод(х, fl, f2, f3);

Отметим, что алгоритм состоит из 7 пунктов. Та же самая задача была решена в подразд. 2.3.1, но там в качестве циклической структуры для построения алгоритма использовался цикл-ПОКА, алгоритм состоял из 9 пунктов. Сокращение алгоритма оказалось возможным за счет использования в нашем случае цикла с заданным числом повторений, в структуре которого уже предусмотрены присваивание начального значения параметру и приращение параметра.

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

Рис. 17. Компактная запись цикла с параметром:

а — с использованием символа «Подготовка»; б — с использованием

символа «Граница цикла»; i — параметр цикла; iн— начальное

значение параметра; iк — конечное значение параметра;

Δi — приращение (шаг)

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

Рис. 18. Развернутая схема цикла с заданным числом повторений: а — с возрастающим параметром; б — с убывающим параметром

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *