[ домой ] | [ следующий ] [ начало главы ] [ предыдущий ] | [ содержание ] |
Система тестов
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
алг Магический квадрат (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet) дано | N>0
нач цел i, j, St, S, лит Flag St:=0 | вычисление суммы элементов главной диагонали нц для i от 1 до N | в качестве эталонной суммы St St:=St+A[i, i] кц
Flag:="Да"; i:=1 нц пока (i<=N) и (Flag="Да") | вычисление сумм элементов строк S:=0 нц для j от 1 до N S:=S+A[i, j] кц если S<>St | сравнение суммы элементов текущей строки с эталонной то Flag:="Нет" иначе i:=i+1 все кц
j:=1 нц пока (j<=N) и (Flag="Да") | вычисление сумм элементов столбцов S:=0 нц для i от 1 до N S:=S+A[i, j] кц если S<>St |сравнение суммы элементов текущего то Flag:="Нет" |столбца с эталонной суммой иначе j:=j+1 все кц
если Flag="Да" то S:=0 | вычисление суммы элементов побочной диагонали нц для i от 1 до N S:=S+A[i, N+1-i] кц если S<>St | сравнение суммы с эталонной то Flag:="Нет" все все если Flag="Да" то Otvet := "Это магический квадрат." иначе Otvet := "Это не магический квадрат." все кон
Вычисление суммы
элементов главной диагонали в качестве эталонной суммы |
|
Вычисление сумм
|
Вычисление сумм элементов столбцов
и сравнение их с
эталонной суммой
Вычисление суммы
элементов побочной
диагонали и сравнение
ее с эталонной суммой
|
теста |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
2 3 1,2,3 1,2,3 1,2,3 1,2,3 |
+ + |
1,2,3 1,2,3 1 2 3 |
+
|
+ |
6 6 6 6 6 6 |
- - - - - - |
"Магический квадрат" |
|
|
"Нет" |
|
-(кц) |
1 |
|
|
|
|
|
Turbo Pascal
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.
QBasic
CLS : INPUT "Количество строк и столбцов - ", N : DIM A(N, N) FOR i = 1 TO N FOR j = 1 TO N PRINT "A(" ; i ; ", " ; j ; ") = "; : INPUT A(i, j) NEXT j NEXT i : CLS
PRINT "Исходная матрица: " : PRINT FOR i = 1 TO N FOR j = 1 TO N PRINT A(i, j); NEXT j : PRINT NEXT i : PRINT
Standard = 0 'вычисление суммы-эталона Standard FOR i = 1 TO N Standard = Standard + A(i, i) NEXT i
Flag = 1 : i = 1 WHILE (i <= N) AND (Flag = 1) 'вычисление сумм элементов строк S = 0 FOR j = 1 TO N S = S + A(i, j) NEXT j IF S <> Standard THEN Flag = 0 ELSE i = i + 1 WEND
j = 1 WHILE (j <= N) AND (Flag = 1) 'вычисление сумм элементов столбцов S = 0 FOR i = 1 TO N S = S + A(i, j) NEXT i IF S <> Standard THEN Flag = 0 ELSE j = j + 1 WEND
IF Flag = 1 THEN S = 0 'вычисление суммы элементов побочной диагонали FOR i = 1 TO N S = S + A(i, N + 1 - i) NEXT i END IF IF S <> Standard THEN Flag = 0
IF Flag = 1 THEN PRINT "Это магический квадрат." ELSE PRINT "Это не магический квадрат." END IF : PRINT END
[ домой ] | [ следующий ] [ начало главы ] [ предыдущий ] | [ содержание ] |