[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]


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

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]