Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal.doc
Скачиваний:
71
Добавлен:
10.06.2015
Размер:
1.28 Mб
Скачать

Пример программы работы с записями

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

Для описания сведений о компьютерных программах в разделе типов введем тип Prog_Type –запись следующей структуры:

Prog_Type=Record

Title:String[50];

Author:String[50];

Entry:Integer;

Firma:String[40];

End;

где Title- поле для записи названия программы, Author-поле для записи фамилии автора, Entry- поле для записи года разработки, Firma-поле для записи фирмы-разработчика.

В разделе описания переменных введем массив Prog_Katalog из 10 записей типа Prog_Type.Переменную Num_Array, принимающую значения от 1до 10 введем для указания на порядковый номер записи в массиве Prog_Katalog. Для критерия поиска введем переменную Author строкового типа. Результат поиска записывается в переменную логического типа Yes_Prog.

В целом текст программы может выглядеть так:

Program Katalog;

Type

Prog_Type=record

Title:string[50];

Author:String[50];

Entry:Integer;

Firma:String[40];

end;

Var

Prog_Katalog:Array[1..10] of Prog_Type;

Num_Array:1..10;

Author:String[50];

Yes_Prog:Boolean;

Procedure Input_Data;

Begin

Writeln('Введите данные о ',Num_Array,'-й программе:');

With Prog_Katalog[Num_Array] do

begin

Write('Название программы: ');

Readln(Title);

Write('Автор:');

Readln(Author);

Write('Год разработки:');

Readln(Entry);

Write('Фирма:');

Readln(Firma);

Writeln;

end;

end;

Procedure Write_Data(Num:Integer);

begin

Writeln('Программа № ',Num);

With Prog_Katalog[Num_Array] do

begin

Writeln('Название:',Title);

Writeln('Фамилия автора:',Author);

Writeln('Год разработки:',Entry);

Writeln('Фирма:',Firma);

end;

end;

{Основная программа}

Begin

{У пользователя запрашивается 3 раза ввод данных о программах}

for Num_Array:=1 to 3 do

Input_Data;

Writeln;

Writeln('Поиск информации(программы) по фамилии автора: ');

Writeln;

Write('Введите фамилия автора: ');

Readln(Author);

Yes_Prog:=False;

for Num_array:=1 to 10 do

if Prog_Katalog[Num_Array].Author=Author then

begin

Write_Data(Num_Array);

Yes_Prog:=True;

end;

if not Yes_Prog then Write('Нет программ данного автора ',Author);

end.

Порядок выполнения работы

  1. Изучить теоретические сведения по теме “ Работа с записями”.

  2. Получить у преподавателя индивидуальное задание.

  3. Разработать программу для работы с записями согласно полученному заданию.

  4. Показать работающую программу преподавателю.

  5. Ответить на контрольные вопросы.

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

  1. Понятие записи. Структура объявления типа записи.

  2. Обращение к значению поля. Составные имена.

  3. Присвоение полям записи значений. Массивы записей.

  4. Пример программы с использованием записей.

Лабораторная работа № 26

Написание программы на языке Паскаль с использованием записей с вариантами

Цель работы: формирование знаний и умений по работе с записями с вариантами. Приобретение навыков работы с вариантными полями.

Краткие теоретические сведения

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

Вариантная часть формируется с помощью оператора Case. Он задает особое поле записи-поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком, задает вариант записи и называется константой выбора.

Формат:

Type

<имя типа> = Record

Case <поле признака>: <имя типа> of

<константа выбора 1>: (поле, …: тип);

<константа выбора n>: (поле, …: тип);

End;

Компоненты каждого варианта (идентификаторы полей и их типы) заключаются в круглые скобки. У части Case нет отдельного end. Одно слово end заканчивает всю конструкцию записи с вариантами. Количество полей каждого из вариантов не ограничено. Объем памяти, необходимый для записи с вариантами, складывается из объемов полей фиксированной части и максимального по объему поля переменной части.

Пример:

Type

Rec=Record

Number:Byte;

Code:Integer;

Case Flag :Boolean of

True:(Proce1:Integer);

False:(Price2:Real);

End;

Var

PRec: Rec;

В данном примере была объявлена запись с именем Rec, у которой поля Number и Code расположены в фиксированной части записи, они доступны в программе в любой текущий момент независимо от значения поля признака. Поле Price 1 может использоваться только в том случае, если значение поля признака Flag равно True. Поле Price 2 доступно в противоположном случае, т.е. если значение Flag равно False.

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

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

  • запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце записи

  • если поле, соответствующее какой-либо метке, является пустым, то оно записывается следующим образом: <метка>: ();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]