Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика программирование, учебник.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
22.08 Mб
Скачать

3 Циклические вычислительные процессы

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

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

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

  • ЦИКЛ – это многократно повторяемая часть алгоритма.

  • ЦИКЛИЧЕСКИЙ АЛГОРИТМ – это алгоритм, содержащий один или несколько циклов.

  • ПАРАМЕТР ЦИКЛА – это переменная, которая при каждом новом вхождении в цикл принимает новое значение.

  • ТЕЛО ЦИКЛА – многократно повторяемая последовательность действий, которая отражает правила выполнения поставленной задачи.

  • УПРАВЛЯЮЩЕЕ УСЛОВИЕ – условие, управляющее реализациями цикла; оно может быть реализовано либо в виде условия выхода, либо в виде условия повторения.

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

Существует классификация циклов в зависимости от порядка следования тела цикла и управляющего условия.

Цикл, в котором условие выхода проверяется после выполнения тела цикла, называется циклом с постусловиями или ЦИКЛОМ-ПОСЛЕ. В таких циклах тело цикла выполняется по крайней мере один раз. Циклы с постусловиями на языке PASCAL программируются с помощью оператора REPEAT…UNTIL…;

Цикл, в котором условие повторения проверяется до выполнения тела цикла, называется циклом с предусловиями или ЦИКЛОМ-ДО. В таких циклах может случиться так, что при первой проверке условие повторения не выполняется, а значит тело цикла не выполняется ни разу. Циклы с предусловиями на языке PASCAL программируются с помощью операторов WHILE…DO…; или FOR …TO …DO…;

Рис. 2.4 Структуры циклов с постусловием и предусловием

Существует еще одна классификация циклов. Циклические алгоритмы по способу организации выхода из цикла можно разделить на арифметические и итерационные.

АРИФМЕТИЧЕСКИЙ ЦИКЛ – это цикл, где число повторений известно (или легко может быть вычислено) до первого вхождения в тело цикла.

ИТЕРАЦИОННЫЙ ЦИКЛ – это цикл, в котором число повторений заранее не известно, выход из него осуществляется по выполнению некоторого условия. Обычно таким условием является достижение заданной точности при последовательном приближении к искомому значению.

3.1 Арифметический цикл

Арифметическим называется циклический процесс, в котором количество повторений известно в момент входа в цикл. В языке Паскаль для реализации этого вида циклов рекомендуется использовать оператор FOR … DO.., получивший название оператор цикла с параметром.

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

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

Чаще всего алгоритм арифметического цикла строится на основе цикла с предусловиями ( ЦИКЛ – ДО ), шаблон такого цикла для положительного значения приращения счетчика цикла приведен на рис. 2.5. В блоке задания начальных условий указываются начальное и конечное значения счетчика цикла и его приращение, при этом счетчик цикла получает свое начальное значение, затем проверяется условие повторения цикла ( счетчик цикла не больше конечного значения счетчика ), в зависимости от выполнения которого тело цикла выполняется еще раз ( по ветке ДА ) или происходит выход из цикла ( по ветке НЕТ ), затем следует тело цикла. После выполнения тела цикла счетчик цикла увеличивает свое значение на величину приращения, а затем осуществляется переход на проверку условия повторения.

Рис. 2.5 Шаблон арифметического цикла

Арифметические циклы используются, как правило, для решения следующих задач:

  • вычисление суммы N слагаемых;

  • вычисление произведения N сомножителей;

  • табулирование функции на конечном интервале в N точках.

Рассмотрим подробнее примеры решения таких задач.

Вычисление суммы слагаемых.

Пусть необходимо вычислить

Исходными данными алгоритма являются значение переменной N, которое необходимо ввести, а выходными данными алгоритма является значение переменной S, которое надо вычислить и вывести.

В данном примере счетчиком цикла является переменная i, которая принимает значения от 1 до N с шагом 1.

Представим процесс вычисления суммы S как последовательное вычисление частичных сумм:

;

;

;





Исходя из этого, начальное значение суммы S принимается равным 0, затем, на каждом шаге текущее значение S увеличивается на величину i-го слагаемого:

Заполним таблицу имен объектов:

Имя объекта в задаче

Имя объекта в блок-схеме

Тип объекта

Примечание

I

целая переменная

счетчик цикла

N

целая переменная

конечное значение счетчика цикла

S

Вещественная переменная

текущее значение частичной суммы

PI

Вещественная переменная

A

Вещественная переменная

текущее слагаемое

Тогда схема алгоритма по шагам запишется следующим образом:

Ш1. Ввод N.

Ш2. S присвоить 0.

Ш3. присвоить 1.

Ш4. Если , то перейти на Ш7.

Ш5. Вывод .

Ш6. Конец.

Ш7. присвоить .

Ш8. S присвоить .

Ш9. присвоить .

Ш10. Перейти на Ш4.

Блок-схема этого алгоритма приведена на рис.2.6.

Рис 2.6 Блок-схема алгоритма вычисления суммы N слагаемых

Поясним работу алгоритма таблицей трассировки для .

№ действия

№ блока

Результат действия

1

1

Ввод

2

2

3

3

4

4

1  3, ДА

5

7

6

8

S = 0 + 0,8674 = 0,8674

7

9

i= 1 + 1 = 2

8

10

переход на 4

9

4

2  3, да

10

7

11

8

12

9

i = 2 + 1 = 3

13

10

переход на 4

14

4

3  3, да

15

7

16

8

S = 1,3011 + 0 = 1,3011

17

9

i = 3 + 1 = 4

18

10

переход на 4

19

4

4  3, нет

20

5

Вывод S = 1,3011

21

6

Конец

При составлении программы по блок-схеме блоку "Начало" поставим в соответствие заголовок программы PROGRAM, блоку описания используемых в программе переменных соответствует раздел описания переменных VAR декларативной части блока. В этом разделе содержатся два описания : переменные I и N объявляются целыми, а переменные S и A вещественными.

Далее следует исполнительная часть блока, представляющая собой составной оператор. Она начинается с открывающей операторной скобки BEGIN. За ней следуют операторы программы. Блоку ввода ставим в соответствие вызов процедуры вывода информации на экран дисплея WRITELN для вывода приглашения ко вводу и вызов процедуры ввода информации с клавиатуры READLN для ввода исходных данных алгоритма – значения N.

Далее программируем операторы присваивания для задания сумме S начального значения 0, и параметру цикла I начального значения 1, ставя каждому блоку в соответствие один оператор, затем переходим к программированию цикла с предусловиями с помощью оператора WHILE. В теле цикла содержится более одного оператора, поэтому необходимо использование операторных скобок BEGIN END. В теле цикла последовательно вычисляются значение А, S и значение счетчика цикла увеличивается на величину приращения.

По выходу из цикла вывод информации программируем с помощью вызова процедуры вывода информации на экран дисплея WRITELN, блоку "конец" ставим в соответствие закрывающую операторную скобку END.

В результате получается следующая программа:

PROGRAM SUMMA1;

VAR I, N: INTEGER;

A,S:REAL;

BEGIN

WRITELN('ВВЕДИ ЗНАЧЕНИЕ N');

READLN(N);

S:=0.;

I:=1;

WHILE I<=N DO

BEGIN

A:=SIN(PI*I/N)/I;

S:=S+A;

I:=I+1;

END;

WRITELN('СУММА S=',S:10:4);

END.