Турнирная таблица соревнований - 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.

Объяснение кода листинга программы

  1. Создается тип данных rez, который представляет собой запись с полями z, p, k, pb и r.
  2. Создается переменная a типа array[1..10,1..10]of rez, которая представляет собой массив 10x10, где каждый элемент является записью rez.
  3. Создается переменная m типа set of byte, которая представляет собой множество байтов.
  4. Создаются переменные n, i, j и imx типа byte, которые представляют собой байты.
  5. Используется функция randomize для инициализации генератора случайных чисел.
  6. Запрашивается у пользователя количество команд от 2 до 10.
  7. Формируется таблица результатов. Для каждой команды формируется строка таблицы, где каждая ячейка представляет собой значение поля z, p, k, pb или r соответствующей записи rez.
  8. Выбирается максимальная строка таблицы для каждой команды. Для этого сравниваются значения полей pb и r всех строк таблицы. Если значение поля pb больше или равно значению поля r, то строка считается максимальной. Если значения равны, то выбирается строка с большим значением поля r.
  9. Выводится таблица в требуемом формате. Для каждой команды выводится значение поля z, -, значение поля p, пробел и значение поля r. Если команда является текущей, то выводится [, значение поля k, ].
  10. Конец программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы