После всего сказанного рассмотрим программу «P_50_1» в целом.
{ P_50_1 – Футбольный чемпионат (версия 2) }
const CSize = 4; { количество команд }
{ объявление типов }
type TTeam = record
mAces : integer; { набранные очки }
mName : string; { названия команд }
end;
TChamp = array [1..CSize] of TTeam; { тип для массива команд }
var Champ : TChamp; { массив команд }
{ Процедура "пузырьковой" сортировки команд }
procedure BubbleSort(var arg: TChamp);
var i, j : Integer;
begin
for i:= 1 to CSize-1 do { внешний цикл }
for j:= 1 to CSize-i do { внутренний цикл }
{ если текущий элемент меньше следующего …}
if
{ то меняем местами соседние элементы }
t:= arg[j]; { временно запоминаем }
arg[j]:= arg[j+1]; { следующий -> в текущий }
arg[j+1]:= t; { текущий -> в следующий }
end;
end;
var i: integer;
begin {--- Главная программа ---}
{ Вводим названия команд и набранные очки }
for i:=1 to CSize do begin
Write('Название команды: ');
Write('Набранные очки: ');
end;
BubbleSort(Champ); { сортируем }
{ Выводим результаты }
Writeln('Итоги чемпионата:');
Writeln('Место Команда Очки');
for i:=1 to CSize do begin
Writeln(i:3,' ':3, Champ[i].mName, Champ[i].mAces:
end;
Readln;
end.
Процедура сортировки заметно упростилась. Ещё бы! Ведь теперь мы работаем с одним массивом, а не с двумя. Для временного хранения элемента массива (при обмене) в процедуре объявлена переменная типа TTeam. А в прежнем решении для этого нужны были две переменные. Прочие изменения в программе невелики, хотя и существенны: вместо обращений к элементам массива мы обращаемся к полям этих элементов (эти места выделены).
Напомню смысл выражения для ширины поля при печати набранных очков.