Часть 13. Основы алгоритмизации и программирования
если 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:="Нет"
все
все
Часть 13. Основы алгоритмизации и программирования
если Flag="Да"
то Otvet := "Это магический квадрат."
иначе Otvet := "Это не магический квадрат."
все
кон
Блок-схема (фрагмент)
Вычисление суммы элементов главной диагонали в качестве эталонной суммы
Вычисление сумм элементов строк и сравнение их с эталонной суммой
Часть 13. Основы алгоритмизации и программирования
Блок-схема (продолжение)
Вычисление сумм
элементов столбцов и сравнение их с эталонной суммой Вычисление суммы элементов побочной
диагонали и сравнение ее с эталонной суммой
Исполнение алгоритма
(в таблице отражен только конечный результат работы циклов типа для, в
которых вычисляются суммы)
Обозначения проверяемых условий:
(i<=N) и (Flag = "ДА" )=> (1)
(j<=N) и (Flag = "ДА" )=> (2)
Flag = "ДА" => (3)
Часть 13. Основы алгоритмизации и программирования
|
N |
|
St |
|
Flag |
|
i |
|
(1) |
|
j |
|
(2) |
|
(3) |
|
S |
|
S<>St |
|
Otvet |
|
теста |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
"Да" |
|
1 |
|
+ |
|
1,2,3 |
|
|
|
|
|
6 |
|
- |
|
|
|
1 |
|
|
|
|
|
2 |
|
+ |
|
1,2,3 |
|
|
|
|
|
6 |
|
- |
|
|
|
|
|
|
|
|
|
3 |
|
+ |
|
1,2,3 |
|
|
|
|
|
6 |
|
- |
|
|
|
|
|
|
|
|
|
1,2,3 |
|
|
|
1 |
|
+ |
|
+ |
|
6 |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1,2,3 |
|
|
|
2 |
|
+ |
|
|
|
6 |
|
- |
|
"Магический |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1,2,3 |
|
|
|
3 |
|
+ |
|
|
|
6 |
|
- |
|
квадрат" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1,2,3 |
|
|
|
|
|
|
|
|
|
6 |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
4 |
|
"Да" |
|
1 |
|
+ |
|
1,2 |
|
- |
|
- |
|
3 |
|
+ |
|
"Не магиче- |
|
|
|
|
|
"Нет" |
|
|
|
- |
|
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 , '] = ');
Часть 13. Основы алгоритмизации и программирования
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;
Часть 13. Основы алгоритмизации и программирования
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
Часть 13. Основы алгоритмизации и программирования
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) 'вычисление сумм эле-
ментов столбцов
Часть 13. Основы алгоритмизации и программирования
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
Пример 4. Дана матрица A(N, N). Если хотя бы один элемент строки мат-
рицы отрицателен, то все элементы этой строки заменить нулями.
Часть 13. Основы алгоритмизации и программирования
|
|
|
|
Тест |
|
|
|
|
|
|
|
|
|
|
Данные |
|
|
Результат |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
N |
|
Матрица А |
|
|
Матрица А |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Школьный АЯ |
Блок-схема (фрагмент) |
(в этом алгоритме отражены процессы ввода |
|
исходных данных и вывода результатов ) |
|
алг Модификация(арг цел N, арг рез
вещ таб A[1:N,
1:N])
дано | N>0
надо | элементы строк, содержа-
щих отрица-
| тельные числа, заменены
на нули
нач цел i, j, лит Flag
ввод N
нц для i от 1 до N
нц для j от 1 до N
ввод A[i,j]
кц
кц
нц для i от 1 до N | цикл по строкам
j := 1; Flag := "Нет"
нц пока (j<=N) и (Flag =
"Нет") |цикл до
Часть 13. Основы алгоритмизации и программирования
если A[i, j]<0 |
|первого |
отрицат. |
|
то Flag := "Да" |элемента строки
иначе j:=j+1
все
кц
если Flag = "Да" |обнуление строки
то нц для j от 1 до N A[i, j]:=0
кц
все
кц
нц для i от 1 до N
нц для j от 1 до N
вывод A[i,j]
кц
кц
кон
Исполнение алгоритма
Обозначение проверяемого условия:
(j<=N) и (Flag = "Нет")=> (1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i |
|
Flag |
|
j |
|
(1) |
|
A[i,j]<0 |
|
Flag="Да" |
|
A[i,j] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
"Нет" |
|
1 |
|
+ |
|
- |
|
+ |
|
|
|
|
|
"Да" |
|
2 |
|
+ |
|
+ |
|
|
|
A[1,1]=0 |
|
|
|
|
|
1 |
|
-(кц) |
|
|
|
|
|
A[1,2]=0 |
|
|
|
|
|
2 |
|
|
|
|
|
|
|
A[1,3]=0 |
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
"Нет" |
|
1 |
|
+ |
|
- |
|
- |
|
|
|
|
|
|
|
2 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
|
3 |
|
+ |
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|