| Код | Program MagicSquare; Uses Crt; Var A : Array [1..20, 1..20] of Integer; i, j, N : Integer; Standard, S : Integer; {Standard - сумма-эталон, S - текущая сумма} Flag : Boolean; {-------------------------------------} Procedure InputOutput; {описание процедуры ввода-вывода матрицы} Begin ClrScr; Write('Количество строк и столбцов - '); ReadLn(N); For i := 1 to N do For j := 1 to N do begin Write('A[' , i , ', ' , j , '] = '); ReadLn(A[i, j]) end;
ClrScr; WriteLn('Исходная матрица :'); WriteLn; For i := 1 to N do begin For j := 1 to N do Write(A[i, j] : 5); WriteLn end; WriteLn End; { of InputOutput } {-------------------------------------------} Procedure MagicOrNot(Var Flag : Boolean); {описание процедуры, } {в которой выясняется, является ли квадрат "магическим"} Begin {вычисление суммы элементов главной диагонали} {в качестве эталонной суммы} Standard:=0; For i := 1 to N do Standard := Standard + A[i,i];
Flag:=TRUE; i:=1; While (i<=N) and Flag do {вычисление сумм элементов строк} begin S:=0; For j := 1 to N do S := S+A[i, j]; If S<>Standard then Flag := FALSE else i:=i+1 end;
j:=1; While (j<=N) and Flag do {вычисление сумм элементов столбцов} begin S:=0; For i := 1 to N do S:=S+A[i, j]; If S<>Standard then Flag := FALSE else j := j+1 end;
If Flag then begin S:=0; {вычисление суммы элементов побочной диагонали} For i := 1 to N do S := S+A[i, N+1-i]; If S<>Standard then Flag := FALSE; end; End; {--------------------------------------------------------} BEGIN InputOutput; {Вызов процедуры ввода-вывода } MagicOrNot(Flag); {Вызов процедуры решения задачи } If Flag then WriteLn('Это магический квадрат.') else WriteLn('Это не магический квадрат.'); ReadLn END.
|
Цитата(maloiplan @ 24.12.2006, 18:59 ) | | такой в которой суммы во всех строках и столбцах одинаковы |
по моемутам еще и диагонали должны быть |