Ответы на экзаменационные вопросы № 1-34 по дисциплине "Программирование" (Средства модульного программирования в системе Турбо-Паскаль. ООП. Объекты в динамической памяти), страница 8

2. Составить описание а) любой даты календаря; б) личных данных человека (имя, фамилия, дата рождения, место рождения); в) личных данных гражданина иностранного государства.  

 type date = record                      year : word;                      month : 1..12;                    day : 1..31;          end;  person_ros = record

imya, fam : string[40];                       data_r : date;                       mesto_r : string;                         end;  person_ino = record                       imya, fam : string[40];                       data_r : date;                       strana : string[30];                       data_entry : date;                       data_exit : date;                        end;

Если затем в программе объявить следующие переменные:  

var x : date; y: person_ros; z : person_ino;   

то в теле программы в разделе операторов будут доступны следующие переменные: x.year; y.imya; z.imya; x.month; y.fam; z.fam; x.day; y.data_r; z.data_r;  y.mesto_r; z.strana;  z.data_entry;  z.data_exit; Система никогда не перепутает переменные y.data_r и z.data_r, т.к. переменные y и z принадлежат к разным типам. Кроме того, в программе будут известны переменные: y.data_r.year; y.data_r.month и т.д.

Идентификаторы полей внутри записи могут быть использованы в качестве имен других переменных, т.е. в программе могут быть объявлены переменные data_r, fam, day и т.п., которые будут абсолютно самостоятельными.  

3. Во втором примере можно существенно упростить описание второго и третьего типов, если использовать записи с вариантной частью:  

person = record   imya, fam : string[40]; описание фиксированной части (всегда располагается вначале)   data_r : date;   case citizen : boolean of 

вариантная часть в каждой записи |может быть только одна. Обычно задается оператором варианта case.   true : mesto_r : string;   false : strana : string[30];   data_entry : date;   data_exit : date;   end; однозначно действует на окончание описания типа и на окончание case. 

Массив записей. Оператор присоединения.  

Запись, как единица информации, описывает один объект. Решение конкретных задач, как правило, требует объединения информации в более крупные множества. В таких случаях используются более сложные структуры типа массив записей или файл записей.  

Массив записей представляет собой массив, базовым типом элементов которого является запись.  

Пример.  

Описание студентов одной группы может выглядеть следующим образом:  

type gruppa = array[1..30] of person_ros; var student: gruppa; k : integer; . . . k:=3; for i:=a to b do  begin  gotoxy(1,k); readln(sdudent[i].imya);  gotoxy(15,k); readln(sdudent[i].fam);  gotoxy(41,k); readln(sdudent[i].mesto_r);  k:=k+3;  end; Этот фрагмент программы может быть записан иначе, если использовать оператор присоединения: k:=3; for i:=a to b do  with student[i] do  begin  gotoxy(1,k); readln(imya);  gotoxy(15,k); readln(fam);  gotoxy(41,k); readln(mesto_r);  k:=k+3;  end; Если один оператор или группа операторов, процедур, функций и т.д. обрабатывает одну переменную типа запись, то можно не указывать каждый раз имя этой переменной, а указывать только имена полей, если эта группа операторов обрамлена оператором сокращенной записи (или оператором присоединения).  with <список идентификаторов> do  <оператор>; Список идентификаторов может содержать произвольное число переменных комбинированного типа запись. Если имена полей этих переменных уникальны, то никаких проблем не возникает. В противном случае действует правило: запись with <имя 1>, <имя 2>, …, <имя n> do <оператор>; эквивалентна конструкции  with <имя 1> do  with <имя 2> do  . . .   with <имя n> do  <оператор>;  Пример: Сформировать файл из записей, содержащих сведения о различных квартирах дома: номер квартиры, фамилия владельца, общая площадь, наличие (отсутствие) задолженности по квартплате и т.д. Описать процедуры для формирования файла, вывода всех данных, хранящихся в файле, подсчет общей (суммарной) площади всех квартир дома, поиска данных о квартире по фамилии ее владельца,   изменения записи с указанным номером. Вызов процедур производится через меню.