Цикл — многократное повторение последовательности действий по некоторому условию. Известны три типа циклических алгоритмических структур: цикл с предусловием, цикл с постусловием и цикл с параметром. В Паскале существуют операторы, реализующие все три типа циклов.
Цикл с предусловием (цикл-пока) — наиболее универсальная циклическая структура. Реализуется оператором While. Формат оператора:
while do
Пока значение логического выражения — true, выполняется тело цикла. Тело цикла может быть простым или составным оператором.
Цикл с постусловием (цикл-до) имеет формат:
repeat
until
Повторяется выполнение тела цикла. Цикл заканчивается, когда логическое выражение принимает значение true. Тело цикла с постусловием выполняется хотя бы один раз. Использования begin и end для ограничения составного тела цикла не требуется.
Цикл с параметром имеет два варианта записи:
1) f or I: = In to Ik do ;
2) for I: = In downto I k do .
Здесь I— параметр цикла — простая переменная порядкового типа;
Циклические алгоритмы
In — выражение того же типа, определяющее начальное значение параметра;
Ik — выражение того же типа, определяющее конечное значение параметра;
может быть простым или составным оператором.
Цикл повторяется, пока значение параметра лежит в интервале между In и Ik. Причем эти выражения вычисляются, только один раз в начале выполнения цикла.
В первом варианте при каждом повторении цикла значение параметра изменяется на следующее значение в данном типе (для целого типа — увеличивается на 1).
Во втором варианте при каждом повторении цикла значение параметра изменяется на предыдущее значение в данном типе (для целого типа — уменьшается на 1).
Пример 1. Вычислить сумму натурального ряда чисел от 1 до N.
Решение. Программа будет состоять из трех частей, в которых повторяется решение этой задачи с использованием операторов цикла while, repeat и for .
Var a, Summa, n: integer;
Writeln (‘ Результат первого суммирования:’, Summa);
Writeln (‘ Результат второго суммирования:’, Summa);
for а:= 1 to N do
Writeln (‘ Результат третьего суммирования:’, Summa);
Очевидно, что все три результата будут одинаковыми.
Пример 2. Функцию можно вычислить как предельное значение последовательности, определяемой рекуррентной формулой:
Начальное значение у0 задается произвольно. За приближенное с точностью ɛ значение корня берется первое уk, для которого выполняется условие: |yk — yk-1|< ɛ
Решение. Для вычисления значений числовой последовательности достаточно двух простых переменных, в которых на каждом шаге будут храниться последнее и предпоследнее значения: уk и уk-1. Обозначим эти переменные Anew и Aold. При программировании этой задачи нельзя использовать цикл с параметром, т.к. неизвестно заранее число повторений цикла. Воспользуемся циклом с предусловием.
Var X, eps, Aold, Anew: Real;
Write (‘ Введите число Epsilon ‘);
Информатика 8 класс (Урок№16 — Запись циклических алгоритмов на языке программирования.)
Write(‘Введите значение X ‘);
Anew:=(Aold +X / Aold)/2;
while abs(Anew — Aold)>= eps do
Anew: = (Aold + X/Aold)/2;
WriteLn(‘Корень квадратный(‘, X,’)=’, Anew);
Пример 3. На интервале [2; n]найти натуральное число c максимальной суммой делителей.
Решение. Идея алгоритма состоит в том, что все делители числа X, меньшие X, лежат в интервале от 1 до X div 2 + 1. Наибольшим делителем является само число X. Следовательно, для каждого из чисел [ 2. n ] нужно отобрать и просуммировать все делители из указанного множества. По ходу вычислений производить отбор наибольшего значения.
Алгоритм будет содержать два вложенных цикла. Исполнение вложенных циклов происходит так: для каждого значения параметра внешнего цикла происходит полная «прокрутка» внутреннего цикла.
Var N, I, Sum_Max, Sum, K, Ch: Integer;
Write (‘ Введите число N: ‘);
for I: =2 to N do
for К: =1 to I div 2 + 1 do
Источник: studopedia.ru
Циклический алгоритм
В этой статье будет рассмотрена работа циклического алгоритма — что это, как он работает, какие виды существуют. Также будут рассмотрены примеры циклических алгоритмов в разных языках программирования.
Прежде чем приступить к основной теме статьи, следует прояснить терминологию вопроса и рассмотреть основные определения: — цикл — вид управляющей конструкции в языках программирования. Он позволяет организовать многократное исполнение определённого набора инструкций (последовательность действий, при котором выполняется тело цикла); — тело цикла — последовательность инструкций, обеспечивающая их многократное исполнение; — итерация — однократное исполнение тела цикла; — условие выхода (условие окончания) — выражение, которое определяет, станет ли в очередной раз выполняться итерация либо произойдёт завершение цикла; — счётчик цикла — переменная, которая сохраняет номер итерации.
Счётчик не обязательно должен содержаться в цикле и счётчик совсем не обязательно должен быть один, то есть условие выхода порой зависит от нескольких изменяемых переменных. Вдобавок к этому, условие выхода иногда зависит от внешних условий (как пример — наступление определённого времени).
Работа любого цикла вне зависимости от его вида включает в себя: — первоначальную инициализацию циклических переменных; — проверку условия выхода из цикла; — выполнение тела; — обновление циклической переменной на каждой итерации.
Многие языки программирования предоставляют разработчику средства, обеспечивающие досрочное завершение цикла (выход из него вне зависимости от истинности условия выхода).
Виды циклических алгоритмов
Безусловные циклы
В некоторых программах и линейных алгоритмах на компьютерах выход из циклов не предусмотрен логикой. Эти циклы называются безусловными (другое название — бесконечные). При написании таких алгоритмов для решения поставленных задач специальных синтаксических средств не используют (они часто и не предусмотрены). На практике вполне достаточно конструкций, которые предназначены для формирования обычных (условных) циклов. Чтобы обеспечить бесконечное повторение, проверка условия или исключается (LOOP…END LOOP, язык программирования Ада), или заменяется константным значением (while true do …, Pascal).
Теперь следует рассмотреть группу циклов с условием.
Циклический алгоритм с предусловием
При наличии предусловия цикл выполняется до тех пор, пока истинно определённое условие, которое указано перед началом. Данное условие проверяется ещё до выполнения тела, в результате чего тело алгоритма может вообще ни разу не выполнится (пример такой ситуации с нулевым количеством итераций — условие изначально ложно). Что касается применения и реализации, то во многих процедурных языках программирования такой алгоритм реализуется с помощью оператора while.
Циклический алгоритм с постусловием
В данном случае проверка условия происходит уже после выполнения тела. Это означает, что тело цикла хотя бы раз, да выполнится. В Pascal такой алгоритм реализуется посредством оператора repeat..until, в языке программирования Си — с помощью do…while.
В зависимости от языка, трактовка условий бывает разной. В том же Pascal речь идёт об условии выхода (работа линейного алгоритма завершится, когда условие истинно; «цикл до»), а в вышеупомянутом Си можно говорить об условии продолжения (цикл завершится, когда условие ложно; «цикл пока»).
Циклический алгоритм с выходом из середины
Это самая общая форма условного линейного алгоритма. Синтаксически оформляется посредством 3-х конструкций: — начало цикла, — конец, — команда выхода.
Конструкция начала обеспечивает маркировку программной точки, где начинается тело, конструкция конца — где тело заканчивается. Внутри циклического алгоритма присутствует команда, обеспечивающая выход — цикл оканчивается, а управление передаётся оператору, следующему за конструкцией конца.
Если сравнивать этот алгоритм с вышеупомянутыми, то он имеет особенность: часть тела, которая расположена после начала и до команды выхода, выполнится всегда, а часть тела, расположенная после команды выхода, при последней итерации не выполнится.
Чтобы организовать выход из середины, в некоторых языках программирования необходимо использовать специальные конструкции. В Ада это LOOP…END LOOP и команда EXIT либо EXIT WHEN:
Внутри этого алгоритма может находиться любое число команд выхода обоих типов — как EXIT WHEN (используется, если проверяется лишь условие выхода), так и просто EXIT (используется, если выход осуществляется в одной из вариаций сложного условного оператора).
В некоторых языках специальные конструкции для выхода из середины отсутствуют. В таких случаях смоделировать выход можно, используя любой условный цикл и оператор досрочного выхода (тот же break в Си) или goto — оператор безусловного перехода.
Циклический алгоритм cо счётчиком
При реализации этого алгоритма на компьютере определённая переменная меняет своё значение с некоторым шагом (она имеет заданное начальное и конечное значения), причём для каждого значения переменной тело цикла выполнится хотя бы раз. Во многих процедурных языках программирования алгоритм со счётчиком реализуется с помощью оператора for. В нём указывается счётчик (его ещё называют переменной цикла), определённое число проходов (граничное значение счётчика) и, в некоторых случаях, шаг изменения счётчика. В качестве примера — циклический алгоритм со счётчиком в языке программирования Оберон-2:
Хотите знать про алгоритмы больше? Записывайтесь на специализированные курсы в OTUS!
Источник: otus.ru
Реализация циклического алгоритма
Аннотация: Продолжаем изучать применение стандартных элементов алгоритма в простейших задачах. Циклический алгоритм – это мощное средство при решении разных примеров. Цель данной лекции – научиться правильно реализовывать циклический алгоритм в разных задачах.
В данной лекции мы рассмотрим множество задач, соответствующих циклическому алгоритму. В каждой задаче будут представлены блок-схемы, коды программ для Microsoft Visual Studio, а также результаты выполнения программ (консоли).
Занятие 1. Программная реализация циклического алгоритма
Пример 1. Вычислить таблицу «» значений функции
при
с шагом 2,5.
Решение. Т.к. переменная х имеет не одно, а несколько значений (а именно 0; 2,5), то следует использовать циклический алгоритм. Решим данную задачу несколькими способами: блок-схема с предусловием, блок-схема с постусловием, программа с оператором while (соответствует блок-схеме с предусловием), программа с оператором for (соответствует блок-схеме с предусловием), программа с оператором do while (соответствует блок-схеме с постусловием).
В данной задаче мы имеем:
– переменная цикла, т.к.
изменяется согласно условиям задачи;
– первоначальное значение переменной цикла
;
– шаг изменения переменной цикла
;
- «
» — условие выполнения итерации цикла.
В теле цикла мы будем считать значение функции и выводить строку со значениями
на экран.
В программе мы будем использовать функцию setw(10) из библиотеки , чтобы таблица значений строилась ровно.
Блок-схема с предусловием представлена на рис. 5.1.
Рис. 5.1. Блок-схема с предусловием для примера 1
Начало вывод заголовка таблицы «x, f» x=0 x≤4 0≤4 да f=2x+1=2*0+1=1 вывод x, f
x f 0 1
x=x+2,5=0+2,5=2,5 наверх x≤4 2,5≤4 да f=2x+1=2*2,5+1=6 вывод x, f
x f 0 1 2,5 6
x=x+2,5=2,5+2,5=5 наверх x≤4 5≤4 нет выход из цикла по х Конец.
Код программы с оператором while :
// proga23while.cpp: определяет точку входа для консольного приложения. // #include «stdafx.h» #include #include using namespace std; int main() < double x, f; coutreturn 0;>
Код программы с оператором for :
// proga23for.cpp: определяет точку входа для консольного приложения. // #include «stdafx.h» #include #include using namespace std; int main() < double x, f; coutreturn 0;>
Блок-схема с постусловием представлена на рис. 5.2.
Рис. 5.2. Блок-схема с постусловием для примера 1
Начало x=0 f=2x+1=2*0+1=1 вывод x, f
x f 0 1
x=x+2,5=0+2,5=2,5 x≤4 2,5≤4 да наверх f=2x+1=2*2,5+1=6 вывод x, f
x f 0 1 2,5 6
x=x+2,5=2,5+2,5=5 x≤4 5≤4 нет выход из цикла по х Конец.
Код программы с оператором do while :
// proga23dowhile.cpp: определяет точку входа для консольного приложения. // #include «stdafx.h» #include #include using namespace std; int main() < double x, f; coutwhile(x
Результат выполнения программ с операторами while, for, do while :
Диапазон значений х: 0; 2,5. при x=0 f=2x+1=2*0+1=1 при x=2,5 f=2x+1=2*2,5+1=6
Пример 2. Вычислить таблицу «» значений функции
при
с шагом 1.
Решение. Функция является кусочной, поэтому для ее расчета используем разветвляющийся алгоритм.
Необходимо добавить реализацию одномерного цикла по переменной .
В данной задаче:
– начальное задание переменной цикла;
– шаг изменения переменной цикла
;
- «
» — условие для прохождения итерации цикла.
В теле цикла следует рассчитать значение функции и вывести очередную строку значений
таблицы на экран.
В программе используется функция setw() для построения ровной таблицы значений.
Приведем две блок-схемы: с предусловием и с постусловием.
К блок-схеме с предусловием относятся две программы – с оператором while и for .
К блок-схеме с постусловием относится одна программа с оператором do while .
Блок-схема с предусловием приведена на рис. 5.3.
Рис. 5.3. Блок-схема с предусловием для примера 2
Код программы с оператором while :
// proga24while.cpp: определяет точку входа для консольного приложения. // #include «stdafx.h» #include #include using namespace std; int main() < double x, Z; coutelse < Z=4*x; >cout return 0;>
Код программы с оператором for :
// proga24for.cpp: определяет точку входа для консольного приложения. // #include «stdafx.h» #include #include using namespace std; int main() < double x, Z; coutelse < Z=4*x; >cout return 0;>
Блок-схема с постусловием представлена на рис. 5.4.
Рис. 5.4. Блок-схема с постусловием для примера 2
Код программы с оператором do while :
// proga24dowhile.cpp: определяет точку входа для консольного приложения. // #include «stdafx.h» #include #include using namespace std; int main() < double x, Z; coutelse < Z=4*x; >coutwhile(x
Результат выполнения программ с операторами while, for, do while :
Диапазон значений х: -1; 0; 1; 2. при x=-1 Z==x+3=-1+3=2; при x=0 Z==x+3=0+3=3; при x=1 Z==4x=4*1=4; при x=2 Z==4x=4*2=8.
Пример 3. Вычислить таблицу «» значений функции
при
с шагом 1,
с шагом 5 .
Решение. В данной задаче изменяются две переменные: и
. Следовательно, нужно реализовать двумерный цикл: внешний цикл по переменной
, внутренний цикл по переменной
. Тело цикла будет содержать вычисление функции
и вывод на экран строчки значений
.
В данной задаче имеем:
– начальное значение переменной внешнего цикла
;
– шаг изменения переменной внешнего цикла
;
- «
» — условие для выполнения итерации внешнего цикла по
;
– начальное значение переменной внутреннего цикла
;
– шаг изменения переменной внутреннего цикла
;
- «
» — условие для выполнения итерации внутреннего цикла по у.
Блок-схема с предусловием приведена на рис. 5.5.
Источник: intuit.ru