Решения (задачи 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.