Конспект лекций по программированию для начинающих. Гладков В.П. - 192 стр.

UptoLike

Составители: 

194
end.
Пример 11.56. Чтобы выявить самого драчливого разбойника, Али-Баба провел
турнир, во время которого каждый его разбойник дрался с каждым из оставшихся.
За победу присваивалось 7 очков, за ничью - 5, за поражение - 2. Результаты
турнира сведены в таблицу. Написать программу, определяющую победителя
турнира.
Решение. Результаты турнира удобно представить в виде двумерного массива.
По диагонали этого массива запишем нули, так как сам с собой разбойник не
дерется. Если Али выиграл у Гасана, то в строке Али на пересечении со столбцом
Гасан появится 7, а в строке Гасан на пересечении со столбцом Али появится 2.
Нетрудно заметить, что
клетки, содержащие результаты одного поединка,
расположены в клетках, симметричных относительно главной диагонали. При
таком представлении результатов задача сводится к нахождению сумм элементов
строк, а затем поиску максимальной суммы.
С
А и
Г л н
а а д
А с д б
л а и а Сумма набран-
и н н д ных очков
Али 0 7 2 5 14
Гасан 2 0 2 7 11
Аладин 7 7 0 5 19
Синдбад 5 2 5 0 12
Решение на Паскале запишется так:
program task11_56;
const m=10; { максимально возможное количество участников турнира }
var n : integer; { реальное количество участников турнира }
a : array [1..m,1..m] of integer; { турнирная таблица }
b : array [1..m] of integer; { суммы элементов строк }
i,j : integer; { индексы элементов массива }
k : integer; {индекс участника, набравшего наибольшее количество
очков}
begin
write('Введите n - количество участников турнира ');
readln(n);
write('Введите результаты турнира ');
for i:=1 to n do
for j:=1 to n do read(a[i,j]);
{ Находим суммы строк и записываем их в массив b }
for i:=1 to n do
begin b[i] := 0;
for j:=1 to n do b[i] := b[i]+a[i,j];
end;
                                     194

   end.
   Пример 11.56. Чтобы выявить самого драчливого разбойника, Али-Баба провел
турнир, во время которого каждый его разбойник дрался с каждым из оставшихся.
За победу присваивалось 7 очков, за ничью - 5, за поражение - 2. Результаты
турнира сведены в таблицу. Написать программу, определяющую победителя
турнира.
   Решение. Результаты турнира удобно представить в виде двумерного массива.
По диагонали этого массива запишем нули, так как сам с собой разбойник не
дерется. Если Али выиграл у Гасана, то в строке Али на пересечении со столбцом
Гасан появится 7, а в строке Гасан на пересечении со столбцом Али появится 2.
Нетрудно заметить, что клетки, содержащие результаты одного поединка,
расположены в клетках, симметричных относительно главной диагонали. При
таком представлении результатов задача сводится к нахождению сумм элементов
строк, а затем поиску максимальной суммы.
                                                        С
                                                     А и
                                                  Г л н
                                                  а а д
                                             А с д б
                                             л а и а Сумма набран-
                                             и н н д ных очков
                                Али          0 7 2 5 14
                                Гасан        2 0 2 7 11
                                Аладин       7 7 0 5 19
                                Синдбад      5 2 5 0 12
   Решение на Паскале запишется так:
   program task11_56;
   const m=10; { максимально возможное количество участников турнира }
   var        n : integer; { реальное количество участников турнира }
              a : array [1..m,1..m] of integer; { турнирная таблица }
              b : array [1..m] of integer; { суммы элементов строк }
              i,j : integer; { индексы элементов массива }
              k : integer; {индекс участника, набравшего наибольшее количество
                                      очков}
   begin
       write('Введите n - количество участников турнира ');
       readln(n);
       write('Введите результаты турнира ');
       for i:=1 to n do
       for j:=1 to n do read(a[i,j]);
       { Находим суммы строк и записываем их в массив b }
       for i:=1 to n do
       begin b[i] := 0;
              for j:=1 to n do b[i] := b[i]+a[i,j];
       end;