Пример 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.


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

FOR i = 1 TO N 'цикл по строкам матрицы
  j = 1 : Flag=0
  WHILE
(j <= N) AND (Flag = 0) 'цикл до первого отрицательного
   IF
A(i, j) < 0 THEN Flag = 1 ELSE j = j + 1 'элемента строки
  WEND

  IF Flag = 1 THEN    'обнуление строки, содержащей
    FOR j = 1 TO N    'отрицательные элементы
      A(i, j) = 0
    NEXT j
  END IF
NEXT i

PRINT "Матрица-результат :" : PRINT   'вывод матрицы-результата
FOR i = 1 TO N
  FOR j = 1 TO N
    PRINT A(i, j) ;
  NEXT j : PRINT
NEXT i
END