Тип Д25 C2 № 2918 

Алгоритмы обработки массивов. Другие алгоритмы
i
Требуется составить программу, которая проверяет, является ли введённая с клавиатуры целочисленная квадратная матрица размером 10х10 "магическим квадратом", то есть равны ли между собой суммы элементов каждой строки, каждого столбца и суммы элементов каждой диагонали.
Спрятать решениеРешение. uses crt;
const
n=10;
var a:array[1..n,1..n] of integer;
ok:boolean;
i,j,k:integer;
sum:integer;
temp:integer;
begin
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
Ok:=True;
sum:=0;
//считаем главную диагональ
for i:=1 to n do
sum:=sum+a[i,i];
{Вычисляем сумму по строкам}
i:=1;
repeat
temp:=0;
for j:=1 to n do
temp:=temp+a[i,j];
i:=i+1;
if temp <> sum then
ok:=False;
until (ok=false) or (i>n);
//если сумма по строкам подходит, то вычисляем по столбцам
if ok=true then
begin
j:=1;
repeat
temp:=0;
for i:=1 to n do
temp:=temp+a[i,j];
j:=j+1;
if temp <> sum then
ok:=False;
until (ok=false) or (j>n);
end;
//далее по диагоналям
if ok=true then
begin
k:=1;
repeat
temp:=0;
for i:=1 to n do begin
j:=i+k;
if j>n then j:=j-n;
temp:=temp+a[i,j];
end;
k:=k+1;
if temp <> sum then
ok:=False;
until (ok=false) or (k>=n);
end;
if ok=true then
begin
k:=1;
repeat
temp:=0;
for i:=1 to n do begin
j:=k-i;
if j<1 then j:=j+n;
temp:=temp+a[i,j];
end;
k:=k+1;
if temp <> sum then
ok:=False;
until (ok=false) or (k>n);
end;
Спрятать критерииКритерии проверки:| Критерии оценивания выполнения задания | Баллы |
|---|
| Предложен правильный алгоритм, выдающий верное значение. Допускается запись алгоритма на другом языке, использующая аналогичные переменные. В случае, если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования, при этом количество переменных и их идентификаторы должны соответствовать условию задачи. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. | 2 |
| В любом варианте решения может присутствовать не более одной ошибки из числа следующих: 1) не инициализируется или неверно инициализируется переменная; 2) при выводе ответа не учитывается, что требуемого числа в массиве может не быть; 3) отсутствует вывод ответа; 4) в сравнении перепутан знак; 5) неверно осуществляется проверка делимости; 6) на делимость проверяется не значение элемента, а его индекс; 7) в сложном условии вместо логической операции «И» используется логическая операция «ИЛИ»; 8) используется переменная, не объявленная в разделе описания переменных; 9) не указано или неверно указано условие завершения цикла; 10) индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно; 11) неверно расставлены операторные скобки | 1 |
| Ошибок, перечисленных в п. 1–11, две или больше, или алгоритм сформулирован неверно | 0 |
| Максимальный балл | 2 |