Пример 5.1.
Определить, имеется ли в заданном целочисленном массиве A(N)
хотя бы одна пара совпадающих по значению чисел.
Система тестов
Номер
теста
|
Проверяемый
случай
|
Данные
|
Результат
|
N
|
Массив А
|
Otvet
|
1
2
|
Имеется
Не имеется
|
4
3
|
(1,3,2,3)
(1,2,3)
|
"Есть совпадающие числа"
"Нет совпадающих чисел"
|
Демонстрация
Школьный АЯ
алг Равенство(арг цел 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)
(i <= N) и (Flag = "Нет")
=> (2)
N теста
|
i
|
Flag
|
(1)
|
j
|
(2)
|
A[i]=A[j]
|
Otvet
|
1
|
1
|
"Нет"
|
+
|
2
3
4
5
|
+
+
+
-(кц)
|
-
-
-
|
|
2
|
"Да"
|
+
|
3
4
|
+
+
-(кц)
|
-
+
|
|
3
|
|
-(кц)
|
|
|
|
"Есть совп.числа"
|
2
|
1
2
3
|
"Нет"
|
+
+
-(кц)
|
2
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);
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( 'О т в е т : ');
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