Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/770: Рейтинг темы: голосов - 770, средняя оценка - 4.70
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024

Решенные задачи про списки, строки, файлы, БД

26.06.2012, 21:30. Показов 141051. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот решил выложить с позволения модератора раздела список решенных мною задач и не только мною задач.
P.S. Критика приветствуется,я не король пролога,я вообще в него врубаюсь последние 2 недели,если вас не устраивает код,объясняете почему и свой вариант!
P.S.S Также в какой-то степени помогали вот эти люди : Muha070,rrrFer,Грымзик,так что им респект!
Ну и поехали...
Списки :
1) Определите количество нечетных элементов в списке.
2) Определите, сколько раз заданный элемент входит в список.
3) Выведите голову списка.
4) Выведите последний элемент.
5) Замените голову списка.
6) Определите номер элемента X.
7) Выведите элемент под номером N.
8) Удалите из списка все вхождения заданного элемента.
9) Объедините два списка.
10) Перепишите список в обратном порядке.
11) Объедините два списка без дублирования элементов.
12) Удалите первое вхождение заданного элемента.
13) Сложить поэлементно 2 списка.
14) Сложить два списка следующим образом: a1+bn, a2+bn-1, ...,an-1+b2, an+b1.
15) Найти количество элементов, предшествующих первому (последнему) максимальному.
16) Переместите голову списка в конец списка.
17) Найти сумму максимального и минимального элементов списка.
18) Поменяйте местами элементы с нечетными индексами с элементами с четными индексами.
19) Составить список из цифр заданного числа в обратном порядке. Например, 127645: [5,4,6,7,2,1].
20) Увеличьте каждый элемент списка на заданный элемент.
21) Увеличьте элемент с заданным номером на заданное число.
22) Все вхождения заданного элемента уменьшите на заданное число.
23) Удалите элемент с заданным номером N.
24) Замените четные элементы списка нулем.
25) Отсортируйте список методом пузырька.
26) Отсортируйте список методом вставками.
27) Отсортируйте список быстрым методом сортировки.
28) Используя предикат findall, решите следующие задачи:
1. Вывести самых молодых жильцов дома и номера квартир, в которых они живут.
2. Вывести фамилии студентов и их возраст с максимальным размером стипендии.
3. Вывести фамилии сотрудников предприятия и их оклады, оклады которых меньше среднего.
4. Вывести студентов с заданной фамилией и посчитать их количество.

1-27,
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
domains
int=integer
list=int*
Predicates
 
/* переворачивает список*/
reverse(list,list)
/*сливает 2списка*/
append(list,list,list)
/* Определяет количество нечетных элементов */
count_nech(list,int,int)
/*Определить сколько раз данный элемент входит в список*/
count_member(list,int,int,int)
/* Выведите голову списка */
print_head(list)
 
/* выводит последний элемент*/
print_last(list)
 
/*заменяет голову списка*/
replace_head(list,int,list)
 
/* номер позиции элемента*/
find_pos(list,int,int)
 
/* выводит элемент под номером N*/
find_n(list,int,int)
 
/*удаляет все вхождения элемента */
delete_all(int,list,list)
 
/* предикаты для слияния 2х списков без дублирования элементов*/
delete_wr(int,list,list)
list_set(list,list)
merge_lists(list,list)
 
/* удалить первое вхождение элемента в список */
delete_first(int,list,list)
 
/* складывает поэлементно 2 списка */ 
sum_lists(list,list,list,list)
 
/* складывает 1 список с перевернутым другим поэлементно*/
sum_rev_lists(list,list)
 
/* выводит индекс максимального элемента */
max_index(list,int,int)
 
/* перемещает голову списка в конец списка */
head_back(list)
 
/* сумма максимального и минимального элементов */
find_min(list,int)
find_max(list,int)
sum_min_max(list)
 
/* поменять местами элементы с четной позицией на с нечетной*/
replace_index(list,list,list)
 
/* преобразует цифры числа в список в обратном порядке */
digit_rev(int,list,list)
 
/* увеличить каждый элемент списка на заданное число */
sum_n(list,int,list,list)
 
/* увеличить  элемент c заданным индексом  на заданное число */
sum_n_i(list,int,int,int,list,list)
 
/* все вхождения заданного числа уменьшите на заданное значение*/
dec_n_all(list,int,int,list,list)
 
/* удалить элемент с заданным номером */
del_n(list,int,int,list,list) 
 
/*заменить четные элементы списка на 0*/
 zamena(list,list)
 
 /* пузырьковая сортировка */
 permutation(list,list)
 bubble(list,list)
 
 /* сортировка вставками */
 ins_sort(list,list)
 insert(int,list,list)
 
 /* быстрая сортировка */
 quick_sort(list,list)
 partition(list,int,list,list)
Clauses
 
/* Переворачивает список */
reverse([X], [X]):-!.
reverse ([X | T], Z) :- reverse (T, W), append(W, [X], Z).
/*---------------------------*/
  
  /* сливает 2 списка*/
   append([],L,L):-!.
    append([H|T],P,[H|Y]):-append(T,P,Y).
/*---------------------------------*/
 
/* Количество нечетных элементов-------------------*/
count_nech([],M,M):-!.
count_nech([H|T],M,K):- H mod 2 <>0,M1=M+1,count_nech(T,M1,K).
count_nech([_|T],M,K):- count_nech(T,M,K).
/*------------------------------------------------*/
 
/*Определить сколько раз данный элемент входит в список*/
count_member([],_,M,M):-!.
count_member([H|T],N,K,M):-H=N,K1=K+1,count_member(T,N,K1,M).
count_member([_|T],N,K,M):-count_member(T,N,K,M).
/*---------------------------------------------------*/
 
/* вывести голову списка */
print_head([H|_]):-write(H),nl.
/*-----------------------*/
 
/*выводит последний элемент*/
print_last(L):-reverse(L,[H|_]),write(H),nl.
/*-------------------------*/
/*заменяет голову списка*/
replace_head([],_,[]).
replace_head([_|T],X,[X|T]).
/*---------------------*/
 
 
 
/* номер позиции элемента*/
find_pos([],_,0):-!.
find_pos([H|T],X,K):- X<>H,K1=K+1,find_pos(T,X,K1).
find_pos(_,_,K):-write(K),nl,!.
/*-----------------------------*/
 
/* выведет элемент под номером N*/
find_n([],_,0):-!.
find_n([_|T],N,K):- N<>K,K1=K+1,find_n(T,N,K1).
find_n([H|_],_,_):-write(H),nl,!.
/*--------------------------------*/
 
/* удаление всех вхождений элемента */
delete_all(_, [], []) :-!.
delete_all(X, [X | T], W) :- delete_all(X, T, W),!.
delete_all(X, [Y | T], [Y|W]) :- delete_all(X, T, W) .
/*--------------------------------*/
 
/*  предикаты для слияния 2х списков без дублирования */
delete_wr(_,[],[]).
delete_wr(X,[X|L],L1):-
delete_wr(X,L,L1).
delete_wr(X,[Y|L],[Y|L1]):-
    X<>Y,
    delete_wr(X,L,L1).
list_set([],[]).
list_set([H|T],[H|T1]) :-
    delete_wr(H,T,T2),
    list_set(T2,T1).
merge_lists([],[]).
merge_lists(L1,L2):-append(L1,L2,List),
                      list_set(List,X),write(X).
/*-------------------------------------------------*/
 
/* удаляет первое вхождение элемента*/
    delete_first(X,[X|T],T):-!.
    delete_first(X,[Y|T],[Y|T1]):-delete_first(X,T,T1).
/* суммирует поэлементно два списка */
sum_lists([],[],[],[]).
sum_lists([],[],M,M).
sum_lists([H1|T1],[H2|T2],L,List):-N=H1+H2,
                                   append([N],L,List2),
                                   sum_lists(T1,T2,List2,List).
    /*---------------------------------------------------*/                            
/* складывает 1 список с перевернутым другим поэлементно*/
sum_rev_lists(L1,L2):-             reverse(L2,L),
                                   sum_lists(L1,L,[],List),
                                   write(List).
/* выводит индекс максимального элемента */
max_index([Head|Tail],Result,N):-
max_index(Tail,Result,Nr),Result>Head,N=Nr+1,!.
max_index([Head|_],Head,1).
/*-----------------------------------------------------------*/
 
/* перемещает голову назад */
head_back([]).
head_back([H|T]):- append(T,[H],List),
write(List).
 
 
/* найти сумму максимального и минимального элементов*/
  find_min([X],X).
  find_min([X,Y|T],Min):-X>Y,find_min([Y|T],Min).
  find_min([X,Y|T],Min):-X<=Y,find_min([X|T],Min).
 
  find_max([X],X).
  find_max([X,Y|T],Max):-X<=Y,find_max([Y|T],Max).
  find_max([X,Y|T],Max):-X>Y,find_max([X|T],Max).
  
  sum_min_max(List):-find_min(List,Min),
                     find_max(List,Max),
                     S=Max+Min,
                     write(S).
                     /*---------------------------*/
/* меняет местами элементы с четными и нечетными индексами */
replace_index([],M,M).
replace_index([X,Y|T],L,List):-append(L,[Y],L1),
                               append(L1,[X],L2),
                               replace_index(T,L2,List).
                               /*----------------------------*/
/* преобразует цифры числа в список в обратном порядке */
digit_rev(0,M,M):-!.
digit_rev(N,L,List):-M=N mod 10,D=N div 10,append(L,[M],L2),digit_rev(D,L2,List).  
/*----------------------------------------------------------*/
 
/* увеличить каждый элемент списка на заданное число */
sum_n([],_,M,M):-!.
sum_n([H|T],N,L,List):-H1=H+N,
                       append(L,[H1],L2),
                       sum_n(T,N,L2,List).
/*---------------------------------------------------*/
 
/* увеличить  элемент c заданным индексом  на заданное число */
sum_n_i([],_,_,_,M,M):-!.
sum_n_i([H|T],Index,N,I,L,List):- Index<>I,Index1=Index+1, append(L,[H],L2),sum_n_i(T,Index1,N,I,L2,List).
sum_n_i([H|T],Index,N,I,L,List):-H1=H+N,Index1=Index+1,append(L,[H1],L2),sum_n_i(T,Index1,N,I,L2,List).
/*--------------------------------------------------------*/
 
/* все вхождения заданного числа уменьшите на заданное значение*/
dec_n_all([],_,_,M,M):-!.
dec_n_all([H|T],N,K,L,List):- H<> N,append(L,[H],L2),dec_n_all(T,N,K,L2,List).
dec_n_all([_|T],N,K,L,List):- H1=N-K,append(L,[H1],L2),dec_n_all(T,N,K,L2,List).
 
/* удалить элемент с заданным номером */
del_n([],_,_,M,M):-!.
del_n([H|T],Index,N,L,List):- Index<> N,Index1=Index+1,append(L,[H],L2),del_n(T,Index1,N,L2,List).
del_n([_|T],Index,N,L,List):- Index1=Index+1,del_n(T,Index1,N,L,List).
 
/*заменить четные элементы списка на 0*/
 zamena([],[]).
 zamena(L,L1):-L=[X|T], X mod 2=0,zamena(T,L2),L1=[0|L2].
 zamena(L,L1):-L=[X|T], X mod 2<>0, zamena(T,L2),L1=[X|L2].
 
 /* пузырьковая сортировка */
 permutation([X,Y|T],[Y,X|T]):–X>Y,!.
 permutation([X|T],[X|T1]):–permutation(T,T1).
                             
  bubble(L,L1):– permutation(L,LL), !,bubble(LL,L1). 
  bubble(L,L). 
/*-----------------------------*/
 
/* сортировка вставками */
ins_sort([ ],[ ]).
ins_sort([H|T],L):–ins_sort(T,T_Sort),insert(H,T_Sort,L).
insert(X,[],[X]). 
insert(X,[H|T],[H|T1]):– X>H,!, insert(X,T,T1).                    
insert(X,T,[X|T]). 
/*------------------------*/
 
/* быстрая сортировка */
quick_sort([],[]). 
quick_sort([H|T],O):–partition(T,H,L,G), quick_sort(L,L_s), quick_sort(G,G_s),append(L_s,[H|G_s],O).
partition([],_,[],[]). 
partition([X|T],Y,[X|T1],Bs):– X<Y,!,partition(T,Y,T1,Bs).
partition([X|T],Y,T1,[X|Bs]):–partition(T,Y,T1,Bs).
/*--------------------*/                    
 
Goal
 
 
/* 1 количество нечетных элементов */
count_nech([1,2,3,4,5,6,7,8,9,10],0,K),write(K),nl,
 
/* 2 Определить сколько раз данный элемент входит в список */
count_member([1,2,3,4,3,5,3],3,0,L),write(L),nl,
/* 3 выводит голову списка*/
print_head([1,2,3,4]),
/* 4 выводит последний элемент */
print_last([1,2,3,4]),
/* 5 заменяет голову списка*/
replace_head([1,2,3,4],10,[H|T]),write(H),nl,
/* 6 выводит индекс элемента*/
find_pos([1,2,3,4],3,1),
/* 7 выводит элемент под номером N*/ 
find_n([1,2,3,4],2,1),
/* 8 удаляет все вхождения */
delete_all(5,[1,2,5,6,5,7,5],X),write(X),nl,
/* 9 слияние 2х списков */
append([1,2,3,4],[5,6,7],Y),write(Y),nl,
/* 10 список в обратном порядке */
reverse([1,2,3,4,5],Z),write(Z),nl,
/* 11 слияние 2х списков без дублирования элементов */
merge_lists([1,2,3,4,5],[2,3,4,5,6]),nl,
/*12 удаляет первое вхождение элемента в список*/
delete_first(1,[2,3,1,4,1,5],Del),write(Del),nl,
/* 13 сложить поэлементно два списка */
sum_lists([1,2,3,4,5],[5,4,3,2,1],[],List),write(List),nl,
/* 14 складывает 1 список с перевернутым другим поэлементно*/
sum_rev_lists([1,2,3,4,5],[1,2,3,4,5]),nl,
/* 15 выводит количество предшествующих элементов максимальному*/
max_index([1,2,3,34,4,5],_,M),Count=M-1,write(Count),nl,
/* 16 переместить голову в конец */
head_back([5,1,2,3,4]),nl,
/* 17 cумма минимального и максимального элементов в списке */
sum_min_max([1,2,3,4,5,9]),nl,
/* 18 поменять местами элементы с четной позицией на с нечетной*/
replace_index([2,1,4,3,6,5],[],Rep),write(Rep),nl,
/* 19 преобразует цифры числа в список в обратном порядке */
digit_rev(12345,[],Dig),write(Dig),nl,
/* 20 увеличить каждый элемент списка на заданное число */
sum_n([1,2,3,4,5],5,[],List2),write(List2),nl,
/* 21 увеличить  элемент c заданным индексом  на заданное число */
sum_n_i([1,2,3,4,5],1,2,3,[],List3),write(List3),nl,
/* 22 все вхождения заданного числа уменьшите на заданное значение*/
dec_n_all([1,4,3,4,2,4,5],4,2,[],List4),write(List4),nl,
/* 23 удалить элемент с заданным номером */
del_n([1,2,3,3,4,5],1,3,[],List5),write(List5),nl,
/* 24 заменить четные элементы списка на 0*/
 zamena([1,2,3,4,5,6,7,8,9,10],List6),write(List6),nl,
 /*25 пузырьковая сортировка */
 bubble([2,1,4,3,5,7,6],List7),write(List7),nl,
 /*26 сортировка вставками */
 ins_sort([2,1,4,3,5,7,6],List8),write(List8),nl,
  /*27 быстрая сортировка  */
 quick_sort([2,1,4,3,5,7,6],List9),write(List9),nl.
28.1
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Domains
int=integer
str=string
list=int*
Predicates
ten(str,int,int)
print(int)
show(list,list,int)
Clauses
ten("Иванов",1,25).
ten("Сидоров",3,45).
ten("Петров",2,21).
ten("Лобанов",4,30).
ten("Петренко",5,63).
 
print(N):-findall(X,ten(_,_,X),L),
          findall(Y,ten(_,Y,_),L2),
          show(L,L2,N).
show([],[],_).
show([H|T],[_|Z],N):-H>N,show(T,Z,N).
show([H|T],[X|Z],N):-H<=N,ten(Y,X,H),write(Y," - " ,X),nl,show(T,Z,N).
Goal
print(26).
28.2
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Domains
int=integer
str=string
list=int*
Predicates
stud(str,int,int)
print(int)
find_max(list,int)
Clauses
stud("Иванов",17,2500).
stud("Сидоров",18,4500).
stud("Петров",17,2100).
stud("Лобанов",18,3000).
stud("Петренко",17,4500).
 
print(K):-stud(X,Y,K),
          write(X," - ",Y),nl,
          fail.
 
  find_max([X],X).
  find_max([X,Y|T],Max):-X<=Y,find_max([Y|T],Max).
  find_max([X,Y|T],Max):-X>Y,find_max([X|T],Max).
Goal
findall(X,stud(_,_,X),L),
find_max(L,K),write("Макс размер стипендии -",K, " : "),nl,
print(K).
28.3
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Domains
int=integer
str=string
list=int*
Predicates
worker(str,int)
sum(list,int)
length(list,int)
print(int)
avg(list,int)
Clauses
worker("Иванов",2500).
worker("Сидоров",4500).
worker("Петров",2100).
worker("Лобанов",3000).
worker("Петренко",4500).
 
sum([], 0). 
sum([H|T], S) :-sum(T, S_T),S = S_T + H. 
 
length([], 0). 
length([_|T], L) :- length(T, L_T), L = L_T + 1.
 
 
avg(L,A):-sum(L,S),length(L,K),A=S/K.
 
print(K):-worker(X,Y),K>=Y,write(X," - ",Y),nl,fail.
 
Goal
findall(X,worker(_,X),L),
avg(L,K),write("Cреднее з/п -",K, " : "),nl,
print(K).
28.4
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Domains
list=symbol*
fam,im=symbol
Predicates
student(fam,im)
count_st(list,integer)
 
go(symbol)
Clauses
student(tatarkanov,eldar).
student(shalov,muxa).
student(karova,ruzanna).
student(kalazhokova,marianna).
student(tatarkanov,ruslan).
student(shalov,azret).
count_st([],0):-!.
count_st([H|T],C):-count_st(T,C1),write(H),nl,C=C1+1.
go(F):-findall(X,student(F,X),L),count_st(L,A),write("Count :",A),nl.
21
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2012, 21:30
Ответы с готовыми решениями:

Списки, строки и файлы
Здравствуйте, помогите пожалуйста с парой задач. 1.Написать программу, которая строит список из сумм соответствующих подсписков. то есть...

2 задачи файлы списки
Дан двоичный файл целых чисел. Найти сумму четных элементов 2)найти сумму всех нечетных элементов односвязного списка целых чисел

Не решенные задачи
Если кто знает эти задания, знает сколько их всего. Я сделал около 30 задач, а вот с этими не справился. Если кому не сложно, то помогите...

13
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
26.06.2012, 21:34  [ТС]
Строки
1. Ввести символьную строку со знаками препинания. Определить в ней количество слов.
2. Написать программу, считывающую произвольные предложения и выводящую их в форматированном виде, в котором все группы идущих подряд пробелов заменены на одиночные пробелы.
3. Ввести строку. Преобразовать введенную строку в список слов, упорядоченных лексикографически.
4. Ввести строку. Вычислить минимальную и максимальную длины слов строки.

5. Создайте предикат, который будет удалять из данной строки все вхождения заданного символа.
6. Создайте предикат, удаляющий из данной строки все повторные вхождения символов.
7. Создайте предикат, который продублирует вхождение каждого символа в строку.
8. Создайте предикат, "переворачивающий" строку (меняющий в строке порядок символов на обратный).
9. Создайте предикат, проверяющий, является ли данная строка палиндромом.
10. Создайте предикат, составляющий список символов, которые входят одновременно в обе данных строки.
11. Создайте предикат, преобразующий строку в список слов, состоящих из четного количества символов.
12. Создайте предикат, преобразующий строку в список слов, которые упорядочены по длине.
13. Создайте предикат, преобразующий исходную строку в строку, состоящую из первых букв слов первоначальной строки.
14. Создайте предикат, преобразующий исходную строку в строку, состоящую из последних букв слов первоначальной строки.
15. Создайте предикат, проверяющий правильность расстановки скобок в исходной строке.
16. Создайте предикат, меняющий местами первую и последнюю буквы в каждом слове исходной строки.

P.S. Хочу упомянуть о том,что некоторые задачи решены через списки(в виду недостаточности времени отведенное на их решение),так что не обессудьте.
P.S.S В архиве нет 16,так как этот предикат есть в этой теме,под названием oaw!
Вложения
Тип файла: zip строки.zip (8.8 Кб, 1748 просмотров)
8
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
26.06.2012, 21:45  [ТС]
Файлы,
Вывести на экран данные файла в неубывающем порядке
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
domains 
  file = infile 
  int_list = integer* 
predicates 
  load_from_file(int_list) 
  sort(int_list, int_list) 
  insert(integer, int_list, int_list) 
  run 
clauses 
%Предикат чтения чисел из файла в список 
  load_from_file([ ]) :- eof(infile), !.
  load_from_file([H | T]) :- not (eof(infile)), 
    readint(H), load_from_file(T). 
%Предикат сортировки списка методом вставок 
  sort([ ], [ ]). 
  sort([H | T], L) :- sort(T, S), insert(H, S, L). 
%Вспомогательный предикат - вставка элемента на своё место 
  insert(X,[H | T],[H | T1]) :- X > H, !,insert(X, T, T1). 
  insert(X, T, [X | T]). 
 
  run :- openread(infile, "input.txt"), 
    readdevice(infile), 
    load_from_file(L), 
    closefile(infile), 
    readdevice(keyboard), 
    write("Содержимое файла:"), nl, 
    write(L), nl, 
    sort(L, L2), 
    write("Отсортированный список:"), nl, 
    write(L2), nl, 
    write("Для завершения работы нажмите любую клавишу..."), 
    readchar(_). 
goal 
  run .
Файл текстового формата input.txt должен лежать рядом с исполняемым файлом программы (в одной папке). 
Его содержимое - целые числа, причём, каждое число должно быть записано на отдельной строке.   
Записать результат сложения чисел, содержащихся в файлах в третий.
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
domains
file=file_in;file_out
i=integer
 
predicates
load_from_file(i)
 
Clauses
load_from_file(A):-readint(A).
 
Goal
 
openread(file_in,"Slag1.txt"),readdevice(file_in),load_from_file(A),closefile(file_in),
openread(file_in,"Slag2.txt"),readdevice(file_in),load_from_file(B),closefile(file_in),
C=A+B,
openwrite(file_out,"result.txt"),writedevice(file_out),write(C),closefile(file_out),write(C),readchar(_).
Переписать данные файла в обратном порядке
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
predicates
    rvs( string, string )
clauses       
    rvs("",""):-!.
    rvs(Si,So):-
        frontchar(Si,C0,S0), rvs(S0,S1), 
        str_char(SC0,C0), concat(S1,SC0,So).
goal
    file_str("input.txt",S), write( S ), nl,
    rvs( S, SS ), write( SS ), nl,
    file_str("output.txt", SS ).
Переписать числа из файла в другой, дописав за каждым его квадрат.

Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
domains     
    strElement=string
    strList=strElement*
    intElement=integer
    intList=intElement*
predicates
/************************преобразование в список*/
    separ(string,strlist)
        scan (string,strlist,string)
/************************************************/
/******преобразование списка слов в список чисел*/
    convertStrListToIntList(strList,intList)
        csltil(intList,intList,strElement)
/************************************************/
/*******************дополнение списка квадратами*/
    p( intList, intList )
/************************************************/
 
clauses       
/************************преобразование в список*/   
    separ(Str,[T|L]):-
        frontchar(Str,S3,S2),
        str_char(S5,S3),
        scan(S2,[T|L],S5),!.
    separ(_,[]).
    scan(Str,[T|L],S):-
        frontchar(Str,S3,S2),
        NOT(S3=' '),
        str_char(S5,S3),
        concat(S,S5,S1),
        scan(S2,[T|L],S1),!.
    scan("",[T|L],S):-
        T=S,separ("",L).
    scan(Str,[T|L],S):-
        T=S,frontchar(Str,_,S2),
        separ(S2,L),!.
/************************************************/ 
/******преобразование списка слов в список чисел*/ 
    convertStrListToIntList([],[]):-!.
    convertStrListToIntList([HS|TS],LI):-
        convertStrListToIntList(TS,TI),
        csltil(TI,LI,HS).
    csltil(TL,[HI|TL],HS):-
        str_int(HS,HI),!.
    csltil(TL,TL,_):-!.
/************************************************/
/*******************дополнение списка квадратами*/
    p( [], [] ).
    p( [H|T], [H|[HH|TT]] ):-
        HH = H*H, p(T,TT).
/************************************************/
 
goal
    %S="1 2 3 4 12 asd 24 12",
    file_str("input.txt",S),
    separ(S,LS),
    convertStrListToIntList(LS,IL),
    write(IL),nl,
    p(IL,RL), write(RL),nl.
Добавлено через 3 минуты
Бд

Напишите программу, моделирующую компьютерную версию англо-русского словаря. Пользователь должен иметь возможность получать перевод как русских, так и английских слов, а также добавлять в словарь новые слова.
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Domains
    EN_slovo, RU_slovo= string 
Database
    dslovar(EN_slovo, RU_slovo)
Predicates
    repeat
    do_mbase
    assert_database
    menu
    process(integer)
    clear_database
    slovar(EN_slovo, RU_slovo)
    error
Goal
    do_mbase.
Clauses
    repeat.
    repeat:-repeat.
            /*┴рчр фрээ√ї ЇєЄсюы*/
    slovar("pen","ручка").
    slovar("home","дом").
    slovar("car","машина").
    slovar("cat","кошка").
    slovar("mouse","мышка").
    slovar("delete","удалить").
            /*ъюэхЎ эрўры№э√ї фрээ√ї*/
    assert_database:-
    slovar(EN_slovo,RU_slovo),  assertz(dslovar(EN_slovo,RU_slovo)),
    fail.
    assert_database:-!.
 
    clear_database:-
        retract(dslovar(_,_)),
        fail.
    clear_database:-!.
    do_mbase :-
        assert_database,
        makewindow(1,7,7," СЛОВАРЬ ",0,0,25,80),
        menu,
        clear_database.
    menu :-
        repeat, clearwindow,
        nl,
        write(" ************************************* "),nl,
        write(" * 1. Добавление нового слова в БД  * "),nl,
        write(" * 2. Удаления слова из БД          * "),nl,
        write(" * 3. Просмотр слов на русском      * "),nl,
        write(" * 4. Просмотр слов на английском      * "),nl,
        write(" * 5. Вызод из программы            * "),nl,
        write(" ************************************* "),nl,
        write(" Пожалуйста сделайте свой выбор 1, 2, 3, 4 до 5 : "),
        readint(Vibor),nl,process(Vibor),Vibor = 5,!.
        /* ─юсртыхэшх ёыютр т ┴─ */
    process(1) :-
        makewindow(2,7,7,"Добавление слов",2,20,18,58),shiftwindow(2),
        write("Введите пожалуйста:"),nl,
        write("Слова на английском:"), readln(EN_slovo), 
        write("Перевод:"), readln(RU_slovo),
        assertz(dslovar(EN_slovo, RU_slovo)),
        write(EN_slovo,"Добавлен в БД"), nl,!,
        write("Press space bar. "), readchar(_), 
        removewindow, shiftwindow(1).
            /* ╙фрыхэшх */
    process(2) :-
        makewindow(3,7,7,"Удаление слов",10,30,7,40),shiftwindow(3),
        write("Введите слово: "), readln(EN_slovo),
        retract(dslovar(EN_slovo,_)), 
        write(EN_slovo," Удален из БД "), nl, !,
        write("Press space bar."), readchar(_), removewindow,
        shiftwindow(1).
            /* ╧ЁюёьюЄЁ фрээ√ї юс шуЁюъх*/ 
    process(3) :-
        makewindow(4,7,7," Просмотр слов ", 7,30,16,47),  shiftwindow(4),
        write("Введите слова для просмотра: "), readln(EN_slovo),
        dslovar(RU_slovo,EN_slovo),nl, 
        write(" Слово         : ",RU_slovo),nl,
        write(" Перевод       : ",EN_slovo),nl,
        write("Press space bar"), readchar(_),  
        removewindow, shiftwindow(1).
    process(3) :-
        makewindow(5,7,7," Неудача ",14,7,5,60), shiftwindow(5),
        write("К сожалению, такого слова нет."),nl,
        write("Press space bar."),readchar(_),
        removewindow,shiftwindow(1).
            /* ┬√їюф */
    process(4):-        
        makewindow(4,7,7," Просмотр слов ", 7,30,16,47),  shiftwindow(4),
        write("Введите слова для просмотра: "), readln(EN_slovo),
        dslovar(EN_slovo,RU_slovo),nl, 
        write(" Слово         : ",EN_slovo),nl,
        write(" Перевод       : ",RU_slovo),nl,
        write("Press space bar"), readchar(_),  
        removewindow, shiftwindow(1).
    process(4) :-
        makewindow(5,7,7," Неудача ",14,7,5,60), shiftwindow(5),
        write("К сожалению, такого слова нет."),nl,
        write("Press space bar."),readchar(_),
        removewindow,shiftwindow(1).    
    process(5) :-
        write("Уже выходите? Ну ладно...."),readchar(_),exit.
            /*╬сЁрсюЄър ю°шсъш*/
    process(Vibor):-
        Vibor<1, error; Vibor>5, error.
    error:- 
        write("Пожалуйста выберите число от 1 до 5"),
        write("(Press the spase bar to continue)"),readchar(_).
Напишите программу, моделирующую компьютерную версию географического справочника, содержащего информацию о столицах стран. Пользователь должен иметь возможность получать название столицы по названию страны, название страны по названию столицы, добавлять в справочник новую информацию, изменять существующую (например, в ситуации, когда столица "переезжает" в другой город).
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Domains
    Name_strana, Name_stolica= string 
Database
    dstrana(Name_strana, Name_stolica)
Predicates
    repeat
    do_mbase
    assert_database
    menu
    process(integer)
    clear_database
    strana(Name_strana, Name_stolica)
    error
Goal
    do_mbase.
Clauses
    repeat.
    repeat:-repeat.
        
    strana("Russia","Moscow").
    strana("Sweden","Stockholm ").
    strana("Ukraine","Kiev").
    strana("Great Britain","London").
    strana("Germany","Berlin").
    strana("France","Paris").
            
    assert_database:-
    strana(Name_strana,Name_stolica),   assertz(dstrana(Name_strana,Name_stolica)),
    fail.
    assert_database:-!.
 
    clear_database:-
        retract(dstrana(_,_)),
        fail.
    clear_database:-!.
    do_mbase :-
        assert_database,
        makewindow(1,7,7," Strani i stolici",0,0,25,80),
        menu,
        clear_database.
    menu :-
        repeat, clearwindow,
        nl,
        write(" ************************************ "),nl,
        write(" * 1. Novaia strana                 * "),nl,
        write(" * 2. Ydalenie strani               * "),nl,
        write(" * 3. Prosmotr stolic               * "),nl,
        write(" * 4. Prosmotr stran                * "),nl,
        write(" * 5. Vihod                         * "),nl,
        write(" ************************************* "),nl,
        write(" Sdelaite svoi vibor 1, 2, 3, 4 ili 5 : "),
        readint(Vibor),nl,process(Vibor),Vibor = 5,!.
    
    process(1) :-
        makewindow(2,7,7,"Dobavit strany",2,20,18,58),shiftwindow(2),
        write("‚Vvedite pogalyista:"),nl,
        write("Nazvanie strani:"), readln(Name_strana), 
        write("Nazvanie stolici:"), readln(Name_stolica),
        assertz(dstrana(Name_strana, Name_stolica)),
        write(Name_strana,"Dobavleno v BD"), nl,!,
        write("Press space bar. "), readchar(_), 
        removewindow, shiftwindow(1).
        
            
    process(2) :-
        makewindow(3,7,7,"Ydalenie",10,30,7,40),shiftwindow(3),
        write("‚Vvedite strany: "), readln(Name_strana),
        retract(dstrana(Name_strana,_)), 
        write(Name_strana," “Ydaleno iz BD "), nl, !,
        write("Press space bar."), readchar(_), removewindow,
        shiftwindow(1).
            
    process(3) :-
        makewindow(4,7,7," Prosmotr solic ", 7,30,16,47),  shiftwindow(4),
        write("Vvedite strany dlia prosmotra: "), readln(Name_strana),
        dstrana(Name_stolica,Name_strana),nl, 
        write(" Nazvanie stolici     : ",Name_stolica),nl,
        write(" Nazvanie strani      : ",Name_strana),nl,
        write("Press space bar"), readchar(_),  
        removewindow, shiftwindow(1).
    process(3) :-
        makewindow(5,7,7," Neudacha",14,7,5,60), shiftwindow(5),
        write("Takoi strani net."),nl,
        write("Press space bar."),readchar(_),
        removewindow,shiftwindow(1).
            
    process(4):-        
        makewindow(4,7,7," Prosmotr stran ", 7,30,16,47),  shiftwindow(4),
        write("Vvedite strany dlia prosmotra : "), readln(Name_strana),
        dstrana(Name_strana,Name_stolica),nl, 
        write("Nazvanie stolici    : ",Name_strana),nl,
        write("Nazvanie strani     : ",Name_stolica),nl,
        write("Press space bar"), readchar(_),  
        removewindow, shiftwindow(1).
    process(4) :-
        makewindow(5,7,7," Neudacha",14,7,5,60), shiftwindow(5),
        write("Takoi strani net."),nl,
        write("Press space bar."),readchar(_),
        removewindow,shiftwindow(1).    
    process(5) :-
        write("do novih vstrech"),readchar(_),exit.
            
    process(Vibor):-
        Vibor<1, error; Vibor>5, error.
    error:- 
        write("Viberete chislo ot 1 do 5"),
        write("(Press the spase bar to continue)"),readchar(_).
Напишите программу, моделирующую компьютерную версию книжного каталога, содержащего информацию о книгах, их авторах и т.д. Пользователь должен иметь возможность: узнать названия книг по фамилии автора, и наоборот, фамилию автора по названию книги; добавлять в каталог новую информацию о книгах; изменять существующую и удалять устаревшую информацию.
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Domains
book_name,author,pub_house=string
file=f
Database
catalog(book_name,author)
Predicates
aut_book_name(book_name,author)
book_name_aut(book_name,author)
m(char)
menu
start
Clauses
aut_book_name(name,auth):- catalog(name,auth),!.
book_name_aut(name,auth):-catalog(name,auth),!.
menu:-
     clearwindow, 
     write("1 Получение наименовании книги по автору"),nl,
     write("2 Получения сведений об авторе по наименованию книги"),nl,
     write("3 Добавление новой записи в книжный каталог."),nl, 
     write("4 Изменение наименования книги"),nl, 
     write("5 Удаление записи из книжного каталога"),nl,
     write("0 Выйти"),nl,
     readchar(C), m(C). 
m('1'):- 
       clearwindow, 
       write("Введите автора:"), nl, 
       readln(Auth),
       aut_book_name(Name, Auth), 
       write("Наименование книги: ",Name), 
       readchar(_), 
menu,!.
m('1'):-write("Книги с таким автором нет в каталоге!"),readchar(_),menu.
m('2'):- 
       clearwindow, 
       write("Введите наименование книги:"),nl,
       readln(Name),
       book_name_aut(Name, auth),
       write("Автор: ",auth),
       readchar(_),
       menu.
m('2'):-write("В базе нет такой книги с этим автором!"),readchar(_),menu.
m('3'):- 
       clearwindow, 
       write("Введите наименование книги:"),nl,
       readln(Name),
       write("Введите автора:"),nl,
       readln(Auth),
       assert(catalog(Name,Auth)),write("Операция добавления прошла успешно!"),readchar(_), menu,!.
m('3'):-write("Ошибка!Не удалось добавить в базу!"),readchar(_),menu.
m('4'):- 
       clearwindow, 
       write("Введите автора:"),nl,                                       
       readln(Auth),
       write("Введите новое название книги:"),nl,
       readln(Name),
       retract(catalog(_,Auth)), 
       assert(catalog(Name,Auth)),write("Процесс переименования прошел успешно!"),readchar(_),menu,!.
m('4'):-write("Ошибка!Не удалось переименовать книгу!"),readchar(_),menu.
 
m('5'):- 
       clearwindow, 
       write("Укажите наименование книги,запись о которой нужно удалить"), nl, 
       readln(Name), 
       retract(catalog(Name,_)),write("Процесс удаления прошел успешно!"),readchar(_), 
       menu,!.
m('5'):-write("Ошибка!Нет такой книги в каталоге!"),readchar(_),menu.
m('0'):- 
save("catalog.ddb "), 
retractall(_).
m(_):- 
       menu. 
start:-
       existfile("catalog.ddb"),!, 
       consult("catalog.ddb"),
       menu. 
start:-
       openwrite(f,"catalog.ddb"),
       closefile(f),
       menu. 
GOAL 
Start
Напишите программу, моделирующую компьютерную версию расписания авиарейсов, содержащего информацию о номерах рейсов и соответствующих пунктах назначения. Пользователь должен иметь возможность: узнать название пункта прибытия самолета по номеру рейса, и наоборот, номер рейса по названию пункта прибытия; добавлять в справочник новую информацию о рейсах; изменять существующую и удалять устаревшую информацию.
Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Domains
    Punkt_name, Namber= string 
Database
    dreis(Punkt_name, Namber)
Predicates
    repeat
    do_mbase
    assert_database
    menu
    process(integer)
    clear_database
    reis(Punkt_name, Namber)
    error
Goal
    do_mbase.
Clauses
    repeat.
    repeat:-repeat.
        
    reis("Russia","3").
    reis("Sweden","2 ").
    reis("Ukraine","1").
    reis("Great Britain","5").
    reis("Germany","6").
    reis("France","7").
            
    assert_database:-
    reis(Punkt_name,Namber),    assertz(dreis(Punkt_name,Namber)),
    fail.
    assert_database:-!.
 
    clear_database:-
        retract(dreis(_,_)),
        fail.
    clear_database:-!.
    do_mbase :-
        assert_database,
        makewindow(1,7,7," Strani i stolici",0,0,25,80),
        menu,
        clear_database.
    menu :-
        repeat, clearwindow,
        nl,
        write(" ************************************ "),nl,
        write(" * 1. Novii reis                    * "),nl,
        write(" * 2. Ydalenie reisa                * "),nl,
        write(" * 3. Prosmotr nomera reisa         * "),nl,
        write(" * 4. Prosmotr punkta pribitia      * "),nl,
        write(" * 5. Vihod                         * "),nl,
        write(" ************************************* "),nl,
        write(" Sdelaite svoi vibor 1, 2, 3, 4 ili 5 : "),
        readint(Vibor),nl,process(Vibor),Vibor = 5,!.
    
    process(1) :-
        makewindow(2,7,7,"Dobavit reis",2,20,18,58),shiftwindow(2),
        write("‚Vvedite pogalyista:"),nl,
        write("Nazvanie punkt:"), readln(Punkt_name), 
        write("Nazvanie nomer reisa:"), readln(Namber),
        assertz(dreis(Punkt_name, Namber)),
        write(Punkt_name,"Dobavleno v BD"), nl,!,
        write("Press space bar. "), readchar(_), 
        removewindow, shiftwindow(1).
        
            
    process(2) :-
        makewindow(3,7,7,"Ydalenie",10,30,7,40),shiftwindow(3),
        write("‚Vvedite punkt: "), readln(Punkt_name),
        retract(dreis(Punkt_name,_)), 
        write(Punkt_name," “Ydaleno iz BD "), nl, !,
        write("Press space bar."), readchar(_), removewindow,
        shiftwindow(1).
            
    process(3) :-
        makewindow(4,7,7," Prosmotr reisov po nomeru reisa ", 7,30,16,47),  shiftwindow(4),
        write("Vvedite nomer dlia prosmotra: "), readln(Punkt_name),
        dreis(Namber,Punkt_name),nl, 
        write(" Nomer reisa        : ",Namber),nl,
        write(" Punkt pribitia     : ",Punkt_name),nl,
        write("Press space bar"), readchar(_),  
        removewindow, shiftwindow(1).
    process(3) :-
        makewindow(5,7,7," Neudacha",14,7,5,60), shiftwindow(5),
        write("Takogo reisa net."),nl,
        write("Press space bar."),readchar(_),
        removewindow,shiftwindow(1).
            
    process(4):-        
        makewindow(4,7,7," Prosmotr punktov pribitiia ", 7,30,16,47),  shiftwindow(4),
        write("Vvedite punkt naznachenia dlia prosmotra : "), readln(Punkt_name),
        dreis(Punkt_name,Namber),nl, 
        write("Punkt pribitia  : ",Punkt_name),nl,
        write("Nomer reisa     : ",Namber),nl,
        write("Press space bar"), readchar(_),  
        removewindow, shiftwindow(1).
    process(4) :-
        makewindow(5,7,7," Neudacha",14,7,5,60), shiftwindow(5),
        write("Takogo punkta pribitia net."),nl,
        write("Press space bar."),readchar(_),
        removewindow,shiftwindow(1).    
    process(5) :-
        write("do novih vstrech"),readchar(_),exit.
            
    process(Vibor):-
        Vibor<1, error; Vibor>5, error.
    error:- 
        write("Viberete chislo ot 1 do 5"),
        write("(Press the spase bar to continue)"),readchar(_).
6
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 18
11.12.2012, 13:39
На каком интерпретаторе это всё работает?
0
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
11.12.2012, 13:44  [ТС]
Turbo Prolog,Windows 7,я думаю что несложно будет и visual prolog сделать.
1
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 18
11.12.2012, 13:45
Ок.. А как перевести всё это например в сви пролог??
0
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
11.12.2012, 13:51  [ТС]
А ты логику просмотри,там же просто все,я попытался написать самым логичным(не самым лучшим) образом,чтобы люди могли разобраться
1
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 18
11.12.2012, 13:52
Спасибо.
0
 Аватар для rowest
7 / 7 / 0
Регистрация: 17.06.2013
Сообщений: 34
27.10.2013, 18:45
Цитата Сообщение от REALIST07 Посмотреть сообщение
2) Определите, сколько раз заданный элемент входит в список.
Можно еще вот таким образом решить (попроще, как мне кажется):
Prolog Скопировано
1
2
acount(_, [], 0).
acount(X, [H|T], N):- X == H, acount(X, T, N1),  N is N1+1; acount(X, T, N).
Пример вызова:
Prolog Скопировано
1
2
3
JIP:-acount(a, [a, b, c, d, a, e, d, e, f, t, a, p, a, a], N).
Yes
N = 5
0
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 2
29.11.2013, 21:01
Народ, вот пробовал я загнать решение задачи переписать элементы списка в обратном порядке с сохранением упорядоченности в Strawberry Prolog

Prolog Скопировано
1
2
3
4
reverse([X],[X]): - !.
reverse([X|T],Z):-reverse(T,W),append(W,[X],Z).
?-
reverse([1,2,3,4,5],Z),write(Z),nl.
вот только ни фига он мне не выводит. Подскажите, в чем трабла?

Добавлено через 21 минуту
Все народ, уже не надо, использовал вот эту штуку, все работает))
Prolog Скопировано
1
2
3
4
5
rev(Y,[],Y).
rev(X,Y):-rev([],X,Y).  
rev(X1,[Z|X2],Y):-rev([Z|X1],X2,Y). 
?-
rev([2,1,4,3,5,7,6],L),write(L),nl.
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,328
23.05.2016, 14:08
вкусняшки
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37884 / 20951 / 4292
Регистрация: 12.02.2012
Сообщений: 34,460
Записей в блоге: 14
18.03.2017, 11:18
Ханойская башня:

Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
predicates
fre(symbol,symbol,symbol)
move(symbol,symbol)
hanoi(integer,symbol,symbol)
 
clauses
fre(a,b,c).
fre(a,c,b).
fre(b,a,c).
fre(b,c,a).
fre(c,a,b).
fre(c,b,a).
 
move(From,To) :- write("Move disk from "),write(From),write(" to "),write(To),nl.
 
hanoi(1,From,To) :- move(From,To).
hanoi(N,From,To) :- fre(From,To,Fre), N1=N-1, hanoi(N1,From,Fre),move(From,To), hanoi(N1,Fre,To).
1
Amabile opus
 Аватар для 4eDo
109 / 65 / 25
Регистрация: 08.01.2019
Сообщений: 308
09.12.2019, 18:24
Prolog: Быстрая сортировка; ввод массива с клавиатуры.

Prolog Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
domains
    int=integer
    list=int*
    
predicates
    % Ввод массива
        read_list(list)
 
    % Вывод массива
 
        write_list(list)
    % Объединение списков
        append(list,list,list)
 
    %быстрая сортировка
        quick_sort(list,list)
        partition(list,int,list,list)
 
    %предикат запуска программы
        input
clauses
 
    read_list([Head|Tail]):-
        readint(Head), !,
        read_list(Tail).
        
    read_list([]).
 
    write_list([Head|Tail]):-
        write(Head," "),
        write_list(Tail).
    
    write_list([]).
 
    append([],L,L):-!.
    
    append([H|T],P,[H|Y]):-
        append(T,P,Y).
 
    quick_sort([],[]).
    
    quick_sort([H|T],O):-
        partition(T,H,L,G),
        quick_sort(L,L_s),
        quick_sort(G,G_s),
        append(L_s,[H|G_s],O).
        
    partition([],_,[],[]).
    
    partition([X|T],Y,[X|T1],Bs):-
        X<Y,!,
        partition(T,Y,T1,Bs).
        
    partition([X|T],Y,T1,[X|Bs]):-
        partition(T,Y,T1,Bs).
        
    input:-
        write("Enter element value or empty string to finish: "),nl, 
        read_list(List1),
        quick_sort(List1,List),
        write_list(List),nl.
goal
    input
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,328
11.12.2019, 13:52
все уже давно есть
sorts#Quick
см. ранее
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.12.2019, 13:52
Помогаю со студенческими работами здесь

Как переписать задачи на С++, решенные ранее на Java?
Имеется 10 задач на яве. Помогите сделать на С++. 1. Сумма чисел до 0. public static void main ... scanner...

Нужны две решенные задачи в MathCad (диф уравнения первого и второго порядка методом Ритца)
Нужны две решенные задачи в MathCad. Диф уравнения первого и второго порядка методом Ритца. Кто может помогите. del]

3 задачи (на файлы, строки, модуль CRT)
Вот такие задачки остались нерешонными до конца модуля...никак немогу решить (, а нодо как можно скорее сдать...Помогите чем сможете ...

Занесите в отдельные файлы списки студентов различных форм обучения(Типизированные файлы)
Помогите пожалуйста написать программку. Трудно мне даются блин эти файлы... Создайте файл Студент. Занесите в отдельные файлы списки...

Задачи про точки на окружности и про конфеты.
1) На окружности расположено N точек. Их положение определяется углом ф между осью ОХ и радиусом, проведенным от центра окружности к этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи с помощью арктангенса для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Публикация в доработке, метод арктангенса в комментариях внизу. Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер