Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_Часть_1.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
974.85 Кб
Скачать

Var p: real;

begin

if (a+b > c) and (a+c > b) and (b+c > a)

then begin

p := (a + b + c) / 2;

p := p * (p - a) * (p - b)*(p - c);

if p > 0

then TRIANGLE := sqrt (p)

else TRIANGLE := 0

end;

Тогда два оператора в разделе действий программы примут вид:

Q := TRIANGLE( 2, 3, 4 );

if Q <> 0 then p:=5.7 + 2*Q;

9.3. Параметры подпрограмм

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

– подстановка значения (параметр-значение);

– подстановка переменной (параметр-переменная).

Параметры-значения передаются основной программой в подпрограмму через стек в виде их копий, поэтому фактический параметр подпрограммой измениться не может.

Параметры, которые называют параметрами-переменными, указываются заданием зарезервированного слова Var перед их идентификаторами в списке формальных параметров. При передаче параметров-переменных в подпрограмму фактически через стек передаются их адреса в порядке, объявленном в заголовке подпрограммы. Следовательно, подпрограмма имеет доступ к этим параметрам и может их изменять.

Входные параметры подпрограммы могут быть как параметрами-значениями, так и параметрами-переменными. Выходные (модифицируемые) – только параметрами-переменными.

Фактическими параметрами, соответствующими параметрам-значениям, могут быть имена переменных, константы, выражения. Фактическими параметрами, соответствующими параметрам-переменным, – только имена переменных.

П р и м е р. Отпечатать таблицу значений суммы:

для m = 1, 2, …, 1024.

Опишем процедуру вычисления суммы S.

Program Summa;

const n=1024;

Var X: real; m: integer;

procedure Sum(n: integer; var S:real);

Var I : integer;

begin

s:=0;

for i := 1 to n

do S := S+1/i

end;

begin

for m := 1 to n

do begin

sum(m, x); write(m, x)

end

end.

Здесь в списке параметров процедуры Sum n – параметр значение, S – параметр-переменная.

10. Рекурсии

10.1. Рекурсивные алгоритмы и определения

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

Например, вычисление функции F(N) может потребовать вычисления F(N-1) и еще каких-то операций. Иными словами, частью алгоритма вычисления функции будет вычисление этой же функции.

Алгоритм, который является своей собственной частью, называется рекурсивным. Часто в основе такого алгоритма лежит рекурсивное определение какого-то понятия.

Например, о факториале числа N можно сказать, что

(Определение 1) N ! = 1 *2 * … (N - 1 ) * N или 1, если N = 0;

(Определение 2) N ! =(N - 1) ! * N, или 1, если N = 0.

Второе определение рекурсивное.

Любое рекурсивное определение состоит из двух частей. Одна часть определяет понятие через него же, другая часть – через иные понятия.

Записать рекурсивный алгоритм на Паскале можно с помощью рекурсивной процедуры (функции).

10.2. Рекурсивные процедуры и функции

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

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

Рассмотрим программу с рекурсивным вызовом на примере факториала

(n! = 1* 2 * 3 * … n ).

Proqram rec_1;