Читаем Песни о Паскале полностью

Второй из объявляемых типов данных – TChamp (Champ – «чемпионат») – представляет собой массив футбольных команд.


      TChamp = array [1..CSize] of TTeam; { тип для массива команд }


Стало быть, каждый элемент этого типа содержит внутри себя два поля: число mAces и строку mName. Теперь можно объявить и переменную типа TChamp, то есть, массив команд.


var Champ : TChamp; { массив команд }


Доступ к элементам массива Champ осуществляется так:


Champ[i]       – i–й элемент массива, то есть i–я команда (тип TTeam)

Champ[i].mAces – количество набранных очков i–й командой

Champ[i].mName – название i–й команды


После всего сказанного рассмотрим программу «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;

      t : TTeam; { для временного хранения при обмене }

begin

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

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

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

      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;


Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы