Впрочем, потребуется ещё одно мелкое изменение. Если при сортировке золотых слитков мы добивались возрастающего порядка, то теперь нужен противоположный, убывающий порядок сортировки. Как его добиться? Очень просто: изменим условие сравнения соседних элементов на противоположное. Вот собственно и все, осталось лишь показать программу «P_41_3».
{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
Болельщики вправе оспорить результат, но я им доволен.
Итоги
• Расположение данных в порядке возрастания или убывания называется сортировкой.
• Простейший алгоритм сортировки массива – «пузырьковая» сортировка. Она состоит в сравнении и перестановке соседних элементов массива, при этом организуются два вложенных цикла.
А слабо?
А) Напишите программу для сортировки фамилий учеников в алфавитном порядке (фамилии берутся из файла). Программа должна сортировать их как по возрастанию, так и по убыванию фамилий, – на выбор пользователя.
Б) Придумайте самый несправедливый способ пиратской дележки по два слитка и напишите программу для неё.
В) Напишите программу для дележки случайным образом (как это собирались сделать пираты). Насколько отличаются ваши результаты от справедливого способа?
Г) Напишите функцию, проверяющую, упорядочен ли числовой массив. Функция должна вернуть TRUE, если массив упорядочен по возрастанию. Массив внутрь функции передайте параметром по ссылке.
Глава 42
Кто ищет, тот всегда найдет
Все кругом ищут что-то: Карабас-Барабас – золотой ключик, Лиса с Котом – дураков, а Буратино – Страну Дураков. И я ищу: то ключи в карманах, то тапочки под диваном. А сколько всего таится в Интернете! Благо, искать информацию там помогают компьютеры.
Где эта улица, где этот дом?
В 40-й главе мы смастерили программу для поиска угнанных автомобилей. Испытаем её вон на той легковушке. Вводим номер машины и… оп! Вот так удача! Автомобильчик-то в розыске, – надо вернуть его владельцу. Однако, кто он? Где живет? А телефончик не подскажете? К сожалению, в нашей базе данных этих сведений нет, – её следует дополнить.
Читать дальше