- •Конспект лекций
- •1.4 Общая структура программы
- •1.5 Стандартные процедуры и функции
- •1.6 Процедуры ввода/вывода
- •2. Простые типы данных
- •2.1 Целые типы
- •2.2 Вещественные типы
- •2.3 Cимвольный тип данных
- •2.4 Логический тип данных.
- •2.5 Ограниченные типы
- •2.6 Перечислимые типы
- •2.7 Описание типов
- •2.8 Преобразование типов
- •2.9 Порядок вычисления выражений
- •3. Операторы языка Паскаль
- •3.1 Оператор присваивания
- •3.2 Составной оператор
- •3.3 Условный оператор
- •3.4 Оператор выбора case
- •3.5 Оператор цикла с параметром (цикл for)
- •3.6 Оператор цикла с предусловием (цикл while)
- •1 Вариант:
- •2 Вариант:
- •3 Вариант:
- •3.7 Оператор цикла с постусловием (цикл repeat)
- •3.8 Вложенные циклы
- •3.9 Оператор перехода goto
- •4. Массивы
- •4.2 Сортировка элементов массива
- •4.3 Многомерные массивы
- •5. Подпрограммы (процедуры и функции)
- •5.1 Процедуры
- •5.2 Функции
- •5.3 Области действия имен
- •5.4 Параметры процедур и функций
- •5.5 Побочные эффекты при использовании подпрограмм
- •5.6 Передача массивов в подпрограммы
- •5.7 Параметры-костанты
- •5.8 Массивы открытого типа
- •5.9 Рекурсия в подпрограммах
- •6. Строковый тип данных
- •6.1 Описание строк
- •6.2 Операции со строками
- •6.3 Процедуры и функции для работы со строками
- •7. Стандартные модули Турбо-Паскаля
- •7.1 Модули турбо3 и graph3
- •7.2 Модуль overlay
- •7.3 Модуль dos
- •7.4 Модуль system
- •7.5 Модуль printer
- •7.6 Модуль crt
- •7.7 Модуль graph
- •8. Записи
- •8.1 Определение записи
- •8.2 Оператор над записями
- •8.3 Вложенные записи
- •8.4 Массив записей
- •8.5 Записи с вариантами
- •9. Файлы
- •9.1 Определение файла
- •9.2 Процедуры и функции для работы с файлами
- •9.3 Нетипизированные файлы
- •10. Интегрированная среда Турбо Паскаля
- •10.1 Как начать работу с Турбо Паскалем
- •10.2 Ваша первая программа
8. Записи
8.1 Определение записи
Относится к структурированным типам данных (как и массив, файл, множество). Запись состоит из фиксированного числа компонентов, называемых полями записи. В отличие от массива, поля записи могут быть различных типов.
Описание записи обычно осуществляют с использованием оператора TYPE, т.е. сначала определяют тип-запись, а затем в разделе var описывают конкретную запись. Тип-запись описывается следующим образом:
type <имя типа> = record
<поле1>: тип;
<поле2>: тип;
…
<полеN>: тип;
end;
Пример1:
type date = record
day: 1..31;
month: 1..12;
year: integer;
end;
type person = record
name: string[20];
age: integer;
adres: string[50];
end;
day month year
10 |
5 |
1980 |
student: person; name age adres
|
|
|
Доступ к полям записи осуществляется указанием имени записи и имени поля через точку:
birthday.day:=10;
birthday.month:=5;
birthday.year:=1980;
Пример 2:
type detal = record
name: string[20];
kod: integer;
weight: real;
end;
var d: detal;
Begin
…
d.name:=’гайка’;
d.kod:=155;
d.weight:=0.057;
…
write(‘Деталь: ’,d.name,’ Код: ’, d.kod,’ Вес: ‘,d.weight);
End.
8.2 Оператор над записями
Для того, чтобы не писать каждый раз имя записи при обращении к ее полям можно использовать оператор над записями WITH.
Структура оператора:
with <имя записи> do <оператор>;
обычно требуется begin…end;
В этом случае можно указывать только поле записи:
with birthday do
begin
day:=10;
month:=5;
year:=1980;
end;
8.3 Вложенные записи
Поля записи могут быть любого типа, в том числе поле записи может быть тоже записью. В этом случае образуются вложенные записи.
Пример:
type data = record
day: byte;
month: byte;
year: word;
end;
type stud = record
name: string[15];
fam: string[30];
pol: char;
adres: string[80];
birthday: data;
end;
stud
var stud: person;
begin begin
stud.name:=’Денис’; with stud do begin
stud.fam:=’Иванов’; name:=’Денис’;
stud.pol:=’м’; fam:=’Иванов’;
stud.adres:=’ ’; pol:=’м’;
stud.birthday.day:=21; with birthday do begin
stud.birthday.month:=3; day:=21;
stud.birthday.year:=1980; month:=3;
end. year:=1980;
end;
end;
end.
8.4 Массив записей
На практике часто используются не отдельные записи, а массивы записей. Рассмотрим использование массива записей на примере.
Пример 1: Программа, заполняющая экран точками различного цвета и стирающая их.
uses crt, graph;
type point = record
x,y: integer;
color: byte;
end;
var gd,gm,i: integer;
p: array [1..5000] of point;
begin
gd:=detect;
initgraph (gd, gm, ‘c:\tp6\bgi’);
if graphresult <> 0 then
begin
write (‘ошибка графики:’, grapherrormsg (graphresult));
halt;
end;
randomize;
for i:=1 to 5000 do
with p[i] do begin
x:=random(640);
y:= random(350);
color:= random(15)+1;
putpixel (x,y,color);
delay(50);
end;
for i:=1 to 5000 do
begin
putpixel(p[i].x, p[i].y,0);
delay(50);
end;
end.
Пример 2: Программа создания библиотечного каталога и вывод на экран списка всех книг, изданных в указанном году.
uses crt;
type book = record
name: string;
autor: string;
year: string;
str: string;
end;
var i, n, god: integer;
ch: char;
b: array [1..1000] of book;
begin
i:=0;
repeat
inc(i);
with b[i] do begin
write(‘название:’); readln(name);
write(‘автор:’); readln(autor);
write(‘год:’); readln(year);
write(‘количество страниц:’); readln(str);
end;
write(‘Еще вводить? Y/N’); readln(ch);
writeln; n:=i;
until (upcase(ch)=’N’);
repeat {поиск в каталоге}
write(‘Введите год’); readln(god);
for i:=1 to n do
if b[i].year=god then writeln(b[i].name, b[i].autor, b[i].year, b[i].str);
writeln(‘Продолжить поиск? Y/N’); readln(ch);
until (upcase(ch)=’N’);
end.