Turbo Pascal для начинающих




Задача 173


f Подводит итоги Олимпийских игр } 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('После ввода строки',п,' целых чисел,',
'нажимайте <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.









Начало    Назад    Вперед