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

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

Задача 171

{ Проверяет, является ли матрица магическим квадратом } const
МАХ=5; { максимальный размер матрицы }
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('Введите строки матрицы');
Writeln('После ввода строки',п,' целых чисел,', 'нажимайте Enter'); for i: = l to n do begin
write(' › ');
for j: = l to n-1 do read(a[i,j]); readln(a[i, n]); end;
ok: = TRUE; { пусть матрица – магический квадрат } sum: = 0;
{ вычислим сумму элементов главной диагонали } for i: = l to n do sum: = sum+a[i,i];
{ вычисляем суммы по строкам}
i: = l;
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
(здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали } begin
{ вычисляем суммы по столбцам }
j: = l;
repeat
temp: = 0; { сумма эл-тов текущего столбца } for i: = l to n do temp: = temp+a[i,j]; j: = j+l;
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;
end.

Задача 172

{ Подводит итоги Олимпийских игр } 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) ',
'и нажмите <strong>Enter</strong> › '); readln(n);
Writeln('Введите строки матрицы');
Writeln('После ввода строки',п,' целых чисел,', 1 нажимайте 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: = TRUE; { пусть матрица – магический квадрат } sum: = 0;
{ вычислим сумму элементов главной диагонали } for i: = 1 to n do sum: = sum+a[i,i];
{ вычисляем суммы по строкам}
i: = l;
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
{ здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали }
begin
{ вычисляем суммы по столбцам }
repeat
temp: = 0; { сумма эл-тов текущего столбца } .for i: = l to n do temp: = temp+a[i,j]; j: = j+l;
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]; j: = j-l end;
if temp <> sum then ok: = FALSE; end; end;
write('Введенная матрица '); if not ok
then write('не ');
writeln('является магическим квадратом.');
readln; end.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.