Сделай Сам Свою Работу на 5

СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных данных) с указанием их типов,





ТИП – тип результата: значение, которое должно приобретать имя функции.

Допускается описание функции без параметров:

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 Все материалы защищены законодательством РФ.