Запись представляет собой совокупность ограниченного числа логически связанных компонентов, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Паскаль, за исключением файлового типа.Описание записи в языке ПАСКАЛЬ осуществляется с помощью служебного слова RECORD, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом END.Например, записная книжка содержит фамилии, инициалы и номера телефона, поэтому отдельную строку в записной книжке удобно представить в виде следующей записи:
type Row=Record
FIO: String[20];
TEL: String[7]
end;
var str: Row;
Описание записей возможно и без использования имени типа, например:
var str: Record
FIO: String[20];
TEL: String[7]
end;
Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например:
str.FIO, str.TEL
Такое имя называется составным. Компонентой записи может быть также запись, в таком случае составное имя будет содержать не два, а большее количество имен. Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения with. Он позволяет заменить составные имена, характеризующие каждое поле, просто на имена полей, а имя записи определить в операторе присоединения:
with M do OP;
Здесь М – имя записи, ОР – оператор, простой или составной. Оператор ОР представляет собой область действия оператора присоединения, в пределах которой можно не использовать составные имена.
Пример 16.1. Создать базу данных о студентах student, содержащую следующие поля:
· Номер зачетки (n_zach);· фамилия и инициалы (fio);· средний балл (sr_b);· количество сданных зачетов и экзаменов (kz);· форма обучения (fo).Написать программу, выполняющую следующие действия:1) ввод с клавиатуры данных в массив, состоящий из n записей; 2) вывод на экран всей введенной информации;3) вывод на экран информации о студентах, которые получают стипендию (форма обучения – b, количество зачетов и экзаменов – 10, средний балл >=7.5).
Program Project1;
uses crt;
type student=record
n_zach:string[5];
fio:string[35];
sr_b:real;
kz:byte;
fo:string[2];
end;
var s:array[1..30] of student;
n,k,i:integer;srbg:real;
begin
write('n='); readln(n);
for i:=1 to n do // начало цикла for для ввода исходных данных
writeln('количество студентов, которые получают стипендию ',k:2);
readln;
end.
Пример 16.2. Необходимо организовать массив записей Паскаля, а затем из общего списка вывести фамилии студентов 2-го курса.
program Project2; type anketa=record fio: string[45]; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3]
end;
var student: array [1..100] of anketa; I: integer; begin //последовательно вводим каждую запись for I:=1 to 100 do begin writeln ('введите сведения о', I , '-м студенте'); writeln ('введите фамилию, имя и отчество'); readln (student[I].fio); writeln ('введите дату рождения'); readln (student[I].dat_r); writeln ('введите адрес'); readln(student[I].adres); writeln ('введите курс'); readln(student[I].curs); writeln ('введите группу'); readln (student[I].grupp); end; writeln ('ввод закончен'); writeln ; //просматриваем массив записей и выбираем только студентов 2-го курса for I:=1 to 100 do if student[I].curs=2 then writeln(' фамилия студента : ', student[I].fio); end.
Например, фрагмент из предыдущей программы с использованием оператора присоединения (with …. Do ….) будет выглядеть так:
Фрагмент примера
for I:=1 to 100 do with student[I] do begin writeln ('введите сведения о', I , '-м студенте'); writeln ('введите фамилию, имя и отчество'); readln (fio); writeln ('введите дату рождения'); readln (dat_r); writeln ('введите адрес'); readln(adres); writeln ('введите курс'); readln(curs); writeln ('введите группу'); readln (grupp); end;
Варианты заданий
В программе использовать одномерный массив с элементами массива типа Record. Исходные данные вводятся с клавиатуры в 10 элементов массива. Программа должна выводить соответствующее сообщение, если искомых данных в массиве нет.
1. Описать структуру с именем STUDENT, содержащую следующие поля: фамилия и инициалы; номер группы; успеваемость (средний балл).
Запрограммировать вывод на экран фамилий и номеров групп для всех студентов, включенных в массив, если средний балл студента больше 4,5.
2. Описать структуру с именем STUDENT, содержащую следующие поля: фамилия и инициалы; номер группы; успеваемость (средний балл).
Запрограммировать вывод на экран фамилий и номер группы для студентов, имеющих средний балл 4 или 5.
3. Описать структуру с именем STUDENT, содержащую следующие поля: фамилия и инициалы; номер группы; успеваемость (средний балл).
Запрограммировать вывод на экран фамилий и номеров групп для всех студентов, имеющих средний балл от 6 до 8.
4. Описать структуру с именем AEROFLOT, содержащую следующие поля: название пункта назначения рейса; номер рейса; тип самолета.
Запрограммировать вывод на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры.
5. Описать структуру с именем AEROFLOT, содержащую следующие поля: название пункта назначения рейса; номер рейса; тип самолета.
Запрограммировать вывод на экран пунктов назначения и номеров рейсов, обслуживаемых самолетом, тип которого введен с клавиатуры.
6. Описать структуру с именем WORKER, содержащую следующие поля: фамилия и инициалы работника; название занимаемой должности; год поступления на работу.
Запрограммировать вывод на экран фамилий работников, чей стаж работы в организации превышает значение стажа, введенного с клавиатуры.
7. Описать структуру с именем POEZD, содержащую следующие поля: название пункта назначения; номер поезда; время отправления.
Запрограммировать вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени.
8. Описать структуру с именем POEZD, содержащую следующие поля: название пункта назначения; номер поезда; время отправления.
Запрограммировать вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры.
9. Описать структуру с именем POEZD, содержащую следующие поля: название пункта назначения; номер поезда; время отправления.
Запрограммировать вывод на экран информации о поезде, номер которого введен с клавиатуры.
10. Описать структуру с именем MARSH, содержащую следующие поля: название начального пункта маршрута; название конечного пункта маршрута; номер маршрута.
Запрограммировать вывод на экран информации о маршруте, номер которого введен с клавиатуры.
11. Описать структуру с именем MARSH, содержащую следующие поля: название начального пункта маршрута; название конечного пункта маршрута; номер маршрута.
Запрограммировать вывод на экран информации о маршрутах, которые начинаются или оканчиваются в пункте, название которого введено с клавиатуры.
12. Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя; номер телефона; год рождения.
Запрограммировать вывод на экран информации о человеке, номер телефона которого введен с клавиатуры.
13. Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя; номер телефона; год рождения.
Запрограммировать вывод на экран информации о людях, чьи дни рождения приходятся на год, значение которого введено с клавиатуры.
14. Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя; номер телефона; год рождения.
Запрограммировать вывод на экран информации о человеке, чья фамилия и имя введены с клавиатуры.
15. Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя, отчество; месяц рождения; год рождения.
Запрограммировать вывод на экран информации о людях, родившихся в месяце, название которого введено с клавиатуры.
16. Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя, отчество; знак Зодиака; год рождения.
Запрограммировать вывод на экран информации о людях, родившихся под знаком Зодиака, название которого введено с клавиатуры.
Литература
1. Архангельский, А. Я. Программирование в Delphi : учебник по классическим версиям Delphi / А. Я. Архангельский. – Москва : Бином, 2008. – 1154 с.
2. Бобровский, С. И. Delphi 7: учебный курс / С. И. Бобровский. – Санкт-Петербург : Питер, 2008. – 736 с.
3. Графические средства Delphi: методические указания для самостоятельной работы студентов механических специальностей дневной и заочной форм обучения по дисциплинам : "Информатика", "Вычислительная техника, программирование и расчеты на ЭВМ" / УО "ВГТУ" ; сост. В. П. Терентьев, Т. П. Стасеня. – Витебск, 2007. – 61 с.
4. Климов, Ю. С. Программирование в среде Turbo Pascal 6.0 : справ. пособие / Ю. С. Климов, А. И. Касаткин, С. М. Мороз. – Минск : Вышэйшая школа, 1992. – 158 с.
5. Методические указания к курсовому проектированию для студентов механических специальностей по предметам цикла "Информатика" / УО "ВГТУ" ; сост. В. П. Терентьев, А. С. Дягилев, Т. П. Стасеня. – Витебск : УО "ВГТУ", 2004. – 81 с.
6. Программирование на персональных ЭВМ : практикум / под ред. Д. В. Офицерова. – Минск : Вышэйшая школа, 1993. – 256 с.
7. Сурков, Д. А. Программирование в среде Borland Pascal для Windows : справочное пособие / Д. А. Сурков, К. А. Сурков, А. Н. Вальвачев. – Минск : Вышэйшая школа, 1996. – 432 с.
8. Фаронов, В. В. Delphi : учебник / В. В. Фаронов. – Санкт-Петербург : Питер, 2010. – 640 с.
9. Фаронов, В. В. Delphi. Программирование на языке высокого уровня : учебник для студентов вузов, обучающихся по направлению подготовки дипломированных специалистов "Информатика и вычислительная техника" / В. В. Фаронов. – Санкт-Петербург : Питер, 2010, 2007. – 640 с.
10. Фаронов, В. В. Основы Турбо Паскаля : учеб. пособие / В. В. Фаронов. – Москва : Учебно-инженерный центр «МВТУ-ФЕСТО ДИДАКТИК», 1992. – 304 с.
11. Язык программирования Object Pascal (Delphi) : курс лекций по дисциплине "Вычислительная техника, программирование и расчеты на ЭВМ" для студентов механических спец. / УО "ВГТУ" ; сост. В. П. Терентьев. – Витебск : УО "ВГТУ", 2005. – 75 с.