Добавил:
ikot.chulakov@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по Delphi с готовыми программами / Лабораторная работа №7 Описание подпрограмм, Рекурсия, Сортировка.pdf
Скачиваний:
19
Добавлен:
12.07.2020
Размер:
493.77 Кб
Скачать

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

procedure Second; begin

...

First;

...

end;

Из выше приведенного листинга видно, что процедура First вызывает процедуру Second, а процедура Second вызывает процедуру First. Если попытаться откомпилировать выше приведенный фрагмент программы, то компилятор выдаст ошибку, «Идентификатор Second не определен». Как известно все идентификаторы в Object Pascal обязательно должны быть описаны перед первым использованием. Как видно из листинга ни какой порядок описания процедур не может удовлетворить этому условию. Для выхода из этой ситуации применяется опережающее описание подпрограмм. Для этого необходимо описать заголовок одной из подпрограмм с директивой forward. Перепишем приведенный выше пример

procedure Second; forward;

procedure First; begin

...

Second;

...

end;

procedure Second; begin

...

First;

...

end;

Этот фрагмент откомпилируется без ошибок, т.к. при вызове процедуры First идентификатор процедуры Second уже будет описан.

Примеры использования подпрограмм

В данной главе приведены некоторые приемы использования подпрограмм.

Вычисление значений выражений

Листинг 2

program Func;

{$APPTYPE CONSOLE}

function MyFunc(x:real):real;

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

begin

if x>0 then result:=x else result:=x*x;

end;

var x:real; begin

write('x=');

readln(x);

writeln('F(x)=', 7*x*MyFunc(x):6:3); readln;

end.

Ввод-вывод переменных типа запись

Как говорилось выше в Object Pascal нет стандартных средств для операций вводавывода для переменных типа запись. Поэтому удобно написать собственные подпрограммы для осуществления этих операций. Пример таких подпрограмм приведен ниже.

Листинг 3

program Records;

{$APPTYPE CONSOLE} uses SysUtils;

type TPerson=record name:string[12]; fam :string[16]; otch:string[20]; BirthDay:TDateTime;

end;

//ввод записи

procedure InRecord(var Person:TPerson); var s:string;

begin

with Person do begin

write('name '); readln(name); write('familia '); readln(fam); write('othectvo '); readln(otch); write('BirthDay '); readln(s);

//преобразуем строку в тип дата-время

BirthDay:=StrToDate(s);

end;{with}

end;{InRecord}

//вывод записи

procedure OutRecord(const Person:TPerson);

begin

 

with Person do

 

begin

 

writeln('name

', name);

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

writeln('familia ', fam); writeln('othectvo ', otch); writeln('BirthDay ', DateToStr(BirthDay));

end;{with} end;{OutRecord}

//основная программа var P:TPerson; begin

InRecord(P); writeln('___________________'); OutRecord(P);

readln;

end.

Рассмотрим еще один пример по работе с записями. Перепишем программу из лабораторной работы №5 (листинг 2) c использованием подпрограмм.

Листинг 4

program TableRec;

{$APPTYPE CONSOLE}

const n=10;//емкость массива type TStudent=record

name

:string[12];

//имя

familia:string[16];

//фамилия

gruppa

:Integer;

//группа

end;

var Table:array [1..n] of TStudent; //таблица

Count:integer; //число строк в таблице MenuState:byte;//код выбранного действия

//выводит меню, возвращает результат выбора function ShowMenu:Integer;

begin writeln;

writeln('Viberite deistvie'); writeln('0 - Exit program'); writeln('1 - Add record'); writeln('2 - Show all record'); write('>>');

readln(Result);

end;

//ввод записи

procedure InRecord(var P:TStudent); begin

writeln('Insert record >>');

with P do

 

begin

 

write('name

:'); readln(name);

write('familia

:'); readln(familia);

write('gruppa

:'); readln(gruppa);

end;{with}

 

end;{InRecord}

 

//вывод записи

procedure ShowRecord(const P:TStudent); begin