Песни о Паскале | страница 172




>{P_41_3 – Футбольный чемпионат }

>const CSize = 16; { количество команд }

>      { объявление типов для массивов }

>type TAces = array [1..CSize] of integer; { тип для очков }

>      TNames = array [1..CSize] of string; { тип для названий }

>var Aces : TAces; { набранные очки }

>      Names: TNames; { названия команд }

>      { Процедура "пузырьковой" сортировки очков с именами команд }

>procedure BubbleSort2(var arg1: TAces; var arg2: TNames);

>var i, j, t: Integer;

>      s: string;

>begin

>for i:= 1 to CSize-1 do { внешний цикл }

>      for j:= 1 to CSize-i do { внутренний цикл }

>      { если текущий элемент меньше следующего …}

>      if arg1[j] < arg1[j+1] then begin

>      { то меняем местами соседние элементы }

>      t:= arg1[j];       { временно запоминаем }

>      arg1[j]:= arg1[j+1]; { следующий -> в текущий }

>      arg1[j+1]:= t;       { текущий -> в следующий }

>      { меняем местами и названия команд }

>      s:= arg2[j];       { временно запоминаем }

>      arg2[j]:= arg2[j+1]; { следующий -> в текущий }

>      arg2[j+1]:= s;       { текущий -> в следующий }

>      end;

>end;

>var i: integer;

>begin       { главная программа }

>{ Вводим названия команд и набранные очки }

>for i:=1 to CSize do begin

>      Write('Название команды: '); Readln(Names[i]);

>      Write('Набранные очки: '); Readln(Aces[i]);

>end;

>BubbleSort2(Aces, Names); { сортируем }

>Writeln('Итоги чемпионата:');

>Writeln('Место       Команда       Очки');

>for i:=1 to CSize do

>      Writeln(i:3,' ':3, Names[i], Aces[i]:20-Length(Names[i]));

>Readln;

>end.


Спецификатор ширины поля в операторе печати задан выражением.


>      20 – Length(Names[i])


Здесь перед колонкой с очками будет тем больше пробелов, чем короче название команды, – так выравниваются колонки таблицы.

Для проверки программы я ввел наобум имена четырех команд нашего чемпионата и очки, якобы заработанные ими (количество команд CSize установил равным 4), и вот что у меня вышло.


>Итоги чемпионата:

>Место Команда       Очки

>1 Локомотив       55

>2 Крылья Советов 54

>3 Спартак       47

>4 Зенит       43


Болельщики вправе оспорить результат, но я им доволен.

Итоги

• Расположение данных в порядке возрастания или убывания называется сортировкой.

• Простейший алгоритм сортировки массива – «пузырьковая» сортировка. Она состоит в сравнении и перестановке соседних элементов массива, при этом организуются два вложенных цикла.

А слабо?

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