[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 5.1. Определить, имеется ли в заданном целочисленном массиве A(N) хотя бы одна пара совпадающих по значению чисел.
 
Система тестов
 
Номер 
теста
Проверяемый 
случай
Данные
Результат
N
Массив А
Otvet
1
2
Имеется
Не имеется
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
 

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]