Главная/Раздел  5

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

Сложные типы данных.
Записи

Все типы данных, как простые так и сложные, которые мы изучали и применяли раньше, могут использоваться для хранения данных только одного типа. Например в переменных типа integer можно хранить только целые числа. В переменных типа array, set можно хранить только элементы их базового типа и т.д. Но так как вычислительная техника используется в различных информационных, справочных, экономических и других информационных системах, то возникает необходимость в организации сложного типа данных для хранения неоднородной (разного базового типа) информации. Для работы с группой различных по типу данных, в системе программирования Turbo Pascal применяют тип данных "запись".

Что такое запись.

Понятие записи мы рассмотрим на примере списка учащихся с их оценками:

     
    N   Фамилия И.О.     Оценки    
  
    1  Иванов И.И.         5 3 4 2    
    2  Петров С.С.         3 4 5 5     
    3  Сидоров П.П.       3 3 3 4      
     

Каждая строка в этой ведомости состоит из отдельных элементов - данных разного типа:
а) порядковый номер - целое число;
б) Фамилия И.О. - символьная строка;
в) оценки - массив целых чисел.

Эти данные можно объединить в одну группу и считать записью. Запись в целом и отдельные её элементы (поля) обозначаются именами. Вве- дём например следующие обозначения: R_EX - имя всей записи; N - порядковый номер; NAME - Фамилия И.О.; RB - оценки.

Обращение к элементу записи.

Обращение к элементу (полю) записи в программе выполняется с помощью уточнённого (составного) имени. Уточнённое имя содержит имя записи и имя элемента и записывается в следующем виде:

     <имя записи>.<имя элемента (поля) записи>
Например:
     R_EX.N
     R_EX.NAME
     R_EX.RB

Декларация (объявление) записи.

Объявление записи можно производить в разделе объявления переменных VAR или с использованием раздела объявления типов пользователя TYPE.

Объявление записи в разделе объявления переменных VAR имеет следующий вид:

VAR
  <имя записи>: RECORD
                  <имя поля 1>: тип;
                  <имя поля 2>: тип;
                     . . .
                  <имя поля n>: тип
                END;

Здесь служебные слова RECORD END играют роль операторных скобок. Между ними производится описание полей записи. Вместо одного имени записи допускается использование нескольких имён, записанных через запятую.

Для представленной выше ведомости учащихся описание записи выглядит следующим образом:

VAR
     R_EX: RECORD
            N: Integer;
            NAME: String[25];
            RB: Array[1..4] of byte
           END;

Рассмотрим более универсальную форму объявления записи - с использованием раздела типов пользователя TYPE. Объявление имеет вид:

TYPE
    <имя типа>: RECORD
                  <имя поля 1>: тип;
                  <имя поля 2>: тип;
                     . . .
                  <имя поля n>: тип
                END;
VAR
     <имя записи>: <имя типа>;

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

TYPE
      SSS: RECORD
            N: Integer;
            NAME: String[25];
            RB: Array[1..4] of byte
           END;
VAR
      R_EX1, R_EX2: SSS;

Элементы (поля) записи используются в программе так-же как и обычные переменные. Над элементом (полем) записи можно выполнять действия, допустимые для данных его типа. Например:

     R_EX1.N := 2;
     R_EX2.Name := 'Сидоров П.П.';

Обращение к записи в целом, а не только к её отдельным её елементам, допускается только в операторе присваивания. При этом слева и справа от знака присваивания должны использоваться имена записей одинакового типа.

     R_EX1 := R_EX2;

Оператор присоединения.

Обращение к элементам (полям) записи происходит с помощью уточнённого имени. Оператор присоединения позволяет упростить обращение к элементу (полю) записи. Имя записи выносится в заголовок оператора присоединения, а в блоке используются только имена элементов записи. Общая форма оператора присоединения:

     WITH <имя записи> DO
       Begin
        {операторы, содержащие только
         имена элементов записи.}
       End;

Например, для рассмотренной выше записи (списка учащихся) оператор присоединения может выглядеть так:

     WITH R_EX1 DO
       Begin
        Write('Введите номер записи  ');
         Readln(N);
        Write('Введите Фамилию И.О.  ')
         Readln(Name);
       End;

Записи с вариантами.

Особой разновидностью записей являются "записи с вариантами", которые объявляются с помощью зарезервированного слова "CASE". С помощью записей с вариантами Вы можете одновременно сохранять различные структуры данных, которые имеют одну большую общую часть, и небольшие части, различные в разных структурах. Например, запись хранящая параметры геометрических фигур. Для квадрата задаётся одна сторона, для треугольника две стороны и угол между ними, для окружности её радиус. Общей частью являются координаты текущей точки x,y

AR
   MS: Record        {переменная типа запись}
         x: real;    {текущая координата x}
         y: real;    {текущая координата y}
         Case Fig: (Square, Triangle, Circle) of    {вариантная часть}
          Square: (side: real);                     {квадрат}
          Triangle: (side1, side2, angle: real);    {треугольник}
          Circle: (Radius: real);                   {окружность}
       END;
 

Вариантная часть может быть только одна и должна располагаться в конце записи. Начинается она служебным словом case, за которым следует переменная выбора варианта. За каждым возможным значением этой переменной через двоеточие в круглых скобках записываются поля данного варианта записи с указанием их типов. Круглые скобки необходимы, если даже для данного варианта записи поля отсутствуют. Перед тем, как использовать один из вариантов записи, переменной выбора варианта необходимо присвоить соответствующее (одно из возможных) значение.

Использование записей

Программы, в которых используется одна запись как самостоятельная переменная, встречаются достаточно редко. Как правило необходимо несколько записей для организации какой-либо информационной системы. Иногда с этой целью используют массивы записей. Это облегчает доступ к данным, но ограничивает объём используемой в такой системе информации. Поэтому наиболее часто используются файлы записей, которые могут хранить очень большой объём информации на протяжении длительного времени.

Пример программы

Дан файл, содержащий записи о книгах. Сведения о каждой из книг - название книги, фамилия автора, год издания. Программа определяет количество книг, год издания которых меньше или равен 1600.

 
PROGRAM EX_33_1; Type Book=record {тип - запись} Title: string[40]; {наименование книги} Author: string[40]; {автор} Entry: integer; {год издания} end; ff= file of book; {тип - файл записей} Var s: longint; {сумма искомых книг} k: book; {переменная - запись} log_f: ff; {переменная - файл записей} BEGIN s:=0; Assign(log_f,'bibliot.dat'); reset(log_f); while not eof(log_f) do begin read(log_f,k); if k.entry<=1600 then s:=s+1; end; Writeln('Книг изданных ранее 1600 года включительно ',s); END.

Контрольные вопросы.

  1. Что такое тип данных запись?
  2. Как объявляются записи?
  3. Что такое уточнённое имя?
  4. Какие операции допустимы над элементами (полями) записи?
  5. Чем отличается запись от массива?
  6. Какие операции допустимы над записью в целом?
  7. Каково назначение оператора присоединения?
  8. Что такое записи с вариантами?
  9. Как используются записи?

Задания для самостоятельного выполнения.

  1. Напишите программу, организующую хранение в файле нескольких (до 5) записей о ваших друзьях. Организуйте вывод информации по вводимому с клавиатуры номеру записи. Например:
       { Номер запис: 3
         Фамилия: Иванов
         Имя: Иван
         Отчество: Иванович
         Год рождения: 1967
         Месяц рождения: 12
         Число рождения: 18 }
  2. Напишите программу организующую хранение в файле наскольких записей (до 10) о результатах экзамена. Каждая запись содержит 3 поля: номер записи, фамилия, оценка. Организуйте вывод всей информации по форме:
        { 1 Иванов 3 }
  3. Напишите программу, организующую хранение в файле нескольких записей (до 10) о дневной температуре. Каждая запись содержит четыре поля: номер записи, число, месяц, температура. Организуйте вывод на экран всех записей, а также определите день максимальной и минимальной температуры.
  4. Организовать файл, содержащий информацию о книгах. Сведения о каждой из книг - это фамилия автора, название книги, количество страниц и год издания. Найти название книг данного автора, изданных не позднее определённого года. Фамилия автора и год вводятся с клавиатуры.
  5. Организовать файл, содержащий различные даты. Каждая дата - это число, месяц и год. Вывести на экран понажатию клавиш
    F1 - год с наименьшим номером;
    F2 - все весенние даты;
    F3 - самую позднюю дату;
    F10 - выход.
  6. Организовать файл, который содержит номера телефонов сотрудников учреждения: указываются фамилия, инициалы и номер телефона. Организовать поиск телефона сотрудника по его фамилии и инициалам.
  7. Организовать файл, содержащий информацию об экспортируемых товарах: указываются наименование товара, страна, импортирующая товар, и объём поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и общий объём его экспорта.

НАЗАД                    ДАЛЕЕ  

 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz