- •1.1. Основные этапы создания программы
- •1.2. Алгоритмы
- •2.1. Структура типов в Turbo Pascal
- •Стандартные скалярные типы. Типы целых чисел
- •2.3. Операции побитовой обработки
- •2.4. Представление вещественных чисел в эвм
- •2.5. Символьный тип
- •2.6. Булевский тип
- •2.7. Перечисленный тип
- •2.8. Интервальный тип (диапазон)
- •3.1. Структура программы на turbo pascal
- •3.2. Основные операторы языка
- •3.2.1. Простые операторы
- •3.2.2. Операторы ввода-вывода
- •3.2.3. Структурные операторы
- •3.2.4. Условные операторы
- •3.2.5. Операторы повтора (цикла)
- •4.1. Массивы
- •4.2. Строковый тип
- •4.3. Множества
- •5.1. Процедуры и функции
- •5.2. Процедуры и функции пользователя
- •5.3. Передача параметров по значению и по ссылке
- •5.4. Рекурсивные процедуры и функции
- •6.1. Структура модулей
- •6.2. Компиляция и использование модулей
- •7.1. Записи
- •7.2. Вложенные записи
- •7.3. Записи с вариантами (вариантные записи)
- •7.4. Файлы
- •7.5. Подпрограммы для работы с файлами
- •7.5.1. Процедуры
- •7.5.2. Функции
- •7.6. Примеры программ для обработки файлов
- •7.7. Текстовые файлы
- •8.1. Структура оперативной памяти для программ на Turbo Pascal
- •8.2. Динамические структуры данных
- •8.3. Основные процедуры и функции для работы с динамическими переменными
- •8.4. Динамика выделения памяти в куче
- •8.5. Линейные списки. Способы создания и обработки
- •8.6. Нелинейные списки. Способы создания и обработки
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
7.1. Записи
Как известно, массивы могут состоять только из элементов, имеющих одинаковый физический смысл. Именно, однородность массива делает их использование ограниченным, ибо в реальных условиях чаще всего используются структуры неоднородные.
Запись – неоднородная структура, в которой явным образом выражена идея иерархической подчиненности между ее элементами.
Переменную типа запись можно определить непосредственно в разделе описания переменных.
Опишем переменную, которая содержит следующие данные: порядковый номер, ФИО, год рождения, размер месячной заработной платы.
107
Var
spisok: record
nomer: 1..100;
fio: string[40];
gr: 1900.2007;
zp: real;
end;
Та же переменная может быть задана с предварительным описанием типа.
type
wed=record
nomer: 1..100;
fio: string[40];
gr: 1900.2007;
zp: real;
end;
var spisok: wed;
mspisok: array[1..100] of wed;
Переменная mspisok определяет массив, состоящий из 100 элементов, каждый из которых включает в себя все поля записи wed.
Оба способа определения записи одинаково приемлемы, однако, определяя запись через тип, мы получаем дополнительную возможность передачи переменных типа запись подпрограммам в качестве параметров.
Для обращения к полям записи необходимо указать имя переменной, являющейся записью и имя нужного поля, поставив между ними точку, например, для вывода на экран размера заработной платы необходимо написать оператор writeln(spisok.zp). Для того, чтобы вывести на экран размер заработной платы работника, находящегося в списке на 5 месте, необходимо написать оператор writeln(mspisok[5].zp);
Пример. Создать массив записей типа spisok. Вывести на
108
экран элементы этого массива. Вывести на экран список тех
сотрудников, заработная плата которых превосходит некоторую заданную величину p.
Program zap;
type
wed=record
nomer: 1..100;
fio: string[40];
gr: 1900.2007;
zp: real;
end;
var spisok: wed;
mspisok: array[1..100] of wed;
i,n: integer {n- кол-во элементов в списке}
p: real; {Размер предельной заработной платы}
begin
writeln(‘Введите количество записей в массиве');
readln(n);
{Формирование списка}
for i:=1 to n do
begin
writeln(‘Введите порядковый номер сотрудника’);
readln(mspisok[i].nomer);
writeln(‘Введите ФИО сотрудника’);
readln(mspisok[i].fio);
writeln(‘Введите год рождения сотрудника’);
readln(mspisok[i].gr);
writeln(‘Введите размер заработной платы сотрудника’);
readln(mspisok[i].zp);
end;
{Вывод списка на экран}
109
for i:=1 to n do
begin
writeln(msisok[i].nomer,’ ‘,msisok[i].fio,’ ‘, msisok[i].gr,’ ‘, msisok[i].zp);
end;
{Анализ списка}
for i:=1 to n do
begin
if(msisok[i].zp>p then
writeln(msisok[i].nomer,’ ‘,msisok[i].fio,’ ‘, msisok[i].gr,’ ‘, msisok[i].zp);
end;
end.
Для того, чтобы не повторять имя записи при каждом обращении к полям записи, используется оператор присоединения with. Очевидно, что если действие оператора with нужно распространить более чем на один оператор, то нужно использовать операторные скобки
Например, фрагмент программы формирования списка с использованием оператора with будет выглядеть так
for i:=1 to n do
begin
with mspisok[i] do
begin
writeln(‘Введите порядковый номер сотрудника’);
readln(nomer);
writeln(‘Введите ФИО сотрудника’);
readln(fio);
writeln(‘Введите год рождения сотрудника’);
readln(gr);
writeln(‘Введите заработную плату сотрудника’);
110
readln(zp);
end;
{end with}
end; {end for}