Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

12.13. Записи

На вооружении флота 100 подводных лодок. На флоте приходится решать задачи такого типа: 1) перечислить названия лодок, имеющих скорость, превышающую скорость вражеской подводной лодки "Шредер"; 2) подсчитать, сколько лодок имеют на вооружении больше 10 торпед и т. д. Чтобы ускорить решение таких задач, адмирал приказал занести в компьютер сведения обо всех лодках, включая вражеские лодки Шредер и Рокстеди, а именно их названия; скорость и число торпед, находящихся на вооружении.

Отвести место в оперативной памяти под указанную информацию о 102 лодках можно двумя способами: 1) с помощью массивов, 2) с помощью записей.

Рассмотрим программу, использующую первый способ. В каждом массиве будет 102 элемента, причем элементы 101 и 102 отведены под лодки противника.

VAR nazvanie :array[1..102] of String; {Место под 102 названия}

skorost :array[1..102] of Real; {Место под 102 скорости}

torped :array[1..102] of Byte; {Место под 102 количества торпед}

i :Integer;

BEGIN

{Здесь каким-нибудь способом заносим в отведенное место всю информацию,

например, присвоением - nаzvanie[1]:='Щука'... или загрузкой из файла}

{А теперь решим первую из двух задач:}

for i:=1 to 100 do if skorost[i]>skorost[101] then WriteLn(nazvanie[i])

END.

B памяти компьютера информация размещается в том порядке, в котором она встречается в описаниях:

Ячейки для информации

Информация

nazvanie[l]

Щука

nazvanie[2]

Дельфин

...

...

nazvanie[l0l]

Шредер

nazvanie[102]

Рокстеди

skorost[l]

26

skorost[2]

24

...

...

skorost[l0l]

20

skorost[102]

18

torped[l]

Б

torped[2]

10

...

...

torped[101]

15

torped[102]

22

I

?

Вы видите, что данные об одной лодке разбросаны по памяти.

Рассмотрим второй способ. Иногда бывает удобно, чтобы данные, касающиеся одной лодки, хранились в памяти рядом, вот так:

Ячейки для информации

Информация

lodka[l].nazvanie

Щука

lodka[l].skorost

26

lodka[l].torped

6

lodka[2].nazvanie

Дельфин

lodka[2].skorost

14

lodka[2].torped

10

...

...

vr .nazvanie

Шредер

vr .skorost

20

vr .torped

15

prot .nazvanie

Рокстэди

prot .skorost

18

prot .torped

22

Выстроенную подобным образом информацию в памяти компьютера часто называют базой данных.

Сами по себе массивы не позволяют хранить информацию в таком порядке, для этого нужно использовать записи. Запись - это Набор данных (полей) различных типов, касающихся одного объекта. Например, запись, касающаяся нашей первой лодки, - это набор трех полей: названия - Щука (тип String), скорости - 26 (тип Real), количества торпед - 6 (тип Byte). Точка отделяет имя поля от обозначения записи, содержащей это поле.

Напомним, что в массиве разрешается хранить данные только одного типа.

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

TYPE podlodka= record

nazvanie :String;

skorost :Real;

torped :Byte;

end;

Тип определен, но место в памяти пока не отведено. Здесь нам, хочешь не хочешь, придется воспользоваться массивом. При помощи VAR отведем место под массив из 100 записей для, наших подлодок и отдельное место под две записи для вражеских подлодок. Массиву придумаем имя lodka.

VAR lodka :array[1..100] of podlodka;