Чтение онлайн

на главную - закладки

Жанры

Шрифт:

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

if arg[j].mAces < arg[j+1].mAces then begin

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

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('Название команды: '); Readln(Champ[i].mName);

Write('Набранные

очки: '); Readln(Champ[i].mAces);

end;

BubbleSort(Champ); { сортируем }

{ Выводим результаты }

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

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

for i:=1 to CSize do begin

Writeln(i:3,' ':3, Champ[i].mName, Champ[i].mAces:(20-Length(Champ[i].mName)) );

end;

Readln;

end.

Процедура сортировки заметно упростилась. Ещё бы! Ведь теперь мы работаем с одним массивом, а не с двумя. Для временного хранения элемента массива (при обмене) в процедуре объявлена переменная типа TTeam. А в прежнем решении для этого нужны были две переменные. Прочие изменения в программе невелики, хотя и существенны: вместо обращений к элементам массива мы обращаемся к полям этих элементов (эти места выделены).

Напомню смысл выражения для ширины поля при печати набранных очков.

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);

{ Выводим результаты }

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) по весу учеников.

Поделиться:
Популярные книги

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Черный дембель. Часть 4

Федин Андрей Анатольевич
4. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 4

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Санек 4

Седой Василий
4. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 4

Душелов. Том 4

Faded Emory
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Душелов. Том 4

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

И вспыхнет пламя

Коллинз Сьюзен
2. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.44
рейтинг книги
И вспыхнет пламя

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4