Иллюстрированный самоучитель по Turbo Pascal для начинающих

Решения (задачи 165-188)

Задача 173

{ Подводит итоги Олимпийских игр } const
N=10; (количество стран-участниц }
strana: array[1..N] of string[9]=('Австрия','Германия',
'Канада','Китай','Корея','Норвегия','Россия', 'США','Финляндия' array[1..МАХ,1..MAX]
of integer; { матрица) n: integer; { размер проверяемой матрицы }
ok:boolean; { TRUE – матрица является маг. квадратом} i,j: integer; { индексы массива }
sum: integer; { сумма эл-тов главной диагонали матрицы temp:
integer;{ сумма элементов текущей строки, столбца или второй диагонали матрицы }
begin
write('Введите размер матрицы (3..4), и нажмите Enter › '); readln(n);
Writeln('Введите строки матрицы1); Writeln('После ввода строки', n,' целых чисел,',
'нажимайте Enter'); for i: = 1 to n do begin
write(' › ');
for j: = l to n-1 do read(a[i,j]); readln(a[i,n]); end;
ok: = TROE; { пусть матрица – магический квадрат } sum: = 0;
{ вычислим сумму элементов главной диагонали } for i: =1 to n do sum: = sum+a[i,i];
{ вычисляем суммы по строкам}
i: = 1
repeat
temp: = 0; { сумма эл-тов текущей строки }
for j: = l to n do temp: = temp+a[i,j];
i: = i+l;
if temp <> sum then ok: = FALSE; until (not ok) or (i > n);
if ok then
{ здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали }
end.
{ вычисляем суммы по столбцам }
repeat
temp: = 0; { сумма эл-тов текущего столбца }, for i: = l to n do temp: = temp+a[i,j];
if temp <> sum then ok: = FALSE; until (not ok) or (j > n); if ok then
(здесь сумма эл-тов каждой строки
равна сумме эл-тов каждого столбца и равна сумме эл-тов главной диагонали} begin
(вычислим сумму эл-тов второй
главной диагонали } temp: = 0; j: = n;
for i: = l to n do begin
temp: = temp+a[i,j];
end;
if temp <> sum then ok: = FALSE; end; end;
write('Введенная матрица '); if not ok
then write('не '); writeln('является магическим квадратом.');
readln;
{ Подводит итоги Олимпийских игр } const
N=10; (количество стран-участниц }
strana: array[1..N] of string[9]=('Австрия','Германия',
'Канада','Китай','Корея','Норвегия','Россия', 'США','Финляндия таблица результатов }
result: arrayfl..N+l, 1..5] of integer;
{ N+1-я строка используется как буфер при сортировке таблицы }
i,j: integer;
max: integer; { номер строки таблицы, в которой
количество очков максимально }
buf: string[9]; { используется при сортировке } begin
writeln('Итоги Олимпийских игр');
writeln('Введите в одной строке количество золотых, ', 'серебряных и бронзовых медалей.');
{ ввод исходных данных } for i: = l to N do begin
write(strana[i],' › ');
read(result[i,1],result[i,2]); { кол-во золотых
и серебряных }
readln(result[i,3]); { кол-во бронзовых } end;
{ вычислим общее кол-во медалей и очков } for i: = l to N do begin
result[i,4]: = result[i, 1]+result[i,2]+result[i,3];
 result [i,5]: = result[i,1]*7+result[i,2]* 6+result[ i, 3 ] * 5;
end;
{ сортировка массива в соответствии с количеством очков } { методом простого выбора }
for i: = l to N-l do begin
(в части таблицы начиная со строки i найти j-ю строку,
 в которой элемент result [j, 5] максимальный }
max: = i; { пусть это строка с номером i } for j: = i+l to N do
if result[j,5] > result[max,5] thenmax: = j;
{ Обменяем i-ю строку со строкой с номером max
В качестве буфера используем последнюю, не используемую строку таблицы. }
buf: = strana[i]; strana[i]: = strana[max]; strana[max]: = buf; for j: = 1 to 5 do begin
result[N+l,j]: = result[ i, j ]; end;
for j: =1 to 5 do begin
result[i,j]: = result[max,j]; end;
for j: = 1 to 5 do begin
result[max,j]: = result[N+l,j]; end; end;
{ здесь таблица упорядочена }
writeln;
writeln('Итоги зимней Олимпиады в Нагано, 1998 г.1);
writeln{'Страна':12,'Золото':8,'Серебро':8,'Бронза':8,
'Всего':8,'Очков': 8); for i: = l to N do begin
write(i:2,strana[i]:10); for j: = 1 to 5 do
write(result[i,j]:8);
writeln; end;
readln; end.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.