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

Лабораторная работа 38. Работа с типизированными файлами - 2

1. Теория : тип данных «запись»

Замечательно, если структура данных позволяет обойтись Вам лишь числами, массивами или строками. А как быть в ситуации, если данные "смешанные"? Например, в предыдущей задаче о сотрудниках фирмы структура записи может иметь другой вид:

  • фамилия сотрудника;

  • имя;

  • отчество;

  • занимаемая должность;

  • индекс коммуникабельности;

  • индекс авторитетности;

  • уровень интеллекта (натуральное число).

Следует подчеркнуть, что реальные записи файлов чаще всего являются смешанными (т.е. содержат тексты и разнотипные числа). Организация этих данных в массив невозможна: ведь массив представляет собой упорядоченную последовательность ОДНОТИПНЫХ данных.

В языке Pascal существует тип данных "запись", который напоминает массив по своей организации, но элементом этого типа может быть любой заданный Вами тип данных. Этот тип определяется конструкцией

Record

Поле1: ТипПоля1;

Поле2: ТипПоля2;

...

ПолеN: ТипПоляN;

end;

Например:

Type Boy=Record

name : string[20];

year : 0..200;

length : 40..300;

eyes : black..White;

day : byte;

month : byte

end;

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

T ype Boy=Record

name : string[20];

year : 0..200;

length : 40..300;

eyes : black..White;

d ay, month: byte;

end;

После объявления типа "запись" его можно использовать для описания переменных. Например:

var boyscout : boy;

Так как ИМЕНА ПОЛЕЙ скрыты внутри описанной структуры записи, они (имена) могут повторяться в различных записях. Например:

Type point = Record x, y :integer end;

Graphpoint = Record x, y, color : integer end;

var coord : point;

col : Graphpoint;

...

В программе обращение к элементам записи (реально записью является переменная, описанная типом "за­пись") осуществляется следующим образом:

<имя_переменной-записи>.<имя_поля>.

Например, для описанных выше переменных boy­scout, coord и col это может выглядеть следующим образом:

boyscout .name:='Козельский';

boyscout .year:=21;

...

coord .x:=12;

col .x:=120;

coord .y:=col.x*2;

writeLn(coord .y); ...

С записью целиком можно выполнять только операции присваивания (можно переменной "запись" присвоить значение переменной "запись" аналогичного типа), чтения и запись в типизированный файл. Кроме этого, введен оператор присоединения With. Этот оператор обес­печивает возможность использовать только имена полей. Общий вид оператора:

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

Например: ...

With boyscout do

begin

name:='Козельский';

year:=21

end;

2. Практика

Задание 1

Скопируйте в свой каталог файл f_ntx4.pas.

Задание 2

Запустите среду Turbo Pascal. Загрузите файл f_ntx4.pas. Затем:

а) разберитесь в тексте программы;

б) сократите процедуру ClearWindow;

в) модернизируйте программу так, чтобы вместо ReadLn в программе использовался Ваш Строковый Редактор;

г) модернизируйте программу: в структуру записи добавьте еще одно важное поле: количество единиц товара. Программа должна вводить все поля;

д) введите в файл данных информацию о 15-20 видах товаров. Это понадобится для решения следующих заданий.

Задание 3

Составьте программу, которая позволит вывести на экран дисплея следующую таблицу (информация берется из файла biss.dat, созданного программой из задания 2):

Товары, имеющиеся на складе фирмы “Людвиг”

Назва­ние товара

Страна - производи­тель

Опто­вая цена единицы товара

Кол-во единиц товара

Вес еди­ницы това­ра

Срок реали­зации

Общая стои­мость

Pentium - 120

Украина

$700

1000

6

1

700000

...

Дискеты Zip

USA

$14

100000

0,05

1

1400000

Итого:

$38000000

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

Задание 4

Используя данные из файла biss.dat, определите ожидаемый доход фирмы после реализации товара. Расчеты производятся следующим образом:

а) розничная торговля увеличивает цену товара на 20% (оптовая цена - это цена, по которой фирма приобрела товар);

б) из полученного дохода 40% уходит на закупку новых товаров (естественно, вместе с деньгами, затраченными ранее на товар);

в) из оставшихся "доходных" денег 25% уходит на зарплату и технические затраты (транспорт, упаковка, реклама);

г) из этой же "доходной" части платят налоги 60% ;

д) оставшиеся деньги и есть "чистый" доход.

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