Задача цикла с параметром блок схема
Цикл с параметром был уже рассмотрен нами в разделе “Алгоритм” в теме “Виды алгоритмов”.
Цикл с параметром используется, когда заранее известно сколько раз должен выполниться цикл.
Формат записи цикла:
For <пар.цикла> := <нач.знач> to <кон.знач.> do <оператор>
Здесь for, to, do – зарезервированные слова (для, до, выполнить);
<пар. цикла> – параметр цикла – переменная целочисленного типа (типа integer);
<нач. знач.> – начальное значение – число или переменная целочисленного типа (типа integer);
<кон. знач.> – конечное значение – число или переменная целочисленного типа (типа integer);
<оператор> – произвольный оператор Паскаля.
Пример: For i:=1 to n do <оператор>
здесь i – параметр цикла
1 – начальное значение
n – конечное значение
Если в теле цикла используется несколько операторов, тогда, используются операторные скобки: begin … end.
При выполнении оператора for вначале вычисляется выражение <нач .знач.> и осуществляется присваивание его значения переменной цикла <пар .цикла> := <нач. знач.>. Далее сравниваются <пар .цикла> и <кон.знач.>. До тех пор, пока они не станут равными будет выполняться оператор (операторы). Значение переменной цикла <нач.знач> автоматически увеличивается на единицу в ходе выполнения цикла. Надо сразу заметить, что задать шаг цикла, отличный от 1 в этом операторе нельзя.
Пример:
Возможны такие записи оператора цикла:
1) for i:= 1 to n do s1;
2) for i:= 3 to 10 do s1;
3) for i := a to b do s1;
4) for i := a to b do
begin
s1;
s2;
…
sn
end;
Здесь s1, s2, s3, … sn – операторы цикла.
Пример:
Составить программу вывода на экран чисел от 1 до 10.
Блок-схема: | Программный код: Program Problem; {Вывод чисел} var i : integer; begin for i:=1 to 10 do writeln (i); redaln; end. |
Пример:
Составить программу вычисления факториала числа n, т. е. n!. (0! = 1)
Блок-схема: | Программный код: Program Problem1; {Вычисление факториала числа n!} var n, f, i : integer; begin write(‘Введите натуральное число’); readln(n); f := 1; if n <> 0 then for i := 1 to n do f := f*i; writeln (‘Факториал числа ‘, n, ‘ равен ‘, f); redaln; end. |
Объяснение программы:
Переменная n – для вводимого пользователем числа, факториал которого надо найти; f – переменная, в которой будет “накапливаться” значение факториала числа n; i – переменная цикла.
Устанавливается первоначальное значение переменной f := 1.
Далее начинается цикл. Переменной i присваивается начальное значение 1; оно сравнивается с конечным – n (1 <= n), если условие истинно, тогда выполняется оператор (в этой программе он один): f := f*i, 1*1=1; значение переменной цикла увеличивается на 1, т. е. станет равным: i := i + 1, 1 + 1 = 2 и цикл повторяется.
Когда значение i станет равным n, тогда цикл выполнится последний раз, потому что следующее значение i будет n + 1, что больше конечного значения n, условие i <= n – ложно, цикл не выполняется.
Существует другая форма оператора цикла For:
Формат записи цикла:
For <пар.цикла> := <нач.знач> downto <кон.знач.> do <оператор>
Замена зарезервированного слова to на downto означает, что шаг параметра цикла равен (-1).
Изменение значения параметра идет от большего значения к меньшему, т. е. <нач. знач.> <кон. знач.>.
Пример:
Возможны такие записи оператора цикла:
1) for i:= n downto 1 do s1;
2) for i:= 10 downto 3 do s1;
3) for i := b downto a do s1; (при условии, что b>a)
4) for i := b downto a do
begin
s1;
s2;
…
sn
end; (при условии, что b>a)
Здесь s1, s2, s3, … sn – операторы цикла.
Пример: Программу вычисления факториала числа можно составить, используя этот оператор цикла.
Блок-схема | Программный код: var n, i, f : longint; begin write(“Введите натуральное число “); readln(n); f := 1; if n <> 0 then for i := n downto 1 do f := f*i; writeln(“Факториал числа “, n, ” равен “, f); end. |
Задачи
- Даны 10 чисел, вывести те из них, которые являются полными квадратами. Составить блок-схему и программу.
- Даны 10 чисел, найти их произведение. Составить блок-схему и программу.
- Даны 10 чисел, найти сумму четных. Составить блок-схему и программу.
- Даны 10 чисел, найти количество отрицательных. Составить блок-схему и программу.
- Даны n действительных чисел. Найти максимум и минимум. Составить блок-схему и программу.
- Даны n действительных чисел. Найти среднее арифметическое всех элементов. Составить блок-схему и программу.
- Даны n действительных чисел. Найти среднее арифметическое отрицательных и положительных элементов. Составить блок-схему и программу.
- Даны n натуральных чисел. Найти сумму и произведение элементов, кратных 3 и 5. Составить блок-схему и программу.
- Даны n натуральных чисел. Вывести те числа, значения которых являются степенями двойки (1, 2, 4, 8, 16, …). Составить блок-схему и программу.
- Даны n натуральных чисел. Вывести те числа, значения которых находятся в отрезке [a, b]. Составить блок-схему и программу.
- Даны n натуральных чисел. Вывести на экран те числа, значения которых являются квадратами какого-либо числа.Составить блок-схему и программу.
- Дано натуральное число n. Найти n2. Составить блок-схему и программу.
- Даны натуральные числа a, n. Найти an. Составить блок-схему и программу.
- Дано натуральное число n. Определить его разрядность, цифру старшего разряда числа увеличить на 2
- Дано натуральное число n. Поменять местами первую и последнюю цифры числа
- Дано натуральное число n. Цифры числа, кратные 2 заменить на 0.
- Дано натуральное число n. Цифры числа, кратные 3 заменить на 1.
- Дано натуральное число n. Вычислить произведение (2n-1)*(3n-1)*(4n-1)*…*(10n-1). Составить блок-схему и программу.
- Вычислить сумму 2+4+6+…+100. Составить блок-схему и программу.
- Дано натуральное число n, действительное x. Вычислить произведение x+x/2+x/3+…+x/n. Составить блок-схему и программу.
- Дано натуральное число n. Вычислить P=(1-1/2)(1-1/3)…(1-1/n), где n>2. Составить блок-схему и программу.
- Дано натуральное число n. Вычислить P=(1+x)/n+(2+x)/(n-1)+…+(n+x)/1. Составить блок-схему и программу.
- Даны n натуральных чисел. Вычислить сумму ряда 1+x/1!+x2/2!+x3/3!+ …+xn/n!. Составить блок-схему и программу.
Наверх
Источник
Особенное место в Turbo Pascal занимают циклы. Их начинают изучать сразу же после отработки навыков ввода-вывода информации на экран. Ведь большинство задач сводится к тому, что циклы с параметром и другие конструкции помогают облегчить написание и функционирование определенного блока программы.
Разновидности циклов
Всего различают три разновидности:
- с параметром,
- с предусловием,
- с постусловием.
Циклы с параметром, иначе их называют For … to … do или For … downto …. do, многократно повторяют определенную последовательность действий. В принципе, и другие разновидности используются с этой же целью, только в for-цикле заранее известно количество шагов.
В двух других конструкциях (While и Repeat) количество итераций изначально неизвестно. Поэтому при изучении задания уже необходимо понимать, какой цикл будет использован.
Основные определения по теме
Циклы с параметрами – многократно повторяющиеся итерации. Счетчик – основной показатель, с помощью которого выполняется заданная конструкция. Границы промежутка показывают, в каких пределах будут выполняться те или иные итерации. Кстати, совершенно не обязательно, чтобы начальное значение было равно 1. Пользователь самостоятельно задает обе границы промежутка. Тело цикла – набор команд, для которых уже определено количество повторений.
Понятие «циклы с параметрами» означает, что в данной конструкции проверяется условие, после чего выполняется набор итераций. Счетчик увеличивается (или уменьшается), и все повторяется. Тело цикла будет задействовано до тех пор, пока условие истинно.
For … to … do: алгоритм работы, синтаксис
Как уже было сказано, циклы с параметром используются в задачах, в которых указан «промежуток», в котором предстоит работать. Так, это может быть массив чисел, дней недели, строк стихотворения и т. д.
Выделяют 2 вида конструкции: на увеличение счетчика и на его уменьшение. Первая конструкция будет прописана следующим образом:
for исх.переменная := граница 1 to граница 2 do
begin
тело цикла;
end;
Здесь: исх. переменная объявляется пользователем в начале программы или блока; граница 1 и граница 2 – начальное и конечное значение промежутка; в теле цикла прописывается ряд действий, которые должны выполняться программой. Необходимо помнить, что если тело цикла содержит всего 1 команду, тогда операторные скобки begin…end можно опустить. В таком варианте конструкции счетчик, а именно <исх.переменная>, будет увеличиваться с шагом, равным 1.
for исх.переменная := граница 1 downto граница 2 do
begin
тело цикла;
end;
Здесь же исх. переменная будет уменьшаться с шагом, равным 1.
Схема работы цикла с параметром For … to … do будет выглядеть следующим образом:
- Задается значение верхней границы промежутка, т. е. граница 2.
- Исх.переменной присваивается значение параметра граница 1.
- Проходит проверка условия: исх.переменная ≤ граница 2.
- При получении результата True (Истина) выполняется тело цикла.
- Счетчик увеличивается на шаг, равный 1.
- Выполнение пунктов 3-5 происходит ровно до того момента, пока условие истинно: исх.переменная > граница 2. Как только это произошло, происходит выход из цикла и управление передается команде, следующей за данной конструкцией.
В For … downto … do алгоритм работы схож с вышеуказанным, за исключением некоторых пунктов:
- В 3-м пункте проверяется условие: исх.переменная ≥ граница 2.
- В 5-й строчке алгоритма счетчик уменьшается на 1.
- В 6-м пункте команды 3-5 будут выполняться до тех пор, пока не будет удовлетворено условие: исх.переменная < граница 2.
Все остальное аналогично в обоих алгоритмах работы.
Блок-схема цикла с параметром
Циклы с параметром имеют следующий вид блок-схемы (хотя выше она уже была представлена). Здесь же показана упрощенная организация конструкции.
Основные требования к циклу с параметром
Циклы с параметрами требуют определенного рода условий.
- Счетчик и границы промежутка (т. е. исх.переменная, граница 1 и граница 2) должны принадлежать одному типу данных. Если имеется лишь совместимость между начальным и конечным значениями отрезка и исходной переменной, то программа может повести себя неправильно, поскольку границы будут преобразованы по типу данных исходного параметра.
- Тип данных, которому должны принадлежать значения параметров, должен быть целочисленным. Крайне не рекомендуется использовать вещественный тип.
- Изменять значение параметра исх.переменная в теле цикла принудительно нежелательно. Иначе пользователь с трудом сможет отследить возможные появившиеся ошибки.
- В отличие от других видов циклов, в For … to … do или For … downto … do шаг не может меняться на параметр, отличный от 1.
Turbo Pascal: как выйти из цикла
Нередко встречаются задачи, в которых происходит зацикливание, т. е. проверяемое условие всегда истинно. Процедура Break помогает выйти из циклов с предусловием, постусловием, параметром. Т. е. их работа прекращается досрочно.
Циклы с параметром в паскале (программирование которых предполагает «извечную» истинность условия) можно остановить с помощью Continue. Здесь работа налажена следующим образом: текущая итерация досрочно заканчивает свое выполнение, управление передается следующей команде, но без выхода из цикла.
Процедура Exit необходима для того, чтобы завершить работу того или иного блока в программном коде. Ее вызывают внутри процедуры (функции) и в тот же момент, исполнение этого «куска» немедленно прекращается. Если же Exit находится в основном блоке программы, тогда она завершает свою работу.
Процедура Halt сводит принцип функционирования к следующему: полностью оканчивается работа программы.
Примеры заданий с решением
Пользователю будет полезно после изучения темы «Циклы с параметром в паскале» примеры сначала изучить, а затем тренироваться писать код самостоятельно. Простые задачи помогают будущему программисту узнавать теорию в практике, а затем успешно ее применять. По теме «Циклы с параметром» примеры задач с решением можно найти легкие и сложные. Здесь представлены 3 задачи, в которых разбираются алгоритмы работы и даются пояснения и комментарии к каждому решению.
Задача 1
Дан двумерный массив натуральных чисел в диапазоне [0..199], выбранных случайно. Найти количество всех двузначных чисел, сумма цифр которых кратна 2.
Алгоритм действий:
- Создать двумерный массив.
- Проверить каждое число на соответствие условиям:
a) если 9 < Х < 100, то разделить его нацело на 10 посредством div;
b) выделить вторую цифру числа посредством деления через mod;
c) сложить выделенные цифры;
d) поделить посредством mod заданную сумму на 2;
e) если результат будет равен 0, то счетчик увеличивается на 1.
Задача 2
Дан одномерный массив целочисленных элементов. Найти количество положительных чисел.
Алгоритм действий:
- Создать массив целочисленных элементов, созданных посредством randomize.
- В цикл с параметром вложить условный оператор IF, который будет проверять заданный элемент на соответствие условию: Х>0.
- Если условие выполняется, то счетчик увеличивается на 1.
- После цикла следует вывести на экран получившееся значение счетчика.
Данные, указанные в скобках {}, являются комментариями. В строке 11 можно вывести массив на экран двумя способами: оставить пробел между числами либо отвести под каждый элемент определенное количество ячеек (в данном случае их 5).
В строке 12 переменную counter можно увеличить также двумя способами: либо к предыдущему значению прибавить 1, либо воспользоваться стандартной функцией Inc.
Задача 3
Дана квадратная матрица. Найти количество положительных элементов, находящихся на главной диагонали.
Пояснения:
В массиве чисел главная диагональ тянется из верхнего левого угла в правый нижний. Особенностью ее является тот факт, что индексы строки и столбца совпадают. Поэтому достаточно организовать 1 цикл для перехода по строкам без перебора остальных элементов.
Алгоритм действий:
- Создать квадратную матрицу.
- Присвоить переменной, ответственной за подсчет положительных элементов, значение «0».
- Составить цикл по созданию квадратной матрицы.
- Организовать цикл по проверке условия: если число на главной диагонали >0, тогда счетчик увеличивается на 1.
- После окончания действия цикла на экран вывести значение переменной, хранящей количество положительных элементов.
Противостояние двух языков программирования: С и Turbo Pascal
Как правило, уважающий себя программист знает несколько языков. К примеру, это могут быть С++, Turbo Pascal, Delphi, Java и т. д. Противостояние двух из них было ярко выражено еще в 80-е гг. (С и турбо паскаль). В конце ХХ века такая же борьба наблюдалась между Си++ и Java.
В виртуальном пространстве среди трех десятков языков программирования можно выделить три самые яркие пары, противостояние которых поражало величайшие умы киберпространства: алгол-60 и фортран, Pascal и C, Java и С++. Конечно, эти ощущения субъективные, но в тот или иной период один из пары был лидером. Это объяснялось требованиями промышленности и необходимости в том или ином программном продукте. В 70-х гг. «управлял миром» фортран, в 80-х – Turbo Pascal, в 90-х – С++. Конечно, ни один из них не «умер». Скорее, они преобразовались в усовершенствованные программные продукты.
При изучении языков программирования можно заметить, что в некоторых темах синтаксис схож. Так, циклы с параметром в C аналогичны подобным конструкциям в Pascal, за исключением некоторых моментов.
Интересно, что разработчики Turbo Pascal (Старый Свет) пользовались результатами наработок американских ученых, в то время как в Новом Свете активно применяли итоги исследований европейских специалистов. В Европе разработчики ратуют в большей степени за чистоту и компактность языков программирования, а американские умы склоняются больше к использованию новомодных веяний в написании кода.
Источник
Цель: изучение алгоритмической структуры циклы, создание моделей и алгоритмов для решения практических задач.
Ход урока
I. Актуализация знаний
- Повторить понятие алгоритма, основные конструкции алгоритмического языка.
- Уметь разрабатывать математическую модель, алгоритм и блок схему решения задачи.
- Иметь понятие о языках программирования и их назначении.
- Уметь работать в среде программирования.
- Знать структуры программы.
- Уметь записывать выражения, содержащие числовые и символьные величины.
- Знать структуры операторов и особенности их работы.
- Уметь применять операторы при написании программ с линейными и ветвящимися структурами.
- Уметь на компьютере создавать и запускать программы на отладку.
II. Теоретический материал урока
Большинство практических задач требует многократного повторения одних и тех же действий, т. е. повторного использования одного или нескольких операторов. (Презентация)
Пусть требуется ввести и обработать последовательность чисел. Если чисел всего пять, можно составить линейный алгоритм. Если их тысяча, записать линейный алгоритм можно, но очень утомительно и нерационально. Если количество чисел к моменту разработки алгоритма неизвестно, то линейный алгоритм принципиально невозможен.
Другой пример. Чтобы найти фамилию человека в списке, надо проверить первую фамилию списка, затем вторую, третью и т.д. до тех пор, пока не будет найдена нужная или не будет достигнут конец списка. Преодолеть подобные трудности можно с помощью циклов.
Циклом называется многократно исполняемый участок алгоритма (программы). Соответственно циклический алгоритм – это алгоритм, содержащий циклы.
Различают два типа циклов: с известным числом повторений и с неизвестным числом повторений. При этом в обоих случаях имеется в виду число повторений на стадии разработки алгоритма.
Существует 3 типа циклических структур:
- Цикл с предусловием;
- Цикл с послеусловием;
- Цикл с параметром;
Иначе данные структуры называют циклами типа «Пока», «До», «Для».
Графическая форма записи данных алгоритмических структур:
Цикл с предусловием (иначе цикл пока) имеет вид:
Форматы записи операторов алгоритма | Блок-схема | Форматы записи операторов на Паскале |
Пока (условие) нц серия команд кц | while условие do begin серия команд; end; |
где
условие – выражение логического типа.
Цикл может не выполняться ни разу, если значение логического выражения сразу же оказывается ложь.
Серия команд, находящихся между begin и end, выполняются до тех пор, пока условие истинно.
Для того чтобы цикл завершился, необходимо, чтобы последовательность инструкций между BEGIN и END изменяла значение переменных, входящих в условие.
Цикл с постусловием (иначе цикл до) имеет вид:
Форматы записи операторов алгоритма | Блок-схема | Форматы записи операторов на Паскале |
В алгоритмическом языке нет команды которая могла бы описать данную структуру, но ее можно выразить с помощью других команд (Например, ветвления). | repeat серия команд until условие |
где
условие – выражение логического типа.
Обратите внимание:
Последовательность инструкций между repeat и until всегда будет выполнено хотя бы один раз;
Для того чтобы цикл завершился, необходимо, чтобы последовательность операторов между repeat и until изменяла значения переменных, входящих в выражение условие.
Инструкция repeat, как и инструкция while, используется в программе, если надо провести некоторые повторяющиеся вычисления (цикл), однако число повторов заранее не известно и определяется самим ходом вычисления.
Цикл с параметром (иначе цикл для) имеет вид:
Форматы записи операторов алгоритма | Блок-схема | Форматы записи операторов на Паскале |
Для i от а до b шаг h делай Нц Серия команд кц | h = +1 for i:= a to b do begin серия команд end; h = -1 for i:= b downto a do begin Cерия команд; end; |
где
i – параметр цикла;
a – начальное значение цикла;
b – конечное значение цикла;
h – шаг изменения параметра.
Структура данного цикла иначе называют циклом i раз.
Эта команда выполняется таким образом: параметру i присваивается начальное значение а, сравнивается с конечным значением b и, если оно меньше или равно конечному значению b, выполняется серия команд. Параметру присваивается значение предыдущего, увеличенного на величину h – шага изменения параметра и вновь сравнивается с конечным значением b.
На языке программирования Паскаль шаг изменения параметра может быть равным одному или минус одному.
Если между begin и end находится только один оператор, то операторные скобки можно не писать. Это правило работает для цикла типа «Пока» и «Для».
Рассмотрим пример решения задач с использованием данных структур
Пример.
Вычислить произведение чисел от 1 до 5 используя различные варианты цикла
Математическая модель:
Р= 1· 2· 3· 4· 5=120
Составим алгоритм в виде блок-схемы.
Для проверки правильности алгоритма заполним трассировочную таблицу.
Шаг | Операция | Р | i | Проверка условия |
1 | P:=1 | 1 | ||
2 | i:=1; | 1 | 1 | |
3 | i<=5 P:=P*I i:=i+1 | 1 | 1 | 1<=5, да (истина) |
4 | i<=5 P:=P*I i:=i+1 | 2 | 2 | 2<=5, да (истина) |
5 | i<=5 P:=P*I i:=i+1 | 6 | 3 | 3<=5, да (истина) |
6 | i<=5 P:=P*I i:=i+1 | 24 | 4 | 4<=5, да (истина) |
7 | i<=5 P:=P*I i:=i+1 | 120 | 5 | 5<=5, да (истина) |
8 | i<=5 P:=P*I i:=i+1 | 6<=5, нет (ложь) |
Проверка условия происходит в несколько шагов: проверка условия и выполнение команд на одной из ветвей. Поэтому в трассировочной таблице записываются не команды алгоритма, а отдельные операции, выполняемые компьютером на каждом шаге.
Шаг первый: Р присваивается значение один.
Шаг второй: i присваивается значение один.
Шаг третий: при i равном единице проверяем условие один меньше или равен пяти, да, условие истинно, значит Р присваивается значение один умноженное на один, будет два. Для i: один плюс один, будет два.
Шаг четвертый: при i равном двум проверяем условие два меньше или равен пяти, да, условие истинно, значит Р присваивается значение 2 умноженное на один, будет 2. Для i: два плюс один, будет три.
Шаг пятый: при i равном трем проверяем условие три меньше или равен пяти, да, условие истинно, значит Р присваивается значение два умноженное на три, будет шесть. Для i: три плюс один, будет четыре.
Шаг шестой: при i равном четырем проверяем условие четыре меньше или равен пяти, да, условие истинно, значит Р присваивается значение шесть умноженное на четыре, будет двадцать четыре. Для i: четыре плюс один, будет пять.
Шаг седьмой: при i равном пяти проверяем условие пять меньше или равен пяти, да ,условие истинно, значит Р присваивается значение двадцать четыре умноженное на пять, будет сто двадцать. Для i: пять плюс один, будет шесть.
Шаг восьмой: при i равном шести проверяем условие шесть меньше или равен пяти, нет, условие ложно, тогда мы выходим из цикла, а в результате получаем последнее значение равное сто двадцати.
Program Pr1;
Var i: integer;
Begin
P:=1;
i:=1;
While i<=5 do
begin
P:=P*i;
i:=i+1;
end;
Write (‘P=’, P);
end.
Для цикла с постусловием построим блок-схему и трассировочную таблицу. (слайд16)
В результате получаем последнее значение равное сто двадцати на седьмом шаге
И для Цикла с параметром построим блок-схему и трассировочную таблицу. (слайд17)
В результате получаем последнее значение равное сто двадцати на шестом шаге
Задача:
Вывести на экран числа от 1 до 5 в:
- прямом порядке;
- обратном порядке.
Математическая модель:
- 1 2 3 4 5;
- 5 4 3 2 1.
Блок-схема и программа решения задачи представлена для чисел в прямом порядке и обратном порядке.
(слайд 21)
Запишем рассмотренные алгоритмы на языке программирования Паскаль.
(слайд 22)
III. Подведение итогов урока
И так мы рассмотрели следующие вопросы:
- Алгоритмическая структура цикл;
- Виды алгоритмических структур:
- Цикл с предусловием;
- Цикл с послеусловием;
- Цикл с параметром;
- Рассмотрели способы записи данных структур;
- Разобрали примеры решения задач с помощью этих структур.
Источник