Другие языки программирования и технологии
Помогите пожалуйста, нужно создать программу используя списки
Даны натуральное число 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
Если это списки в таких языках программирования, как Пролог и Лисп, то, например, в 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
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
создаешь массив, прогоняешь в цикле каждый элемент массива и сравниваешь их друг с дружкой.
У меня есть эта задачка, пиши в лс на почту, за 100р скину
Похожие вопросы
- Помогите пожалуйста! нужно написать программу на C++
- Помогите пожалуйста, нужно написать программу в С++ (Visual Studio). Как можно проще.
- помогите пожалуйста, нужно составить программу на языке Паскаль
- Нужно создать программу в Pascal ABC.NET
- Помогите пожалуйста нужно конвертировать документ пдф в документ word. Скачала программу Adobe pro не получается.
- Помогите пожалуйста, с составлением программы в паскале, очень срочно! Только пожалуйста, вставьте данные, которые ниже
- помогите пожалуйста с кодами программ в паскале
- Язык Си. Помогите пожалуйста написать простую программу.
- Помогите пожалуйста, решила создать игру.
- Программирование C++. Нужно создать программу: