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