Другие языки программирования и технологии

Помогите пожалуйста, нужно создать программу используя списки

Даны натуральное число n, целые числа а (1),…., a(n). Выяснить, имеются ли среди чисел а (1),… a(n) совпадающие
О каких списках идёт речь?
Если это списки в таких языках программирования, как Пролог и Лисп, то, например, в Visual Prolog (Lisp не знаю) :

implement main
  open core, console, math, list

constants
  className = "main".
  classVersion = "".

class predicates
  create_List: (integer, integer_list) procedure (i, o).
  belong: (integer_list) nondeterm (i).
  process: (integer_list) procedure (i).

clauses
  classInfo(className, classVersion).
  create_List(0, [ ]) :- !.
  create_List(N, [random(101) - 50 | T]) :- create_List(N - 1, T).
  belong([ ]) :- fail.
  belong([H | T]) :- isMember(H, T), !.
  belong([_ | T]) :- belong(T).
  process(L) :- belong(L), write("Есть повторы"), !.
  process(_) :- write("Нет повторов").

clauses
  run() :- init(), N = random(21) + 10, write("Дано n = ", N), nl,
    create_List(N, L), write("Дан список: ", L), nl,
    process(L), nl, _ = readChar().
end implement main

goal
  mainExe::run(main::run).

А если эти списки - связанные динамические структуры в императивном языке, то решение будет, например, такое:

Type Item
  Value As Integer
  Next As Item Ptr
End Type

Enum Bool
  FALSE = 0
  TRUE = -1
End Enum

Declare Function Create_List(ByVal N As UByte) As Item Ptr
Declare Sub Delete_List(ByRef P As Item Ptr)
Declare Function Process(ByVal P As Item Ptr) As Bool

Dim Head As Item Ptr = 0
Randomize Timer
Var N = Cast(UByte, Fix(Rnd * 21) + 10)
  Print "Дано n = "; N
  Print "Дан список: "
  Head = Create_List(N)
  If Process(Head) Then
    Print "Ecть пoвтopы"
  Else
    Print "Heт пoвтopoв"
  EndIf
  Delete_List(Head)
End

Function Create_List(ByVal N As UByte) As Item Ptr
  Dim S As Item Ptr = 0, P As Item Ptr = 0, Q As Item Ptr
  For i As UByte = 1 To N
    Q = New Item
    Q->Value = Fix(Rnd * 101) - 50
    Q->Next = 0
    If P <> 0 Then
      P->Next = Q
    Else
      S = Q
    EndIf
    P = Q
    Print Using "####"; P->Value;
  Next
  Print
  Return S
End Function

Function Process(ByVal P As Item Ptr) As Bool
  Dim F As Bool = FALSE, Q As Item Ptr
  If P->Next = 0 Then
    Return FALSE
  Else
    F Or= Process(P->Next)
    If Not F Then
      Q = P
      Do While P->Next <> 0
        F Or= Q->Value = P->Next->Value
        P=P->Next
      Loop
    Else
      Return F
    EndIf
  EndIf
  Return F
End Function

Sub Delete_List(ByRef P As Item Ptr)
  Dim Q As Item Ptr
  Do While P <> 0
    Q = P
    P = P->Next
    Delete Q
  Loop
End Sub
Сергей Мищук
Сергей Мищук
51 590
Лучший ответ
создаешь массив, прогоняешь в цикле каждый элемент массива и сравниваешь их друг с дружкой.
У меня есть эта задачка, пиши в лс на почту, за 100р скину
Адхам Камилов
Адхам Камилов
1 659