Внутрь каждого элемента массива Champ подселены ещё два поля, осталось лишь организовать ввод и вывод этих данных. Но к процедуре сортировки BubbleSort прикасаться уже не надо, – она не изменится! Поэтому в показанной ниже программе «P_50_2» я не стал её повторять. Не стал я заниматься и обработкой поля mFails – количество проигрышей. Уверен, что вы и без меня справитесь с этим.
{ P_59_2 – Футбольный чемпионат (версия 3) }
const CSize = 4; { количество команд }
{ объявление типов }
type TTeam = record
mAces : integer; { набранные очки }
mName : string; { названия команд }
mWins : integer; { количество выигрышей }
mFails: integer; { количество проигрышей }
end;
TChamp = array [1..CSize] of TTeam; { тип для массива команд }
var Champ : TChamp; { массив команд }
{ Процедура пузырьковой сортировки не изменилась! }
procedure BubbleSort(var arg: TChamp);
...
end;
var i: integer;
begin {--- Главная программа ---}
{ Вводим названия команд, набранные очки и прочие данные }
for i:=1 to CSize do begin
Write('Название команды: '); Readln(Champ[i].mName);
Write('Набранные очки: '); Readln(Champ[i].mAces);
Write('Выигрышей: '); Readln(Champ[i].mWins);
end;
{ сортируем }
BubbleSort(Champ);
{ Выводим результаты }
Writeln('Итоги чемпионата:');
Writeln('Место Команда Очки Выигрышей');
for i:=1 to CSize do begin
Write(i:3,' ':3, Champ[i].mName,
Champ[i].mAces:(20-Length(Champ[i].mName) ));
Writeln(Champ[i].mWins:8);
end;
Readln;
end.
Напоследок отвечу на один вероятный вопрос. Поля записи объявлены мною в некотором порядке, существенно ли это? Ничуть! Поля могут объявляться в любой последовательности, – это не влияет на их обработку.
• Для соединения разнородных, но связанных общим смыслом данных используют записи.
• Запись заключается в пару ключевых слов RECORD-END, между которыми перечисляются имена и типы полей, входящих в запись.
• На основе записей могут быть построены как одиночные переменные, так и массивы.
• Доступ к полям записей выполняется через имя переменной и имя поля, разделяемые точкой.
А) Дополните программу «P_50_2» с тем, чтобы обработать все поля записи.
Б) Предложите структуру записи для полицейской базы данных. Какие данные следует, по вашему мнению, включить в неё?
В) Напишите программу для полицейской базы данных с применением записей. Обеспечьте ввод данных из файла, поиск по номеру и распечатку полей найденной записи.
Г) В текстовом файле тремя колонками представлены сведения о школьниках: фамилия, рост и вес. Ваша программа должна преобразовать его в три других файла, где эти же сведения отсортированы соответственно: 1) по фамилиям, 2) по росту и 3) по весу учеников.
Д) Домино. В этой игре используют 28 костяшек, каждая из которых содержит пару чисел от 0 до 6. Например: 0:0, 1:5, 6:6. Представьте костяшку записью, а игральный набор – массивом этих записей. Заполните массив костяшек и распечатайте его. «Смешайте» костяшки случайным образом и вновь распечатайте массив. Для удобства направьте распечатку в текстовый файл.
Е) Карты. Колода содержит 36 карт четырех мастей: трефы и пики – черные, а бубны и червы – красные. Относительная сила карты определяется числом от 6 до 14. Представьте карту записью, содержащей её масть, цвет и силу. Представьте колоду массивом записей, сформируйте полную колоду и распечатайте в текстовый файл. «Перетасуйте» колоду и вновь распечатайте в файл. При распечатке силу карт от 11 до 14 напечатайте их названиями: валет, дама, король, туз.
Глава 51
Указатели в море памяти
Птице в небе хорошо, а рыбе – в реке. Программы «живут» в оперативной памяти, – дайте им почуять себя там, как рыба в воде, и они обретут беспредельную мощь! Следующие главы продвинут нас к этой цели.