Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Razdel_13_Osn_alg_i_i_progr_ya_11_05_10

.pdf
Скачиваний:
22
Добавлен:
09.04.2015
Размер:
1.98 Mб
Скачать

Часть 13. Основы алгоритмизации и программирования

 

 

 

 

 

 

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);

181

Часть 13. Основы алгоритмизации и программирования

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

182

Часть 13. Основы алгоритмизации и программирования

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

 

 

 

183

Часть 13. Основы алгоритмизации и программирования

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

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

Система тестов

 

 

 

 

 

 

 

 

Данные

 

Результат

Номер

 

Проверяемый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

теста

 

случай

 

K

 

N

 

M

 

Матрица

 

 

 

Otvet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

Встречается

 

5

 

3

 

3

 

 

 

 

 

''Встречается''

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

Не встречается

 

1

 

2

 

2

 

 

 

''Не встречается''

 

 

 

 

 

 

 

 

 

 

 

 

 

184

Часть 13. Основы алгоритмизации и программирования

Школьный АЯ

алг Да или Нет(арг цел N,M,K, арг цел таб

A[1:N, 1:M], рез лит Ot-

vet)

дано | N, M >0

нач цел i, j, JMax, лит Flag Flag:="Нет"; j:=1

нц пока (j<=M) и (Flag="Нет")

| цикл по столбцам с прерыва-

нием

JMax:=A[1,j]

нц для i от 2 до N | цикл нахожде-

ния JMax

если A[i,j]>JMax

то JMax:=A[i, j]

все

кц

если K=JMax | условие прерывания цикла

то Flag:="Да"

иначе j:=j+1

все

кц

если Flag="Да"

то Otvet := "Встречается"

иначе Otvet := "Не встречается"

все

кон

Исполнение алгоритма

Обозначение проверяемого условия:

(j<=M) и (Flag = "Нет" ) => (1)

185

Часть 13. Основы алгоритмизации и программирования

 

N те-

 

 

Flag

 

 

j

 

(1)

 

Jmax

 

I

 

A[i,j]>Jmax

 

K=Jmax

 

 

ста

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

"Нет"

 

 

1

 

+

 

1

 

2

 

+

 

-

 

 

 

 

 

 

 

 

 

 

 

 

4

 

3

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"Да"

 

 

2

 

+

 

5

 

2

 

-

 

+

 

 

 

 

 

 

 

 

 

 

-

 

 

 

3

 

-

 

 

 

 

 

 

 

 

 

 

 

 

(кц)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

"Нет"

 

 

1

 

+

 

2

 

2

 

-

 

-

 

 

 

 

 

 

 

 

2

 

+

 

1

 

2

 

+

 

-

 

 

 

 

 

 

 

 

3

 

-

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(кц)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Turbo Pascal

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Program Checking;

 

 

 

 

 

 

 

 

 

 

 

 

Uses Crt;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Var A

 

 

 

: Array[1..10, 1..10] of Integer;

 

N, M, i, j : Integer;

 

 

 

 

 

 

 

 

K

 

 

 

: Integer; {заданное число}

 

JMax

 

 

 

: Integer; {максимальный элемент

столбца}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Flag

 

 

 

: Boolean;

 

 

 

 

 

 

 

{---------------------------------------------------

}

Procedure InputOutput; {описание процедуры ввода-

вывода} Begin

ClrScr;

Write('Введите целое K = '); ReadLn(K); WriteLn;

WriteLn('Введите целочисленную матрицу А');

186

Часть 13. Основы алгоритмизации и программирования

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; ClrScr;

WriteLn('Исходная матрица :'); WriteLn;

For i := 1 to N do begin

For j := 1 to M do Write(A[i, j] : 4);

WriteLn

end; WriteLn;

End; { of InputOutput } {--------------------------------------------} Procedure YesOrNot(Var Flag:Boolean); {описание про-

цедуры решения задачи} Begin

Flag:=FALSE; j:=1;

While (j<=M) and not Flag do {цикл по столбцам с прерыванием}

begin JMax:=A[1, j];

For i := 2 to N do {цикл нахождения JMax} If A[i, j]>JMax then JMax:=A[i, j];

If K=JMax then Flag:=TRUE else j:=j+1 {условие прерывания}

end;

End; {--------------------------------------------} BEGIN

187

Часть 13. Основы алгоритмизации и программирования

InputOutput; {вызов процедуры ввода-вывода ис-

ходных данных}

YesOrNot(Flag); {вызов процедуры решения задачи} Write('О т в е т : число ', K );

If Flag then Write(' встречается') else Write(' не встречается');

WriteLn(' среди максимальных элементов столбцов матрицы');

ReadLn

END.

QBasic

CLS : INPUT "Введите целое K = ", K

PRINT "Введите целочисленную матрицу А" 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 "Исходная матрица "

FOR i = 1 TO N

FOR j = 1 TO M

PRINT A(i, j);

NEXT j : PRINT

NEXT i : PRINT

Flag = 0 : j = 1

188

Часть 13. Основы алгоритмизации и программирования

WHILE (j <= M) AND (Flag = 0) 'цикл по столбцам с прерыванием

JMax = A(1, j)

FOR i = 2 TO N 'цикл нахождения JMax

IF A(i, j) > JMax THEN JMax = A(i, j)

NEXT i

IF K = JMax THEN Flag = 1 ELSE j = j + 1 'условие прерывания

WEND

PRINT "О т в е т : число"; K;

IF Flag = 1 THEN

PRINT "встречается";

ELSE PRINT "не встречается";

END IF

PRINT " среди максимальных элементов столбцов матри-

цы"

END

Пример 3. Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит, что суммы чисел во всех её строках, всех столбцах и двух диагоналях одинаковы).

189

Часть 13. Основы алгоритмизации и программирования

Система тестов

 

 

 

 

 

 

 

 

 

 

 

Номер

 

Проверяемый

 

 

 

Данные

 

Результат

 

теста

 

случай

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

Матрица

 

Otvet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

Является

 

3

 

 

 

''Магический

 

 

 

 

 

 

 

 

 

квадрат''

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

Не является

 

2

 

 

 

''Не магический

 

 

 

 

 

 

 

 

 

квадрат ''

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Школьный АЯ

алг Магический квадрат (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet)

дано | N>0

нач цел i, j, St, S, лит Flag

St:=0 | вычисление суммы элементов

главной диагонали

нц для i от 1 до N | в качестве эталонной суммы St

St:=St+A[i, i]

кц

Flag:="Да"; i:=1

нц пока (i<=N) и (Flag="Да") | вычисление сумм эле-

ментов строк

S:=0

нц для j от 1 до N

S:=S+A[i, j]

кц

190

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]