СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных данных) с указанием их типов,
ТИП – тип результата: значение, которое должно приобретать имя функции.
Допускается описание функции без параметров:
FUNCTION <ИМЯ>: <ТИП>;
В содержательной части программы-функции имени должно быть присвоено некоторое значение (значение ответа), т.е. имя хотя бы один раз должно присутствовать в левой части некоторого оператора присваивания.
Подпрограмма в виде функции оформляется тогда, когда в качестве результата работы алгоритма формируется одно значение (скаляр, но не массив), например, максимум в массиве, const True или False, когда определяется, простое ли число. Хотя в таком виде может быть использована и процедура.
Формат функции:
Function имя_функции[(список[;формальных;параметров…] )]: тип_возвращаемого_значения;
{ раздел описаний } Begin
….
Имя_функции : = Результат;
End:
1) возвращаемое значение – скаляр;
2) тип возвращаемого значения должен быть базовым;
3) Обязательной является хотя бы однократная запись в теле функции оператора вида:
Имя_функции : = Результат;
Этот оператор обеспечивает возврат вычисленного значения в вызывающую программу. В качестве результата может быть const, имя переменной или выражение соответствующего типа.
Обращение к функции в вызывающей программе происходит путём записи имени функции в правой части оператора присваивания, возможно в составе выражения.
Q : = ABS(P+x) / Z;
R : = ABS(x);
Когда в составе выражения встречается имя функции, то происходит приостановка вызывающей программы, управление передаётся функции, где согласно алгоритму производятся вычисления. После завершения функции, управление возвращается в вызывающую программу, в выражение вместо имени функции подставляется вычисленное значение и вычисление выражения продолжается далее.
FUNCTION MAX_in_VECT(n:integer; A : VCT):INTEGER;
VAR
I,max: INTEGER;
BEGIN
MAX:=A[1];
Imax:=1;
FOR I:=1 TO N DO
IF A[I]>max
THEN BEGIN
max:=A[I];
END;
MAX_in_VECT := max;
END;
Обращение к функции в программе
. . .
Y := MAX_in_VECT( n1, A1 );
Модули.
Процедуры и функции могут быть сгруппированы в отдельный модуль. Модуль (unit)- это программная единица, текст которой компилируется автономно (независимо от главной программы). Если модуль откомпилирован , то результат имеет расширение TPU.
Структура модуля отличается от структуры обычной программы на языке Турбо Паскаль.
Модули имеют четыре основные части:
1) заголовок, который следует за зарезервированным словом UNIT;
2) описательную (интерфейсную) часть, которая начинается за зарезервированным словом INTERFACE (в ней помещаются объявления переменных, процедур, функций, констант и типов данных, которые должны быть доступны для других программных модулей, использующих данный модуль);
3) исполнительную (внутреннюю) часть, которая начинается словом IMPLEMENTATION (в нее входит текст подпрограмм и локальные объекты, доступные только внутри данного модуля) и
4) необязательную часть (секцию инициализации), расположенную после исполнительной части между словами BEGINи END (при этом, если инициализация модуля не нужна, то в секции помещается лишь слово END).
Начинается модуль заголовком, состоящим из зарезервированного слова UNIT и имени модуля. Имя модуля обязательно должно совпадать с именем файла (имеющим расширение PAS), в котором он находится.
Модуль имеет следующую структуру:
UNITимя модуля ; { должно совпадать с именем файла модуля }
INTERFACE
USESсписок имен подключаемых модулей;
TYPEописание типов, определенных в данном модуле
и доступных для других модулей;
CONSTописание констант, определенных в данном
модуле и доступных для других модулей ;
VARописание переменных, определенных в данном
модуле и доступных для других модулей ;
полные заголовки процедур,
определенных в данном модуле и доступных для других модулей ;
полные заголовки функций,
определенных в данном модуле и доступных для других модулей ;
IMPLEMENTATION
USESсписок имен подключаемых модулей;
TYPEописание типов, определенных в данном модуле
и недоступных для других модулей;
CONSTописание констант, определенных в данном
модуле и недоступных для других модулей ;
VARописание переменных, определенных в данном
модуле и недоступных для других модулей ;
{ПОЛНЫЕ ТЕКСТЫ процедур и функций, описанных в INTERFACE }
реализация процедур, определенных в
данном модуле и доступных для других модулей ;
реализация функций, определенных в данном
модуле и доступных для других модулей ;
{ПОЛНЫЕ ТЕКСТЫ процедур и функций,
ИСПОЛЬЗУЮЩИХСЯ ТОЛЬКО ВНУТРИ МОДУЛЯ }
ПОЛНЫЕ ТЕКСТЫ процедур,
определенных в данном модуле и недоступных для других модулей ;
ПОЛНЫЕ ТЕКСТЫ функций,
определенных в данном модуле и недоступных для других модулей ;
{ Необязательная часть модуля }
BEGINэто слово необходимо, если далее имеются операторы
секции инициализации
END. { есть всегда }
Интерфейсная и реализационная части могут быть пустыми, но присутствовать должны обязательно. При подключении модуля вначале выполняются операторы секции инициализации (если они имеются), а затем операторы основного блока главной программы, в которую включен данный модуль.
Пример. Требуется написать главную программу, в которой вводится размер вектора и его элементы и вызывается процедура сортировки одномерного массива целых чисел в порядке возрастания. Длина массива не превышает 100. Процедуру разместить в модуле.
pROGRAM MAIN;
Uses Crt,Modsort;
Var
A:mas;
N, I :INTEGER;
Begin
clrscr;
Writeln('Ввод ЧИСЛА ЭЛЕМЕНТОВ МАССИВА:');
Readln(N);
For I:=1 to N do
BEGIN
Writeln('Ввод ЭЛЕМЕНТА #', I );
Readln(A[I]);
end;
SORT(n,A);
Writeln('РАССОРТИРОВАННЫЙ МАССИВ :');
For I:=1 to N do
Writeln(A[I]);
ReadLN;
End.
Первым предложением программы является Uses, в котором подключается стандартный модуль Crt и модуль Modsort, где находится процедура сортировки.
Кроме того, тип, с которым описывается массив, отсутствует в главной программе, т.к. он присутствует в модуле.
Unit Modsort;
Interface
Type
mas=array[1..100] of integer;
Procedure SORT(N: INTEGER ; Var A:mas);
Implementation
Procedure SORT(N: INTEGER ; Var A:mas);
Var
I,J, X:integer;
Begin
For J:=1 to N-1 do
For I:=1 to N-J do
If A[I]>A[I+1]
Then Begin
X:=A[I];
A[I]:=A[I+1];
A[I+1]:=X
End;
End;
End. { МОДУЛЬ }
В интерфейсной части модуля описан тип mas и заголовок процедуры сортировки. При подключении этого модуля с помощью предложения Uses в любой программе становятся доступными рассматриваемые тип и процедура. Это продемонстрировано в главной программе.
К лабораторной работе (дополнение)
Преобразование программы в процедуру и функцию
Задача оформлена в виде программы.
PROGRAM MAX; {max}
VAR
A: ARRAY [1..15] OF INTEGER;
N,H,I,Imax,MAX : INTEGER;
BEGIN
WRITELN ('Vvedite chislo el-tov <=15');
READLN (N);
FOR I:=1 TO N DO
BEGIN
WRITELN ('vvedite el-t ',I);
READLN (A[I]);
END;
MAX:=A[1];
Imax:=1;
FOR I:=1 TO N DO
IF A[I]>max
THEN BEGIN
max:=A[I];
Imax:=I;
END;
WRITELN ('max znachenie=',max, 'его номер ', imax );
READLN;
END.
ФРАГМЕНТ ПРОГРАММЫ С МЕНЮ
Программа разделяется на фрагменты для использования в ветвях меню
. . . .
VAR
A: ARRAY [1..15] OF INTEGER;
N,H,I,Imax,MAX : INTEGER;
. . . . .
BEGIN
. . . .
Case choice of
Begin
{ Реализация ввода массива }
{ операторы }
WRITELN ('Vvedite chislo el-tov <=15');
READLN (N);
FOR I:=1 TO N DO
BEGIN
WRITELN ('vvedite el-t ',I);
READLN (A[I]);
END;
End;
Begin
{ Реализация второго варианта действий }
{ операторы }
. . .
End;
Begin
{Реализация выбора максимума}
{ операторы }
MAX:=A[1];
Imax:=1;
FOR I:=1 TO N DO
IF A[I]>max
THEN BEGIN
max:=A[I];
Imax:=I;
END;
WRITELN ('max znachenie=',max,
'его номер ', imax );
READLN;
. . .
End;
. . . .
Преобразование программы MAX во внутреннюю процедуру
В процедуре остаётся собственно поиск максимума. Входные параметры - количество элементов массива и сам массив, выходные (результаты) – значение максимума и порядковый номер максимального элемента в массиве. Процедура – внутренняя, в главной программе в соответствующей ветви оператора CASE остаётся только обращение к процедуре со списком фактических параметров.
PROGRAM Menu;
Type
VCT = ARRAY [1..15] OF INTEGER;
Var
A1 : VCT;
exit_ans : string;
choice, code : integer;
F, Fl : boolean;
N1,H,I,Imax1,MAX1 : INTEGER;
{процедура, внутренняя главной }
PROCEDURE MAX_VECT (n : intrger; A : VCT;
var MAX,IMAX:INTEGER);
VAR
I: INTEGER;
BEGIN
MAX:=A[1];
Imax:=1;
FOR I:=1 TO N DO
IF A[I]>max
THEN BEGIN
max:=A[I];
Imax:=I;
END;
END;
{Тело главной вызывающей программы}
Begin
F := true; { Флаг управления циклом меню }
while (F = true) do
Begin
Repeat
writeln(' Заголовок меню');
writeln('1. Первый вариант действий');
writeln('2. Второй вариант действий ');
writeln('3. Третий вариант действий’);
writeln('4. Четвёртый вариант действий ');
writeln('5. Выход из программы');
writeln('Ваш выбор:');
readln (choice2);
val (choice2, choice, code);
if (code<>0)
then writeln ('Вы ввели не число!’,
’ Повторите ввод! ');
until code=0 ;
Case choice of
Begin
{ Реализация первого варианта действий }
{ операторы }
. . .
End;
Begin
{ Реализация второго варианта действий }
{ операторы }
. . .
End;
Begin
{Реализация третьего варианта действий }
{ операторы }
MAX_VECT (n1, A1,MAX1,IMAX1);
. . .
End;
. . . . .
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|