Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика алгоритмизации и программирования.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
517.53 Кб
Скачать

Алгоритмы, реализуемые с помощью комбинации циклов типа для и пока

Схема циклов типа пока /  для                      

нц пока <условие>

тело внешнего цикла

. . . . . .

нц для i от A до B

тело внутреннего цикла

кц

. . . . . .

кц

Схема циклов типа для / пока                      

нц для i от A до B

тело внешнего цикла

. . . . . .

нц пока <условие>

тело внутреннего цикла

кц

. . . . . .

кц

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