Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 7
1

Меню на прологе

10.11.2011, 14:01. Показов 2691. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
СОРТИРОВКА ВСТАВКОЙ:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
domains
list=integer*
predicates
insert_sort (list, list)
insert (integer, list, list)
asc_order (integer, integer)
clauses
insert_sort ( [], []).
insert_sort ([H1|T1], L2):- insert_sort (T1, T2),
insert(H1, T2, L2).
insert (X, [H1| T1], [H1| T2]) :- asc_order (X, H1), !,
insert (X, T1, T2).
insert (X, L1, [X| L1]).
asc_order (X, Y):- X<Y.
goal
insert_sort ([4, 7, 3, 9], L),WRITe(L),NL
СОРТИРОВКА ПЕРЕСТАНОВКОЙ:
Prolog
1
2
3
4
5
6
7
8
9
10
domains
list=integer*
predicates
puz(list,list)
perest(list,list)
clauses
puz(L1,L2):-perest(L1,L3),!,puz(L3,L2).
puz(L1,L1).
perest([X,Y|T],[Y,X|T]):Д.
perest([Z|T],[Z|T1]):-perest(T,T1).
БЫСТРАЯ СОРТИРОВКА
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
domains
list=integer*
 
predicates
supersort(list,list)
div(integer,list,list,list)
conc(list,list,list)
 
clauses
 supersort([],[]).
 supersort([H|T],L):-
         div(H,T,Small,Big),
         supersort(Small,Small_sort),
         supersort(Big,Big_sort),
         conc(Small_sort,[H|Big_sort],L).
 
 div(_,[],[],[]).
 div(H,[X|T],[X|Small],Big):-
                           H < X,!,  
                           div(H,T,Small,Big).
 div(H,[X|T],Small,[X|Big]):-
                           div(H,T,Small,Big).
 
 conc([],L,L).
 conc([H|T],L2,[H|L]):-
                     conc(T,L2,L).      
 
 goal
  supersort([4,7,3,9],L),write(L),nl
И необходимо разработать меню.
Вот кусочек меню, но я не могу разобраться что к чему:
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
CLAUSES
menu:-
makewindow(1,2,7,"Сортировка",0,0,25,80),
clearwindow, /* очистка текущего окна */
write("1 - Сортировка перестановкой"),nl,
write("2 - Сортировка вставкой"),nl,
write("3 - Быстрая сортировка"),nl,
write("0 - Выйти"),nl,
readchar(C), /* читаем символ с клавиатуры */
m(C). /* вызываем выполнение соответствующего пункта
меню */
m('2'):-
clearwindow,
write("Сортировка вставкой"),nl,
readchar(C),
sbor(C),
readchar(_),
menu.
m('3'):- /*быстрая сортировка*/
clearwindow,
sb,
readchar(_),
menu.
m('1'):-
clearwindow,
write_file_main(),
readchar(_),
menu.
m('0'):-
clearwindow,
removewindow.
Менюшку взяла с другой программы и немного переделала, но не до конца..
Надо создать такое меню:
1. Сортировка перестановкой
2. Сортировка вставкой
3. Сортировка быстрая
И по нажатию на выбранный пункт вызывается один из выбранных методов сортировки.

ПОМОГИТЕ КОМУ НЕ СЛОЖНО!!!
ЗАРАНЕЕ СПАСИБО!!!

Добавлено через 1 час 9 минут
Вот что у меня получилось, но выдает какую то ошибку
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
domains
list=integer*
predicates
puz,perest,insert_sort,supersort(list,list)
insert (integer, list, list)
asc_order (integer, integer)
div(integer,list,list,list)
conc(list,list,list)
command(integer)
read_command
main
 
clauses
  puz(L1,L2):-perest(L1,L3),!,puz(L3,L2).
      puz(L1,L1).
      perest([X,Y|T],[Y,X|T]):-X<Y.
      perest([Z|T],[Z|T1]):-perest(T,T1).
      
           insert_sort ( [], []).
      insert_sort ([H1|T1], L2):- insert_sort (T1, T2),
                                         insert(H1, T2, L2).
      insert (X, [H1| T1], [H1| T2]) :- asc_order (X, H1), !,
                                      insert (X, T1, T2).
      insert (X, L1, [X| L1]).
      asc_order (X, Y):- X<Y.
      
supersort([],[]).
 supersort([H|T],L):-
         div(H,T,Small,Big),
         supersort(Small,Small_sort),
         supersort(Big,Big_sort),
         conc(Small_sort,[H|Big_sort],L).
 
 div(_,[],[],[]).
 div(H,[X|T],[X|Small],Big):-
                           H < X,!,  
                           div(H,T,Small,Big).
 div(H,[X|T],Small,[X|Big]):-
                           div(H,T,Small,Big).
 
 conc([],L,L).
 conc([H|T],L2,[H|L]):-
                     conc(T,L2,L).        
command(1):-puz([4, 7, 3, 9], L),write(L),nl.,nl,fail.
command(2):-insert_sort ([4, 7, 3, 9], L),WRITe(L),NL,fail.
command(3):-supersort([4,7,3,9],L),write(L),nl,nl,fail.
command(1):-readchar(_),main.
command(2):-readchar(_),main.
command(3):-readchar(_),main.
command(4).
 
read_command:-write(">"),readint(C),command(C).
 
main:-
write(" Sortirovka dannih"),nl,
write("1 - perestanovkoj"),nl,
write("2 - vstavkoj"),nl,
write("3 - bistraja"),nl,
write("4 - Vihod"),nl,
read_command.
 
 
Goal
main.

ПОМОГИТЕ!!! УЖЕ НЕЗНАЮ ЧТО ДЕЛАТЬ!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2011, 14:01
Ответы с готовыми решениями:

Меню на прологе
Нужно создать меню на turbo prolog 2.0. Вообще задача решена, но не могу создать меню.......

Работа с меню. При клике на кнопке меню или вне его, меню должно закрываться
Добрый вечер! Изучаю JQuery. Вот ради развития решил написать меню, практически такое же как на...

Как добавить выплывающее меню к уже готовому горизонтальному меню (не меняя дизайн горизонтального меню)?
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;...

Раскрывающееся меню - при открытии/закрытии вложенного меню закрывается все меню
Проблема во вложенном меню. При открытии/закрытии вложенного меню закрывается все меню. Надо, чтобы...

7
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
10.11.2011, 20:59 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
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
domains
list=integer*
predicates
puz(list,list)
perest(list,list)
insert_sort(list,list)
supersort(list,list)
insert (integer, list, list)
div(integer,list,list,list)
conc(list,list,list)
command(integer)
read_command
main
 
clauses
puz(L1,L2):-perest(L1,L3),!,puz(L3,L2).
puz(L1,L1).
perest([X,Y|T],[Y,X|T]):-X>Y.
perest([Z|T],[Z|T1]):-perest(T,T1).
 
insert_sort ( [], []).
insert_sort ([H1|T1], L2):- insert_sort (T1, T2),
insert(H1, T2, L2).
insert (X, [H1| T1], [H1| T2]) :- X>H1, !,
insert (X, T1, T2).
insert (X, L1, [X| L1]).
 
supersort([],[]).
supersort([H|T],L):-
div(H,T,Small,Big),
supersort(Small,Small_sort),
supersort(Big,Big_sort),
conc(Small_sort,[H|Big_sort],L).
 
div(_,[],[],[]).
div(H,[X|T],[X|Small],Big):-
H > X,!,
div(H,T,Small,Big).
div(H,[X|T],Small,[X|Big]):-
div(H,T,Small,Big).
 
conc([],L,L).
conc([H|T],L2,[H|L]):-
conc(T,L2,L).
command(1):-puz([4, 7, 3, 9], L),write(L),nl,nl,fail.
command(2):-insert_sort ([4, 7, 3, 9], L),write(L),nl,nl,fail.
command(3):-supersort([4,7,3,9],L),write(L),nl,nl,fail.
command(1):-readchar(_),main.
command(2):-readchar(_),main.
command(3):-readchar(_),main.
command(4).
 
read_command:-write(">"),readint(C),command(C).
 
main:-
write(" Sortirovka dannih"),nl,
write("1 - perestanovkoj"),nl,
write("2 - vstavkoj"),nl,
write("3 - bistraja"),nl,
write("4 - Vihod"),nl,
read_command.
 
 
Goal
main.
1
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 7
11.11.2011, 00:43  [ТС] 3
А не могли бы мне подсказать, ради интереса, как сделать чтобы в окне диалога ввести числа и по нажатию на какой либо из пунктов выполнялась сортировка.
0
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
11.11.2011, 01:16 4
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
domains
list=integer*
predicates
puz(list,list)
nondeterm perest(list,list)
insert_sort(list,list)
supersort(list,list)
insert (integer, list, list)
div(integer,list,list,list)
conc(list,list,list)
command(list,integer)
read_command(list)
main
readlist(list)
 
clauses
puz(L1,L2):-perest(L1,L3),!,puz(L3,L2).
puz(L1,L1).
perest([X,Y|T],[Y,X|T]):-X>Y.
perest([Z|T],[Z|T1]):-perest(T,T1).
 
insert_sort ( [], []).
insert_sort ([H1|T1], L2):- insert_sort (T1, T2),
insert(H1, T2, L2).
insert (X, [H1| T1], [H1| T2]) :- X>H1, !,
insert (X, T1, T2).
insert (X, L1, [X| L1]).
 
supersort([],[]).
supersort([H|T],L):-
div(H,T,Small,Big),
supersort(Small,Small_sort),
supersort(Big,Big_sort),
conc(Small_sort,[H|Big_sort],L).
 
div(_,[],[],[]).
div(H,[X|T],[X|Small],Big):-
H > X,!,
div(H,T,Small,Big).
div(H,[X|T],Small,[X|Big]):-
div(H,T,Small,Big).
 
conc([],L,L).
conc([H|T],L2,[H|L]):-
conc(T,L2,L).
command(List,1):-puz(List, L),write(L),nl,nl,fail.
command(List,2):-insert_sort (List, L),write(L),nl,nl,fail.
command(List,3):-supersort(List,L),write(L),nl,nl,fail.
command(_,1):-readchar(_),main.
command(_,2):-readchar(_),main.
command(_,3):-readchar(_),main.
command(_,4).
 
read_command(L):-write(">"),readint(C),command(L,C).
 
main:-
write("Vvedite spisok:"),nl,
readlist(L),
write(" Sortirovka dannih"),nl,
write("1 - perestanovkoj"),nl,
write("2 - vstavkoj"),nl,
write("3 - bistraja"),nl,
write("4 - Vihod"),nl,
read_command(L).
 
readlist([H|Tail]):-readint(H),!,readlist(Tail).
readlist([]).
 
 
Goal
main.
0
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 7
11.11.2011, 01:22  [ТС] 5
числа то вводятся, но почему то когда я выбираю номер из пункта, то вместо отсортированного списка у меня появляются пустые квадратные скобки ??? почему так???
0
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
11.11.2011, 01:41 6
Наверно Вы все числа в одну строку вводите. Вводите enter после каждого числа и тогда все будет правильно работать.
0
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 7
11.11.2011, 01:48  [ТС] 7
да да да))) именно так и делала))) все работает...спасибо вам большое))) вы мне очень помогли)))
0
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 7
13.11.2011, 20:58  [ТС] 8
может кто поможет структурную схему программы сделать...или хотябы объяснить, как делается....
0
13.11.2011, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2011, 20:58
Помогаю со студенческими работами здесь

Математика на Прологе
необходимо сделать следующее: 3-х значное число, у которого сумма 2-х цифр равна третьей ...

Тест на прологе
Вот в чем вопрос, дорогие программисты, получил задание сделать тесты на прологе. задание:создать...

Программа на прологе
cut

Рекурсия в прологе
Добрый день,имеется код: PREDICATES nondeterm родитель(symbol,symbol) nondeterm...


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

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