Программирование. Объединение разнородных элементов. Записи в Pascal Учитель информатики - Комкова М.С. Гимназия МИИТ, г. Москва
Массивы объединяют однородные единицы информации – элементы одного и того же типа. Многообразие информации нельзя свести только к какому-то одному типу данных. Указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединим разнородную информацию.
Данные описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.
Определение Запись – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.
Пример type < имя _ типа >=record : тип; : тип; …………………. : тип end ; где record – служебное слово, а и - правильные идентификаторы языка Паскаль.
Пример фрагмента программы описания записи Паскаля Type anketa=record fio: string[45]; pol: char; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3]; end; Такая запись называется двухуровневой
Type anketa1=record fio: string[45]; pol: char; dat_r: record; god: integer; mes: string[10]; den: 1..31; end; adres: record gorod: string[25]; ulica: string [20]; dom, kv: integer; end; curs: 1..5; grupp: string[3]; end; Пример фрагмента программы описания записи Паскаля
Задача 1. program primer1; type anketa=record fio: string[45]; dat_r: string[8]; adres: string[50]; curs: 1..5; grupp: string[3] end; var student: anketa; begin writeln (‘введите сведения о студенте’); {обратите внимание, ввод каждого поля осуществляется отдельно} writeln (‘введите фамилию, имя и отчество’); readln (student.fio); writeln (‘введите дату рождения’); readln (student.dat_r); writeln (‘введите адрес’); readln(student.adres); writeln (‘введите курс’); readln(student.curs); writeln (‘введите группу’); readln (student.grupp); writeln (‘ввод закончен’); writeln ; {обратите внимание, что вывод записи осуществляется по полям} writeln (‘фамилия студента: ’, student . fio ); writeln(‘ дата рождения : ’, student.dat_r); writeln(‘ адрес : ’, student.adres); writeln(‘ курс : ’, student.curs); writeln(‘ группа : ’, student.grupp); end. Пусть нам необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран.
Усложним задачу Пусть нам необходимо иметь сведения о многих студентах, например, нашего факультета. Следовательно, необходимо организовать массив записей Паскаля. А затем из общего списка вывести фамилии студентов 2-го курса. program primer 2 ; 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 ; Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ).
Пример фрагмента программы c записью и префиксом Паскаля 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;
Источники: http://pas1.ru/recordtask http://life-prog.ru/view_zam.php?id=30 http://www.cyberforum.ru/post5537228.html http://www.cyberforum.ru/pascalabc/thread60683.html http://www.programmersforum.ru/index.php?s=c092477c928639cd83c4384dc65a70ca http://pascalabc.net http://www.tehnari.ru/f41/t54258/