Razdel_13_Osn_alg_i_i_progr_ya_11_05_10
.pdfЧасть 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) |
|
|
|
|
"Введите |
элементы массива, упорядоченные по |
|||
возрастанию:" |
|
|
||
FOR i |
= 1 TO N |
|
|
|
PRINT "A(" ; |
i ; ") = " ; : |
INPUT A(i) |
||
NEXT i : |
|
|||
INPUT |
"Введите |
число, которое требуется включить в |
массив: ", D
CLS : PRINT "Исходный массив – ";
FOR i |
= 1 TO N |
|
|
PRINT A(i) ; |
|
||
NEXT i : |
|
||
"Включаемый элемент – "; 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 |
A(i) ; |
|
NEXT i |
|
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 "Массив А" |
' вывод массива А |
||
FOR i |
= |
1 TO N |
|
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 "О т в е т :" |
|
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