Турнирная таблица соревнований - Pascal
Формулировка задачи:
Здравствуйте, нужна помощь, не могу понять, объяснить никто не может.
Турнирная таблица соревнований представлена квадратной матрицей A, каждый элемент которой aij есть число голов, забитых i-ой командой в ворота j-ой команды. По диагонали расположить место каждой команды (по числу побед за вычетом числа поражений; в случае равенства – по разности забитых и пропущенных голов).
Буду благодарен.
Решение задачи: «Турнирная таблица соревнований»
textual
Листинг программы
type rez=record z, //забито p, //пропущено k,//занятое место pb, //победы-поражения r:integer;//разность заб.-проп. end; var a:array[1..10,1..10]of rez; m:set of byte; n,i,j,imx:byte; begin randomize; repeat write('Количество команд от 2 до 10 n='); readln(n); until n in [2..10]; //формирование таблицы результатов for i:=2 to n do for j:=1 to i-1 do begin a[i,j].z:=random(4); a[i,j].p:=random(4); a[j,i].z:=a[i,j].p; a[j,i].p:=a[i,j].z; end; for i:=1 to n do begin //главную дивгональ используем как дополнительный массив a[i,i].pb:=0;//победы-поражения a[i,i].r:=0; //разность забитыхи проппущенных for j:=1 to n do if j<>i then begin inc(a[i,i].r,a[i,j].z-a[i,j].p); if a[i,j].z>a[i,j].p then inc(a[i,i].pb) else if a[i,j].z<a[i,j].p then dec(a[i,i].pb) end; end; //выбираем максимальные результаты для n команд for i:=1 to n do begin imx:=1; for j:=1 to n do if (a[j,j].pb>a[imx,imx].pb)or((a[j,j].pb=a[imx,imx].pb)and(a[j,j].r>a[imx,imx].r)) then imx:=j; a[imx,imx].k:=i; a[imx,imx].pb:=-n-1; end; //выводим таблицу в требуемом формате for i:=1 to n do begin for j:=1 to n do begin if j=i then write('[',a[i,i].k:2,' ]') else write(a[i,j].z,'-',a[i,j].p,' '); end; writeln; end; end.
Объяснение кода листинга программы
- Создается тип данных
rez
, который представляет собой запись с полямиz
,p
,k
,pb
иr
. - Создается переменная
a
типаarray[1..10,1..10]of rez
, которая представляет собой массив 10x10, где каждый элемент является записьюrez
. - Создается переменная
m
типаset of byte
, которая представляет собой множество байтов. - Создаются переменные
n
,i
,j
иimx
типаbyte
, которые представляют собой байты. - Используется функция
randomize
для инициализации генератора случайных чисел. - Запрашивается у пользователя количество команд от 2 до 10.
- Формируется таблица результатов. Для каждой команды формируется строка таблицы, где каждая ячейка представляет собой значение поля
z
,p
,k
,pb
илиr
соответствующей записиrez
. - Выбирается максимальная строка таблицы для каждой команды. Для этого сравниваются значения полей
pb
иr
всех строк таблицы. Если значение поляpb
больше или равно значению поляr
, то строка считается максимальной. Если значения равны, то выбирается строка с большим значением поляr
. - Выводится таблица в требуемом формате. Для каждой команды выводится значение поля
z
,-
, значение поляp
, пробел и значение поляr
. Если команда является текущей, то выводится[
, значение поляk
,]
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д