Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_МЕТ№2.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
247.81 Кб
Скачать

2.1. Пример программы с функцией

Задача.

Найти минимальные значения в нескольких массивах.

PROGRAM PSKMIN;

CONST

M=200;

TYPE

MAS=ARRAY[1...M] OF REAL;

VAR

A,B:MAS;

MA,MB:REAL;

I,N:INTEGER;

FUNCTION MINX (K:INTEGER;X:MAS):REAL;

{ Нахождение минимума в массиве вещественных чисел }

VAR I:INTEGER;

BEGIN

MINX:=X[1];

FOR I:=2 TO K DO

IF MINX>X[I]THEN

MINX:=X[I];

END;

BEGIN { основная программа }

Writeln('Введите размер массива');

READ (N);

Writeln('Введите первый массив');

FOR i:=1 TO N DO

READ (A[i]);

Writeln('Введите второй массив');

FOR i:=1 TO N DO

READ (B[i]);

MA: = MINX (N,A);

MB: = MINX (N,B);

Writeln('Минимальное число из первого массива - ',MA:8:2);

Writeln('Минимальное число из второго массива - ',MA:8:2);

END.

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

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

Пример.

Вычислить гиперболический синус по формуле:

Функция будет иметь вид:

Function Sinh(X:REAL) :REAL;

Begin

SINH:=(EXP(X)-EXP(-X) )/2;

End;

К функции можно обращаться тремя способами:

1) из основной программы;

2) из другой функции;

3) из самой себя.

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

n! = n*(n -1)! – при n>0 и

n! = 1 – при n=0.

Для рекурсивных функций необходимо вырабатывать условие завершения (иначе она будет вычисляться до бесконечности). Это условие для n! записано во второй строчке ( при n=0 ) – т.к.рекурсия производится на основе второго сомножителя – (n-1)!=(n-1)*(n-2)! и т.д. – до нуля).

Запишем рекурсивную функцию вычисления факториала.

FUNCTION FACT (N:INTEGER):INTEGER;

BEGIN

IF N=0 THEN FACT:=1

ELSE

FACT:=N*FACT(N-1);

END;

3. Внешние процедуры и функции

Наиболее просто они оформляются с помощью модулей. В Турбо-паскале существует 2 типа модулей:

1) модули пользователей;

2)стандартные модули.

3.1. Модули пользователей

Общий вид таких модулей приведен на рис.4.

Рис. 4. Структура модуля Турбо-паскаля

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

Секция реализации — недоступна другим модулям и содержит тела процедур и функций, описанных в интерфейсной секции.

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

Begin

End.

Пример оформления модуля:

Unit sort;

interface { интерфейсная секция }

const { Глобальная константа и тип }

nn=200;

type

mas = array[1..nn] of real;

Procedure sorty(Var Y: mas; m:integer);

Function Ymin (Y:mas; m:integer): real;

implementation { секция реализации }

Procedure sorty; { можно неполный заголовок }

Var i,k:integer;

a:real;

Begin

for k:=1 to m-1 do

for i:=1 to m-k do

if Y[i]>Y[i+1]then

Begin

a:=Y[i];

Y[i]:=Y[i+1];

Y[i+1]:=a

end;

end; { sorty }

Function Ymin;

Var

i:integer;

Begin

Ymin:=Y[1];

for i:=2 to m do

if Ymin > Y[i] then

Ymin:=Y[i];

end; { Ymin }

Begin

{ секция иницализации }

end.

Модуль компилируется отдельно. В меню компилятора устанавливают опцию disk (а не Memory). Получается файл с расширением tpu, например, Sort.tpu. К программе модуль присоединяют с помощью предложения Uses. Имя файла, содержащего модуль, и имя модуля должны быть одинаковыми! Основная программа, которая использует модуль, будет иметь вид, аналогичный приведенному ниже.

Program main;

Uses

crt,dos, {стандартные модули}

sort; {пользовательский модуль}

Var

x:mas; { х - глобальный тип, описанный в модуле sort}

n,i,j:integer;

z:real;

Begin

Writeln(`Введите размер массива`);

read (n); — размер массива

Writeln(`Введите массив`);

for i:=1 to n do

read (x[i]);

sort (x,n);

z:=Ymin (x,n);

Writeln(`Min элемент`,Z:8:2);

Writeln(`Упорядоченный массив`);

For i:=1 to n do

Write (x[i]:8:2);

Writeln ('Конец работы');

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]