Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачник по программированию.doc
Скачиваний:
25
Добавлен:
03.11.2018
Размер:
1.94 Mб
Скачать

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

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

нц пока <условие> нц для 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)

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.

Пример 6.2. Дана целочисленная матрица A(N, M). Определить, встречается ли

заданное целое K среди максимальных элементов столбцов этой матрицы.