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

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

Задача. Найти сумму элементов в нескольких массивах.

Program Count_Sum;

Const

Nmax = 200;

Type

Mas = Array[1..Nmax] Of Real;

Var

A,B : Mas;

Suma,Sumb : Real;

i,n : Integer;

Function SumMas (k:Integer;X:Mas):Real;

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

Var

I : Integer;

S : Real; { Вспомогательная переменная - сумма}

Begin

S := 0;

For i := 1 to k Do

S:=S + X[i];

SumMas:=S;

End; { SumMas }

Begin

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

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

ReadLn(n);

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

For i := 1 to n Do

ReadLn (A[i]);

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

For i := 1 to n Do

ReadLn (B[i]);

Suma := SumMas(n,A);

Sumb := SumMas(n,B);

Writeln(’Сумма чисел 1-го массива =’,Suma:8:2);

Writeln(’Сумма чисел 2-го массива =’,Sumb:8:2);

WriteLn(’Работа окончена. Нажмите клавишу ENTER’);

Readln;

End.

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

Если тексты процедур и функций размещены непосредственно в программе (как это было описано в предыдущем разделе), то их можно назвать внутренними. Когда возникает необходимость применить некоторые из этих процедур и/или функций в другой программе, придется переписать их туда. Хотя сделать это совсем не сложно, но при большом их количестве увеличение текста программы может оказаться чрезмерным. В Турбо Паскале используется более изящное решение этой проблемы – процедуры и функции можно помещать в модули, которые потом допустимо присоединять к любым программам (при этом совсем необязательно иметь в наличии исходный текст).

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

В Турбо Паскале существует 2 вида модулей:

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

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

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

Структура модуля (стандартного или написанного пользователем) приведена на рис. 2.11.

Модуль должен начинаться с заголовка, включающего служебное слово Unit и имя_модуля.

Пример.

Unit MyModul; или

Unit Sort;

Имя файла, содержащего модуль, и имя модуля должны быть одинаковыми!

Применительно к приведенному примеру это означает, что модуль MyModul должен храниться в файле MyModul.pas, а модуль Sort – в файле Sort.pas.

Интерфейсная секция — общедоступная часть, "видимая" из любой программы (модуля). В ней описываются так называемые глобальные данные (константы, типы, переменные), используемые в модуле и доступные программе (или другим модулям, к которым присоединен данный). Здесь же содержатся заголовки (но не тексты!) процедур и функций, помещенных в модуль. Любая программа имеет доступ к этим объектам, как если бы они были описаны в ней.

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

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

Итак, последняя часть модуля всегда имеет следующий вид:

Begin

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

End.

Модуль компилируется отдельно. Получается файл с расширением tpu, например, MyModul.tpu или Sort.tpu. Откомпилированный модуль компилятором должен быть помещен на диск. Если это не делается по умолчанию, то в меню Compile должно быть устанавлено Destination - disk (а не Memory).

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

Пример. Program Test;

Uses

MyModul, Sort, Dos;

Const

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

Unit Sort;

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

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

Nmax=200;

Type

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

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

Function SumMas (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 SumMas; { можно только имя }

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

Var

I : Integer;

S : Real; { Вспомогательная переменная - сумма}

Begin

S := 0;

For i := 1 to k Do

S:=S + X[i];

SumMas:=S;

End; { SumMas }

Begin

{ секция инициализации не содержит операторов }

End.

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

Program Main;

Uses

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

Var

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

n,i,j:integer;

z:real;

Begin

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

ReadLn (n); { размер массива }

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

For i := 1 to n do

ReadLn (x[i]);

SortY (x,n);

Z := SumMas (x,n);

Writeln(’Сумма элементов массива = ’,Z:8:2);

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

For i := 1 to n do

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

Writeln;

Writeln ('Конец работы. Нажмите клавишу ENTER');

ReadLn;

End.