Лабораторная работа № 9
Постановка задачи
1. Исходные данные считать из предварительно созданного текстового файла, используя для этого процедуру. Количество записей в файле до начала чтения из него не должно быть известно.
2. Выполнить заданные действия, каждое из которых оформить в виде подпрограммы.
3. Результаты вывести в текстовый файл. Вывод результатов должен производиться специально созданной для этого процедурой.
4. Весь обмен данными между подпрограммами и основной программой осуществлять через параметры.
Теоретические сведения
Определение
Запись – это структурированный тип данных, состоящий из конечного числа компонент, называемых полями.
Компоненты записи могут разного типа. Компонента (поле) – переменная некоторого типа.
Описание
а) через предварительное описание типа-записи:
TYPE
<имя типа> = record
поле1 : тип поля1;
поле2 : тип поля2;
...
поле n : тип поляN
end;
VAR
a: <имя типа>;
б) непосредственное описание переменной типа записи:
VAR
a: record
поле1 : тип поля1;
поле2 : тип поля2;
...
поле n : тип поляN
end;
в) допускается поля одного типа объединять в одно описание:
Поле1, поле2 : тип полей 1 и 2;
Пример 1:
TYPE
TPoint = record
x : real;
y : real;
End;
VAR
Point : TPoint ;
Пример 1:
TYPE
TPoint = record
x, y : real;
End;
VAR
Point : record
x, y : real;
End;
Инициализация записей
При введении исходных данных в виде типизированных констант используется явное указание на идентификатор поля. Например, для ввода координат точки можно воспользоваться типом точки TPoint:
TYPE
TPoint = record
x,y : real;
End;
CONST
Point : TPoint = (x : 2.0; y : -1.5);
Доступ к полю записи
Формат доступа:
<имя переменной записи>.<имя поля>,
например, Point.х.
Имя поля данной записи неизменно во всей программе.Вне записи этот же идентификатор может обозначать совершенно другую величину.
Например,
VAR
Point : record
x,y : real;
End;
x : string;
…
BEGIN
Point.x:=1.5;
x:=’some’;
…
Здесь строковая переменная х, описанная в программе, и Point.х – разные переменные.
Составные записи, поля-массивы, массивы записей
Поле записи может быть записью или массивом.
Массив может состоять из записей.
В качестве примера рассмотрим массив многоугольников (polygons).
PROGRAM Polygons;
CONST
MaxNumVert = 125;
MaxNumPol=125;
TYPE
TPoint = record {точка}
x,y : real;
End;
TPolygon = record {многоугольник}
Num_vert : 1.. MaxNumVert; {количество вершин}
Vertex : array [1.. MaxNumVert] of TPoint; {вершины многоугольника}
End;
VAR
Polygon : array [1.. MaxNumPol] of Tpolygon; {набор многоугольников}
X : real;
…
Polygon[4].Vertex[2].x := x + Polygon[4].Vertex[2].x;
Polygon[4].Vertex[2].y:= 2+ Polygon[4].Vertex[2].y;
…
В приведенной программе x и Polygon[4].Vertex[2].x – различные числа, хранящиеся в различных областях памяти.
Оператор присоединения: with
with<имя записи> do <оператор>
Если в какой-то части программы осуществляют операции с конкретной записью, то можно упростить действия, применив оператор WITH.
Начиная с момента введения оператора WITH, имена полей указанной записи можно употреблять без указания имени текущей записи. Например,
with Polygon[4] do
begin
Vertex[2].x := x + Vertex[2].x;
Vertex[2].y:= 2+ Vertex[2].y;
End;
или
with Polygon[4] do
with Vertex[2] do
begin
x := Polygons.x + x; // Polygons – имя программы
y:= 2+ y;
еnd;
или так:
with Polygon[4].Vertex[2] do
begin
x := Polygons.x + x; // Polygons – имя программы
y:= 2+ y;
end;
При использовании оператора With могут происходить казусы, если некоторый Ваш идентификатор совпадает по имени с именем поля. Этого следует избегать путем изменения имени внешнего идентификатора (так как имя поля в описании жестко зафиксировано) или употребления имени программы в качестве расширения, как это сделано в последних примерах.
Справочная информация
Динамический массив – это массив, память которого выделяется в ходе выполнения программы.
Таблица некоторых стандартных подпрограмм Delphi:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.