20-Length(Champ[i].mName)
Здесь учет длины названия команды обеспечивает ровную печать столбцов, стоящих правее.
Надеюсь, вы оценили приятный вкус структурных данных. Так продлим удовольствие, назначив после второго тайма дополнительное время. Соорудим третью версию программы, способную воспринимать и другие данные о командах, например, количество выигрышей и проигрышей. Для хранения этих новых сведений, очевидно, нужна память, то есть переменные. Но теперь обойдёмся без дополнительных массивов: объявим внутри записи TTeam ещё пару полей.
type TTeam = record
mAces : integer; { набранные очки }
mName : string; { названия команд }
mWins : integer; { количество выигрышей }
mFails: integer; { количество проигрышей }
end;
Внутрь каждого элемента массива 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);
{ Выводим результаты }