КОМБИНИРОВАННЫЙ ТИП – ЗАПИСИ
Запись - описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип. Структура записи аналогична таблице. Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа. Структура данных типа записи Структура объявления типа "запись" имеет следующий вид: TYPE <ИмяТипа> = RECORD <поле1>: <тип поля1>; <поле2>: <тип поля2>; . . . <полеN>: <тип поляN> end; Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. <ИмяТипа> и поля являются правильными идентификаторами. Например: TYPE DENROGD = RECORD name: string; {фамилия или имя } den, mes: byte; {день, месяц} god: word {год} end; Определение константы – записи будет иметь вид <идентификатоp>: <тип_записи > = (<список_значений_полей>); Список значений полей представляет собой список из последовательностей вида: имя поля, двоеточие и константа. Поля должны указываться в той же последовательности, в какой они перечислены в объявлении типа. Например: TYPE POINT = record x, y: real; end; CONST p: POINT = (x:1; y:1);
Объявление переменных производится в разделе VAR: VAR a, b: DENROGD; Доступ к каждой компоненте записи производится указанием составного имени: имени переменной и затем через точку имени поля. Например: a.name := ' MARINA'; a.god := 1991; a.den := 23; a.mes := 3; Таким образом, в типе "запись" определена операция присваивания. Кроме того, как и в массиве, все значения переменных типа "запись" можно присваивать другим переменным того же типа: B := A; . Над полями можно выполнять действия, разрешенные для базового типа: b.god := а.god + 1; {на год старше}. В качестве переменной может быть объявлен массив записей: VAR s: array[1..20] of STUDENT; Пример. Разработать программу формирования списка студентов с указанием дат рождения. Распечатать список в алфавитном порядке. Program zapis; Type {определение нового типа} student = record {запись} name: string[15]; den, mes: byte; god: word end; Var Z: ARRAY [1..20] OF student; k, m, i, n: byte; r: string[15]; {вспомогательная строка для перестановки} BEGIN writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ'); READln(n); for i:=1 to n do begin writeLN('ВВЕДИТЕ имя ',i,' студента с прописной буквы'); readLN (z[i].name); WRITELN('ВВЕДИТЕ день рождения'); readLN(z[i].den); WRITELN('ВВЕДИТЕ месяц рождения'); readLN(z[i].mes); WRITELN('ВВЕДИТЕ год рождения'); readLN(z[i].god); end; for I := n downto 2 do {********* Упорядочение списка *********] begin {поиск "наибольшего" значения поля NAME} m:=1; for k:=2 to i do if z[k].name > z[m].name then m := k; r := z[i].name; {перестановка записей} z[i].name := z[m].name; z[m].name := r end; {**************************************} writeln(' Упорядоченный список '); for i:=1 to n do begin WRITE(z[i].name); WRITELN(' Дата рождения:', z[i].den, '.' ,z[i].mes, '.', z[i].god); end END. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|