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

Razdel_13_Osn_alg_i_i_progr_ya_11_05_10

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

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

дано | А – упорядоченная по возрастанию последова-

тельность

надо | в А включено число D с сохранением упорядо-

ченности нач цел i

i:=N

нц пока (i>=1) и (A[i]>D)

A[i+1] := A[i] | сдвиг очередного элемента вправо

на одну позицию

 

 

 

 

 

i := i–1

 

 

 

 

 

 

 

 

кц

 

 

 

 

 

 

 

 

 

 

A[i+1] := D

 

 

| включение числа D в последова-

тельность

 

 

 

 

 

 

 

 

 

 

кон

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

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

 

 

Блок-схема (фрагмент)

 

 

 

 

 

 

 

 

 

 

(i >= 1) и (A[i] > D)

=> (1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Номер те-

 

i

 

 

(1)

 

Массив А

 

ста

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

3

 

 

+

 

(1, 3, 5)

 

 

 

 

2

 

 

+

 

(1, 3, 5, 5)

 

 

 

1

 

 

+

 

(1, 3, 3, 5)

 

 

 

 

 

 

-(кц)

 

(1, 1, 3, 5)

 

 

 

 

 

 

 

 

(0, 1, 3, 5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

3

 

 

+

 

(1, 3, 5)

 

 

 

 

2

 

 

-(кц)

 

(1, 3, 5, 5)

 

 

 

 

 

 

 

 

(1, 3,

4,

5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

151

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

3

3 -(кц) (1, 3, 5)

(1, 3, 5, 6)

Turbo Pascal

Program Insertion;

Uses Crt;

Var A : Array [1..20] of Real;

D : Real;

N, i : Integer;

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

 

}

Procedure InputOutput;

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

вывода}

 

 

Begin

ClrScr;

 

Write(’Количество элементов массива - ’);

ReadLn(N);

WriteLn(’Введите элементы массива, упорядоченные

по возрастанию:’);

For i := 1 to N do

 

 

begin

Write(’A[’ , i , ’]

= ’); ReadLn(A[i])

 

end;

WriteLn;

 

Write(’Введите число, которое

требуется включить в

массив: ’);

 

 

ReadLn(D);

 

 

ClrScr;

Write(’Исходный массив :’);

For i := 1 to N do Write(A[i]

: 5 : 1); WriteLn;

WriteLn(’Включаемый элемент –

’, D : 5 : 1);

End;

{ of InputOutput }

 

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

 

 

}

152

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

Procedure Insert; {описание процедуры включения ново-

го элемента}

 

Begin

 

i:=N;

 

While (i>=1) and (A[i]>D) do

 

begin A[i+1] := A[i];

{сдвиг очередного эле-

мента вправо}

 

 

i:=i–1

end;

 

A[i+1] := D {включение числа D в последователь-

ность}

 

End;

 

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

}

Procedure Result; {описание процедуры вывода резуль-

татов}

 

 

Begin

WriteLn;

Write(’О т в е т : массив с включенным элементом

’);

 

 

For i := 1 to N+1 do Write( A[i] : 5 : 1);

WriteLn;

 

 

ReadLn

 

 

End;

 

 

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

 

}

BEGIN

 

 

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

Insert;

{вызов процедуры включения нового эле-

мента}

 

 

Result;

{вызов процедуры вывода результатов }

END.

 

 

153

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

QBasic

 

 

 

 

CLS

 

 

 

 

INPUT

"Количество элементов массива – ", N

DIM A(N+1)

 

 

 

PRINT

"Введите

элементы массива, упорядоченные по

возрастанию:"

 

 

FOR i

= 1 TO N

 

 

PRINT "A(" ;

i ; ") = " ; :

INPUT A(i)

NEXT i :

PRINT

 

INPUT

"Введите

число, которое требуется включить в

массив: ", D

CLS : PRINT "Исходный массив – ";

FOR i

= 1 TO N

 

PRINT A(i) ;

 

NEXT i :

PRINT

 

PRINT

"Включаемый элемент – "; D

i = N

 

 

 

WHILE

(i

>= 1) AND (A[i]>D)

 

A(i+1)

= A[i] : i = i – 1

'сдвиг очередного эле-

мента

вправо

 

WEND

 

A(i+1)

= D ’включение числа D в последовательность

PRINT :

PRINT "О т в е т : массив с включенным эле-

ментом

";

FOR i =

1 TO N + 1

PRINT

A(i) ;

NEXT i

: PRINT

END

 

154

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

8Алгоритмы, реализуемые с помощью вложенных циклов типа ПОКА

Схема вложенных циклов типа пока:

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

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

. . . . . . .

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

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

. . . . . .

кц

. . . . . . .

кц

Пример 1. Определить, имеется ли в заданном целочисленном массиве

A(N) хотя бы одна пара совпадающих по значению чисел.

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

 

 

 

 

 

 

 

 

 

 

 

Номер

 

Проверяемый

 

 

 

Данные

 

Результат

 

теста

 

случай

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

Массив А

 

Otvet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

Имеется

 

4

 

(1,3,2,3)

 

"Есть совпадающие числа"

 

2

 

Не имеется

 

3

 

(1,2,3)

 

"Нет совпадающих чисел"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

155

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

Школьный АЯ

алг Равенство(арг цел N, арг цел таб A[1:N],

рез лит

Otvet)

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

нц пока (i<=N–1) и (Flag="Нет")

| цикл по первому числу из

пары

j:=i+1

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

| цикл по второму числу

из пары

если A[i]=A[j] | проверка равенства чисел

то Flag:="Да"

иначе j:=j+1

все

кц

i:=i+1

кц

если Flag="Да"

то Otvet:="Есть совпадающие числа"

иначе Otvet:="Нет совпада-

ющих чисел"

все

кон

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

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

(i <= N-1) и (Flag = "Нет") => (1)

156

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

 

 

 

 

 

(i <= N) и (Flag = "Нет")

=> (2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N те-

 

 

i

 

 

Flag

 

(1)

 

j

 

(2)

 

A[i]=A[j]

 

Otvet

 

ста

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

"Нет"

 

+

 

2

 

+

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

+

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

+

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

-(кц)

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

"Да"

 

+

 

3

 

+

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

+

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-(кц)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

-

 

 

 

 

 

 

 

 

"Есть

 

 

 

 

 

 

 

 

 

(кц)

 

 

 

 

 

 

 

 

совп.числа"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

1

 

 

"Нет"

 

+

 

2

 

+

 

-

 

 

 

 

 

 

 

2

 

 

 

 

+

 

3

 

+

 

-

 

 

 

 

 

 

 

3

 

 

 

 

-(кц)

 

4

 

-(кц)

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

-(кц)

 

 

 

 

"Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

совп.чисел"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Turbo Pascal

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Program Equal;

 

 

 

 

 

 

 

 

 

 

 

Uses Crt;

 

 

 

 

 

 

 

 

 

 

 

Type Mas = Array [1..20] of Integer;

 

 

 

Var A

 

 

 

: Mas;

 

 

 

 

 

 

 

 

 

 

i, j, N : Integer;

 

 

 

 

 

 

 

 

Flag

 

 

: Boolean;

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

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

вывода данных} Begin ClrScr;

Write('N = '); ReadLn(N);

157

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

For i := 1 to N do

begin Write('A[' , i , '] = ') ; ReadLn(A[i])

end;

WriteLn; WriteLn('Массив А');

 

For i := 1 to N do Write(A[i] : 4);

WriteLn; WriteLn

 

End;

 

 

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

 

}

Procedure Search(Var A:Mas; Var Flag:Boolean); {Опи-

сание процедуры}

 

Begin

 

{поис-

ка решения

}

 

i:=1; Flag:= FALSE;

 

While (i<=N-1) and not Flag do

{цикл по первому

числу из пары}

 

 

begin

 

 

j:=i+1;

 

 

While (j<=N) and not Flag do

{цикл по второму

числу из пары}

 

 

If A[i]=A[j] then Flag:=TRUE else j:=j+1;

i:=i+1

 

end;

 

End;

 

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

}

BEGIN

 

InputOutput;

{вызов процедуры ввода-вывода дан-

ных }

 

Search(A, Flag); {вызов процедуры поиска решения задачи}

WriteLn( 'О т в е т : ');

158

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

If Flag then WriteLn('Есть совпадающие числа.' ) else WriteLn('Нет совпадающих чисел.');

ReadLn

END.

QBasic

 

 

 

CLS

 

 

 

INPUT

"N = ", N : DIM A(N)

' ввод массива А

FOR i

=

1 TO N PRINT "A(" ; i ; ") = " ;

INPUT

A(i)

 

NEXT i

 

 

 

PRINT

: PRINT "Массив А"

' вывод массива А

FOR i

=

1 TO N

 

PRINT

A(i) ;

 

NEXT i : PRINT

 

i = 1

: Flag = 0

' поиск совпадающих чисел

WHILE

(i <= N - 1) AND (Flag = 0)

j =

i + 1

 

WHILE (j <= N) AND (Flag = 0)

IF A(i)=A(j) THEN Flag=1 ELSE j=j+1

WEND

 

 

 

i = i + 1

 

WEND

 

 

 

PRINT

: PRINT "О т в е т :"

 

IF Flag = 1 THEN

PRINT "Есть совпадающие числа."

ELSE PRINT "Нет совпадающих чисел."

END IF

END

159

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

Пример 2. Дана целочисленная матрица A(N, N). Определить, имеются ли среди её элементов, лежащих ниже главной диагонали, отрицательные

числа.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

Номер

 

Проверяемый

 

 

 

Данные

 

 

 

Результат

теста

 

случай

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

Массив А

 

 

Otvet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

Имеются

 

4

 

1 -1

2

1

 

''Есть отрицательные

 

 

 

 

 

 

2

 

3

1

0

 

числа''

 

 

 

 

 

 

1

 

-1

2

-1

 

 

 

 

 

 

 

 

-2

 

1

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

Не имеются

 

3

 

 

1

-1

2

 

 

"Нет отрицательных

 

 

 

 

 

 

 

1

0

1

 

 

чисел"

 

 

 

 

 

 

 

2

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

160

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