Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Паскаль.doc
Скачиваний:
127
Добавлен:
30.04.2015
Размер:
661.5 Кб
Скачать

Тема 12. Тип данных запись (Record) Краткое изложение теоретического материала

Тип данных запись позволяет объединять разнотипные данные.

Запись – это совокупность компонентов разного типа. Компонент записи называется ее полем. Каждое поле имеет уникальное имя.

Обработка записей в языке Турбо Паскаль:

  1. Описание нового типа данных - запись:

    1. Описание типа:

Type <имя типа> = Record

<имя поля 1> : <тип поля 1>;

<имя поля N> : <тип поля N>

End;

Если несколько полей имеют одинаковый тип, их имена можно перечислить через запятую.

    1. Описание переменной типа запись:

Var <имя переменной> : <имя описанного выше типа>;

Например:

Type Book = Record { тип данных книга состоит из трех полей }

Name, Author : String [ 30 ]; { название и автор }

Year : Integer { год издания }

End;

Var Bk : Book; { Переменная Bk – запись с тремя полями }

  1. Обращение к полям записи:

Для обращения к отдельному полю записи следует сначала указать имя переменной типа запись, затем через точку имя поля. Например: Bk.Name.

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

Write (‘Введите название книги ’); Readln (Bk.Name);

Write (‘Введите фамилию автора ’); Readln (Bk.Author);

Write (‘Введите год издания книги ’); Readln (Bk.Year);

При многочисленных обращениях к полям одной и той же записи можно использовать оператор присоединения With.

With <имя переменной-записи> Do

<составной оператор>;

Оператор With позволяет «вынести за скобки» имя переменной-записи. Приведенный выше фрагмент программы можно переписать с использованием оператора присоединения:

With Bk Do

Begin

Write (‘Введите название книги ’); Readln (Name);

Write (‘Введите фамилию автора ’); Readln (Author);

Write (‘Введите год издания книги ’); Readln (Year)

End;

Примеры решаемых задач

Пример 1. Составить программу, которая обрабатывает информацию о студентах (фамилия, номер группы, рейтинг):

а) вводит такую информацию;

б) выводит список студентов заданной группы;

в) выводит список студентов в порядке убывания рейтинга.

Пояснение: Для хранения данных будем использовать массив записей с информацией о студентах. (При решении этой задачи можно и не использовать тип запись, а написать программу, обрабатывающую три массива. Без использования типа Record трудно обойтись при обработке файлов – см. следующую тему.)

Программа:

Program Record_Student;

Uses Crt;

Const N = 100; { N - максимальное количество студентов }

Type Stud = Record {данные об одном студенте–запись из трех полей:}

Name : String; { фамилия}

Group : Integer; { номер группы}

Rating : Real { рейтинг }

End;

Students = Array [1..N] Of Stud; { данные обо всех студентах - }

{ это массив записей }

Var St : Students; { список студентов – массив записей }

K, M, L, Gr : Integer;

Pst : Stud; { промежуточная переменная, необходимая для того, }

{чтобы менять местами два элемента массива при его сортировке}

Begin

ClrScr;

{ а) Ввод данных о студентах }

Write (‘Сколько студентов ’);

Readln (M);

For K := 1 To M Do

With St [K] Do { вводим все поля записи St[K] }

Begin

Write (‘Введите фамилию ’,K,’ студента ‘);

Readln (Name);

Write (‘Введите номер его группы ‘);

Readln (Group);

Write (‘Введите его рейтинг ‘);

Readln (Rating)

End;

{ б) Вывод списка заданной группы }

Write (‘Список какой группы требуется ’);

Readln (Gr);

Writeln(‘Список группы № ‘,Gr);

For K := 1 To M Do { просматриваем весь список }

With St [K] Do

If Group = Gr { если номер группы студента равен требуемому}

Then Writeln (Name:20); { то печатаем его фамилию }

{ в) Сортировка студентов по их рейтингу }

For K := 1 To M – 1 Do

For L := K + 1 To M Do

If St[L]. Rating > St[K]. Rating

Then Begin

Pst:= St[L];

St[L]:=St[K];

St[K]:=Pst

End;

{ вывод отсортированного списка}

Writeln (‘Список студентов в порядке убывания рейтинга:’);

For K := 1 To M Do

Writeln (Name:20, Group:5, Rating:7:2);

Readln

End.