Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы_алгоритм_и_программир_2курс_ПИ .doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
720.9 Кб
Скачать

2. Описание процедур и функций.

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

Заголовок процедуры имеет формат:

Procedure <Имя> [(формальные параметры)];

<Тело процедуры>;

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

Описание функции также состоит из заголовка и блока(тела функции).

Заголовок функции имеет формат:

Function <Имя> [(формальные параметры)]:тип результата;

<Тело функции>;

Возвращаемое значение может иметь любой тип, кроме файлового.

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

Пример. Дано 2 массива из 8 чисел. Найти сумму максимальных элементов массивов.

Program S;

Type

tArr = array [1..8] of integer;

var

i,s:integer;

m1,m2:tArr;

function Max(Mas:tArr):integer;

var m,j:integer;

begin

m:=mas[1];

for j:=2 to 8 do

if m<Mas[i] then m:=Mas[i];

Max:=m; // или можно написать Result:=m;

end;

begin

writeln(‘Введите 8 чисел 1-го массива через пробел’);

for i:=1 to 8 do read(m1[i]);

writeln(‘Введите 8 чисел 2-го массива через пробел’);

for i:=1 to 8 do read(m2[i]);

s:=Max(m1)+Max(m2);

Writeln(‘Сумма максимальных эл-тов = ’, s:5);

end.

Урок № 21. Формальные и фактические параметры. Вызов подпрограмм.

1.Формальные и фактические параметры.

Delphi поддерживает 2 механизма передачи параметров в подпрограммы:

- по значению;

- по ссылке.

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

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

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

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

2. Рекурсия и опережающее описание.

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

Рассмотрим классический пример – вычисление факториала. Программа получает от компонента Edit1 целое число N и выводит в компонент Label1 значение N!, которое вычисляется с помощью рекурсивной функции Factorial:

Procedure Form2.Button1Click(Sender:TObject);

Function Factorial(N:Word):real;

Begin

If N<=0 then Factorial:=1

Else Factorial:=N*Factorial(N-1)

End;

Var N:integer;

Begin

N:=StrToInt(Edit1.Text);

Label1.Caption:=FloatToStr(Factorial(N));

End;

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