Функции.
Функции — ориентированны на вычисление одного значения. Это значение рассчитывается и подставляется в выражение, в котором участвует функция, вместо неё.
Формат описания:
Function <имя_функции>(список_формальных_параметров):<тип_функции>;
<перечень локальных переменных, типов, констант, подрограмм>
Begin
операторы
<имя_функции>:=<результат>;
End;
Вызов функции обычно происходит изнутри выражений и имеет такой вид:
<имя_функции>(<список фактических параметров>)
Тип функции — тип значения, которое функция вычисляет и передаёт в выражение вместо себя. Это значение должно быть присвоено имени функции внутри её описания может использоваться ключевое слово result.
Пример: Ввести три числа и вывести сумму их факториалов.
Function fact(v:integer):int64;
Var
i:integer;
f:int64;
begin
f:=1;
for i:=1 to v do f:=f*i:
fact:=f; // либо result:=f
end;
var
a,b,c:integer;
d:int64;
begin
write(‘Введите 3 числа’);
read(a,b,c);
d:=fact(a)+fact(b)+fact(c);
write(‘Сумма =’,);
readln;
readln;
end;
Записи
Записи — это сложный структурированный тип данных. Каждый элемент этого типа состоит из нескольких полей(свойство), которые являются переменными различных типов.
Главное назначение записей — хранение информации об реальных объектах и процессах. Каждое поле записи характеризуется собственным именем, которое является идентификатором. Обращение к отдельному полю:
<имя_записи>.<имя_поля>
Пример: St.Name:=’Ваня Кусто’
С отдельными полями можно производить любые действия, допустимые для этого типа.
К записи целиком применимы операции присваивания и сравнения. При этом присваиваться и сравниваться могут только однотипные записи.
Формат описания записей
Type <имя_типа_записи>=record
<имя_поля_1>:<тип_поля_1>;
…
<имя_поля_N>:<тип_поля_N>;
End;
Однотипные поля могут перечислятся через запятую.
Пример: type Student=record
Name,Gr:string;
YB:word;
Course:byte;
End;
…
Var
S1,S2:Student;
…
S1.YB:=1911;
Обычно используются массивы записи:
Var M:array of Student;
В этом случае доступ к отдельной записи выглядит как M[i], а для отдельного поля записи:
M[i].YB
Поля записи могут иметь любой тип, в том числе быть массивами и записями.
Для нашего примера целесообразно хранить также информацию об успеваемости. Успеваемость по отдельной дисциплине лучше хранить в виде записи.
Type Disk=record Subject:string;
Mark:byte;
End;
AllDisc=array of Disc;
Последнюю строку нужно добавить в описание типа Student. Так же необходимо ввести поле для хранения количества дисциплин.
Пример: Процедура ввода данных об одном студенте (кроме успеваемости)
Procedure InputStud(var S:Student);
Begin
write (‘Введите имя’); readln(S.Name);
write (‘Введите год рождения’); readln(S.YB);
…
End;
write (‘Введитеколичество студентов’); readln(N);
SetLength(M,N);
For i:=0 to N-1 do InputStud(M[i]);
