Материалы для преподавания темы "Turbo Pascal". Комбинированный тип данных

Разделы: Информатика


Комплект документов содержит следующие приложения:

Программы на языке Pascal из папки “Программы” можно использовать в качестве примеров при объяснении способов решения задач.

Записи

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

Для работы с группой различных по типу данных, в системе программирования Turbo Pascal применяют тип данных "запись".

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

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

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

Каждая строка в этой ведомости состоит из отдельных элементов - данных разного типа:

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

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

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

<имя записи>.<имя элемента (поля) записи>, например:

R_EX.N

R_EX.NAME

R_EX.R

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

Объявление записи можно производить в разделе объявления переменных 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.

VAR

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, за которым следует переменная выбора варианта. За каждым возможным значением этой переменной через двоеточие в круглых скобках записываются поля данного варианта записи с указанием их типов. Круглые скобки необходимы, если даже для данного варианта записи поля отсутствуют.

Перед тем, как использовать один из вариантов записи, переменной выбора варианта необходимо присвоить соответствующее (одно из возможных) значение.

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

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

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

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

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

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

PROGRAM EX_3;

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<=1960 then s:=s+1;

end;

Writeln('Книг изданных ранее 1960 года включительно ',s);

END.

Вопросы для закрепления

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

Задания

1. Создан список песен, содержащий название, стиль и длительность песен.

program sp_pesen;

const n=2;  {количество песен}

type pesni=record  {описание записи}

naz:string[10];

stil:string[10];

time:real;

end;

var m:array[1..n] of pesni; {массив песен}

i:1..n;

begin

{формирование записей}

for i:=1 to n do

with m[i] do

begin

write('Введите название песни ',i,' ');readln(naz);

write('Введите жанр песни ');readln(stil);

write('Введите длительность песни в минутах ');readln(time);

writeln;

end;

{вывод результата}

writeln('название стиль длительность');

for i:=1 to n do

with m[i] do

if time >3.5 then

writeln(naz:6,stil:8,time:9:1);

writeln;

end.

а) Какие песни данного списка будут выведены на экран?

b) Переделайте данную программу так, чтобы

  • на экран выводились названия песен в стиле Rap;
  • в запись было добавлено имя исполнителя;
  • из записи было исключено поле, описывающее стиль;
  • на экран выводились названия песен длительностью от 2 до 3 минут исполнителя Sting.

2. Создайте базу данных о 5 автобусах предприятия, содержащую поля:

  • марка автомобиля;
  • фамилия водителя;
  • год выпуска.

Выведите список

a) автомобилей, год выпуска которых меньше 2000;

b) икарусов.

3. Создайте базу данных о 5 наименованиях товаров, содержащую поля:

  • наименование;
  • количество;
  • дата изготовления

Выведите список кукол, количество которых больше 100;

b) добавьте в базу данные о цене товаров.

4. Напишите программу, организующую хранение в файле нескольких (до 5) записей о ваших друзьях. Организуйте вывод информации по вводимому с клавиатуры номеру записи. Например:

Номер записи: 3 Фамилия: Золотарёв
Имя: Иван Отчество: Иванович
Год рождения: 1967 Месяц рождения: 12
Число рождения: 18

5. Напишите программу, организующую хранение в файле 4 записей о результатах экзамена. Каждая запись содержит 3 поля: номер записи, фамилия, оценка. Организуйте вывод всей информации по форме:

1 Иванов 3