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

Пример 6.1. В заданной целочисленной матрице A(N, M) найти количество строк, содержащих нули.
 
Тест
 
Данные
Результат
N
M
Матрица А
К
3
3
 2
 
Демонстрация

Школьный АЯ

алг Строки с нулями (арг цел N, M, 
        арг цел таб A[1:N, 1:M], рез цел K)
   дано | N>0, M>0
нач цел i, j, лит Flag
  K := 0
  нц для i от 1 до N | цикл по всем строкам
    j:= 1; Flag := "Нет"
    нц пока (j <= M) и (Flag = "Нет")
           | цикл до нулевого элемента строки
       если A[i, j] = 0 
          то Flag:="Да"; K:=K+1
          иначе j:=j+1
       все
    кц
  кц
кон 
Исполнение алгоритма
 
Обозначение проверяемого условия:
(j<=M) и (Flag = "Нет" )  => (1)
i
Flag
j
(1)
A[i,j]=0
K
1
"Нет"
"Да"
1
2
+
+
-(кц)
-
+
0
1
2
"Нет"
1
2
3
4
+
+
+
-(кц)
-
-
-
 
3
"Нет"
"Да"
1
+
-(кц)
+
2

Turbo Pascal

Program ContainZero;
  Uses Crt;
  Var A          : Array[1..10, 1..10] of Integer;
      N, M, i, j : Integer;
      K          : Integer; {K - количество строк, содержащих нули} 
{--------------------------------------------}
Procedure InputOutput; {описание процедуры ввода-вывода данных}
Begin
  ClrScr;
  Write('Количество строк - '); ReadLn(N);
  Write('Количество столбцов - '); ReadLn(M);
  For i := 1 to N do
    For j := 1 to M do
      begin Write('A[' , i , ' , ' , j , ']= ? ');
            ReadLn(A[i, j])
      end;
  WriteLn;  WriteLn('Исходная матрица :');
  For i := 1 to N do
    begin
      For j := 1 to M do Write(A[i, j] : 5);
      WriteLn
    end; WriteLn
End; { of InputOutput }
{--------------------------------------------}
Function Zero(i:Integer):Boolean; {описание функции, принимающей        }
   Var Flag : Boolean;            {значение Истина, если в строке есть  }
Begin                             {нули, и Ложь, если в строке нет нулей}
  j:=1; Flag:=FALSE;
  While (j<=M) and not Flag do
    If A[i, j]=0 then Flag:=TRUE else j:=j+1;
  Zero:=Flag               {значение функции присваивается имени функции}
End;
{--------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода}
  K:=0;
  For i := 1 to N do 
    If Zero(i) then K:=K+1;       {Zero(i) - указатель функции Zero}
  WriteLn('Количество строк, содержащих нули, равно ', K); ReadLn
END.


QBasic

CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M : DIM A(N, M)
FOR i = 1 TO N
  FOR j = 1 TO M
    PRINT "A(" ; i ; ", " ; j ; ") = " ;
    INPUT A(i, j)
  NEXT j
NEXT i : CLS 
PRINT "Исходная матрица :" : PRINT
FOR i = 1 TO N
  FOR j = 1 TO M
    PRINT A(i, j) ;
  NEXT j : PRINT
NEXT i : PRINT
K = 0 
FOR i = 1 TO N                'цикл по всем строкам
  j = 1 : Flag = 0
  WHILE (j <= M) AND ( Flag = 0 ) 'цикл до нулевого элемента строки
    IF A(i, j) = 0 THEN Flag = 1: K = K + 1 ELSE j = j + 1
  WEND
NEXT i
PRINT "О т в е т : строк, содержащих нули, " ; K ; "."
END

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