Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ЯВУ.doc
Скачиваний:
3
Добавлен:
11.11.2018
Размер:
1.17 Mб
Скачать

8. Циклические алгоритмы и программы

8.1. Общая схема цикла

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

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

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

Определение 2. Переменная, управляющая повторением цикла, называется параметром цикла.

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

Рис. 2.4. Общая схема цикла

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

Блок "Условие выполнения" в зависимости от значения параметра либо начинает (продолжает) выполнение цикла, либо прекращает его (выход из цикла).

В блоке "Рабочая часть" содержатся многократно повторяемые операторы, которые и выполняют необходимые вычисления.

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

Блоки 1, 2 и 4 являются необходимыми и типовыми для циклических алгоритмов и реализуются специальными операторами цикла. Блок 3 (Рабочая часть) - индивидуален для каждой задачи.

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

1) циклы со счетчиком;

2) итерационные.

В циклах со счетчиком количество повторений заранее известно, а в итерационных – нет. В последних выход из цикла осуществляется при определенном условии (достижении заданной точности, появлении некоторой ситуации).

8.2. Циклы со счетчиком

Для их организации в Паскале используется оператор For (для), который в общем виде записывается так:

For Параметр := НачальноеЗначение to КонечноеЗначение do

Оператор1; (8.1)

или

For Параметр := НачальноеЗначение Downto КонечноеЗначение do

Оператор1; (8.2)

Параметром цикла в этом операторе может служить переменная так называемого перечисляемого типа:

1) целого;

2) символьного.

Оператор вида (8.1) работает в соответствии со схемой, приведенной на рис. 2.5,а. Параметр пробегает значения от начального до конечного через 1. При этом конечное значение должно быть больше или равно начальному. В противном случае оператор не выполняется.

В операторе вида (8.2) использовано слово Downto. При этом значения параметра убывают (изменяются от большего – начального значения – до меньшего с шагом -1). Работу оператора иллюстрирует схема рис. 2.5,б.

Е

Рис. 2.5. Схема работы оператора For

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

В общем случае (если параметр пробегает несколько значений) оператор 1 выполняется несколько раз.

Пример: {к величине S прибавляется 10 чисел от 1 до 10}

For i := 1 To 10 Do

S:= S+i;

Если многократно нужно выполнить несколько операторов, то они помещаются в блок операторов – между служебными словами Begin и End.

Пример. Ввести в ЭВМ 10 трёхзначных чисел и распечатать их цифры в обратном порядке, т.е. начиная с младшей.

Алгоритм (укрупненный).

1. Для номера от 1 до 10 выполнить

Ввести и обработать число

2. Конец.

Детализируем этот алгоритм.

1. Для номера от 1 до 10 выполнить

1.1. Ввести число.

1.2. Ц.1 = число mod 10; {выделяем младшую цифру}

1.3. Число = число div 10; {выделяем две старших цифры}

1.4. Ц.2 = число mod 10; {выделяем среднюю цифру}

1.5. Ц.3 = число div 10; {выделяем старшую цифру}

1.6. Вывести Ц1, Ц2, Ц3.

Программа для этого алгоритма будет иметь вид

Program Dig;

Const

D=10;

Var

Num,C1,C2,C3 : Integrer; {исходное число и цифры}

i : Integrer; {номер числа }

Begin

For I := 1 To D Do

Begin

Readln(Num);

C1:=Num Mod D;

Num:=Num Div D;

C2:=Num Mod D;

C3:=Num Div D;

Writeln(C1:2,C2:2,C3:2)

End;

End.

Пункты 1.2 – 1.6 можно также выполнить в цикле вида

For C2:=1 To 3 Do

Begin

C1:=Num Mod D;

Writeln (C1);

Num:=Num Div D;

End;