Пример 6.4.
Дана матрица A(N, N). Если хотя бы один элемент
строки матрицы отрицателен, то все элементы
этой строки заменить нулями.
Тест
Данные
Результат
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 = "Нет") |цикл до
если 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 1 2 3
+ + -(кц)
- +
+
A[1,1]=0 A[1,2]=0 A[1,3]=0
2
"Нет"
1 2 3 4
+ + + -(кц)
- - -
-
3
"Нет" "Да"
1 1 2 3
+ -(кц)
+
+
A[3,1]=0 A[3,2]=0 A[3,3]=0
Turbo Pascal
Program Modify;
Uses Crt;
Var A : Array[1..10, 1..10] of Real;
N, i, j : Integer;
{-------------------------------------}
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 : 1);
WriteLn
end; WriteLn
End; { of InputOutput }
{-------------------------------------------}
Procedure Line(Var i : Integer); {описание процедуры обработки}
Var Flag : Boolean; {строки матрицы }
Begin
j := 1; Flag := FALSE;
While (j<=N) and not Flag do {цикл до первого отрицательного}
If A[i, j]<0 then Flag:=TRUE else j:=j+1; {элемента строки}
If Flag then {обнуление строки, содержашей}
For j := 1 to N do A[i, j] := 0 {отрицательные элементы }
End;
{-------------------------------------------}
Procedure OutRes; {описание процедуры вывода матрицы-результата}
Begin
WriteLn(’ Матрица-результат :’); WriteLn;
For i := 1 to N do
begin
For j := 1 to N do Write(A[i, j]:5:1);
WriteLn
end; ReadLn
End; { of OutRes }
{-------------------------------------------}
BEGIN
InputOutput; {вызов процедуры ввода-вывода матрицы}
For i := 1 to N do Line(i);{циклический вызов процедуры обработки строк}
OutRes; {вызов процедуры вывода матрицы-результата}
END.