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

Вычисление произведения n сомножителей.

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

Исходные данные алгоритма – это значение переменной N, которое необходимо ввести, а выходные данные – это значение P, которое надо вычислить и вывести. В данном примере счетчиком цикла является переменная I, которая принимает значения от 1 до N с шагом 1.

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





Начальное значение произведения принимается равным 1 (а не 0, как в случае суммы), а, затем, на каждом шаге текущее значение произведения умножается на значение i-го сомножителя:

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

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

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

Тип объекта

Примечания

i

I

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

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

N

N

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

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

P

вещ. переменная

текущее значение частное произведение

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

Ш1. Ввод N.

Ш2. P присвоить 1.

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

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

Ш5. Вывод P.

Ш6. Конец.

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

Ш8. i присвоить i + 1.

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

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

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

№ действия

№ блока

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

1

1

Ввод

2

2

P = 1

3

3

i = 1

4

4

1  3, ДА

5

7

P = 11=1

6

8

i = 1+1 = 2

7

9

Переход на 4

8

4

2  3, да

9

7

P = 12 = 2

10

8

i = 2 + 1 = 3

11

9

Переход на 4

12

4

3  3, да

13

7

P = 23 = 6

14

8

i = 3 + 1 = 4

15

9

Переход на 4

16

4

4  3, нет

17

5

Вывод P = 6

18

6

Конец

Рис. 2.7 Блок-схема алгоритма вычисления произведения N сомножителей

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

Перейдем непосредственно к программированию примера на основе использования оператора цикла.

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

Блок 5 формирует начальное значение параметра цикла I, т.е. присваивает ему значение 1. Если обратиться к правилам записи оператора цикла с параметром, то увидим, что это делается не оператором присваивания, а с помощью составной части заголовка цикла (подставить в заголовок цикла вместо имени параметра цикла – I , а вместо его начального значения – значение 1); в заголовок цикла также входит конечное значение параметра цикла, которое в этом случае равно N, при превышении которого параметром цикла выполнение цикла заканчивается. На блок-схеме это реализуется с помощью условного блока 6. Кроме того, в заголовке цикла автоматически организовано продвижение по циклу с помощью задания приращения параметра цикла равного 1 (TO), либо -1 (DOWNTO). В блок-схеме изменения параметра цикла изображено в виде блока 10. Т.о. блокам 5,6,10 блок-схемы соответствует заголовок цикла. В теле цикла остаются лишь одно действие : блок 9. Блок 7 программируется также, как и в случае программирования арифметического цикла на основе использования оператора WHILE.

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

PROGRAM FACTORIAL;

VAR I, N: INTEGER;

P: REAL;

BEGIN

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

READLN(N);

P:=1;

FOR I:=1 TO N DO P:=P*I;

WRITELN('ФАКТОРИАЛ P=',P:10:4);

END.

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