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

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

26.06.2012, 21:30. Показов 139961. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2012, 21:30
Ответы с готовыми решениями:

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

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

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

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

13
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
26.06.2012, 21:34  [ТС] 2
Строки
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 Кб, 1745 просмотров)
8
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
26.06.2012, 21:45  [ТС] 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
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 4
На каком интерпретаторе это всё работает?
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
11.12.2012, 13:44  [ТС] 5
Turbo Prolog,Windows 7,я думаю что несложно будет и visual prolog сделать.
1
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 18
11.12.2012, 13:45 6
Ок.. А как перевести всё это например в сви пролог??
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
11.12.2012, 13:51  [ТС] 7
А ты логику просмотри,там же просто все,я попытался написать самым логичным(не самым лучшим) образом,чтобы люди могли разобраться
1
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 18
11.12.2012, 13:52 8
Спасибо.
0
7 / 7 / 0
Регистрация: 17.06.2013
Сообщений: 34
27.10.2013, 18:45 9
Цитата Сообщение от 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 10
Народ, вот пробовал я загнать решение задачи переписать элементы списка в обратном порядке с сохранением упорядоченности в 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
797 / 600 / 157
Регистрация: 07.10.2013
Сообщений: 1,327
23.05.2016, 14:08 11
вкусняшки
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37300 / 20734 / 4272
Регистрация: 12.02.2012
Сообщений: 34,122
Записей в блоге: 14
18.03.2017, 11:18 12
Ханойская башня:

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
109 / 65 / 25
Регистрация: 08.01.2019
Сообщений: 308
09.12.2019, 18:24 13
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
797 / 600 / 157
Регистрация: 07.10.2013
Сообщений: 1,327
11.12.2019, 13:52 14
все уже давно есть
sorts#Quick
см. ранее
1
11.12.2019, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2019, 13:52
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru