Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Лабораторная работа №5 - файл 1.doc


Лабораторная работа №5
скачать (56.5 kb.)

Доступные файлы (1):

1.doc57kb.13.12.2011 22:40скачать

Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
«ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ»

ЛАБОРАТОРНАЯ РАБОТА №5

«Рекурсивные процедуры и списки»

Теория:

Рассмотрите программу, реализующую следующие функции работы со списками:


  • Формирование списка поэлементно с помощью

    • добавления элемента в начало списка

или

    • добавления элемента в конец списка

  • удаление элемента

  • удаление всего списка

  • запись списка в обратном порядке

  • сортировка списка в нужном порядке (по возрастанию или убыванию).

DOMAINS

list = symbol*

order = inc;dec

PREDICATES

%добавить элемент в начало списка

addfront (list, string, list)

%добавить элемент в конец списка

addend (list, string, list)

%добавить элемент в порядке сортировки

addsort(list, string, list, order)

%удалить все элементы из списка

deleteall(list).

%удалить элемент из списка

delete(list, string, list)

%отсортировать список в порядке order

sort(list, list, order)

%определение порядка: больше или равно

strge(string,string)

%вывод списка

writelist(list)

%получение списка в обратном порядке

revers (list,list)

%целевой предикат

runmenu

%получение списка

main(list)

%выполнение с данным списком операции с %данным номером

oper(list,integer)

%ввод элемента

readitem(string)

%определение типа сортировки

dosort(list,integer)

CLAUSES

addfront(L1,S,[S|L1]).
addend([],S,[S]).

addend([H|L1],S,[H|L2]):-addend(L1,S,L2).
addsort([],S,[S],_).

addsort([H|T],S,[S|[H|T]],inc):-strge(H,S),!.%добавить по возрастанию

addsort([H|T],S,[S|[H|T]],dec):-strge(S,H),!.%добавить по убыванию

addsort([H|L1],S,[H|L2],Order):- addsort(L1,S,L2,Order).
delete([S|T],S,T).

delete([H|L1],S,[H|L2]):-delete(L1,S,L2).
deleteall(_):-main([]).%при удалении элементов из любого списка вызвать предикат main с аргументом в виде пустого списка
strge(G,L):-G>L.

strge(G,L):-G=L.
sort([],[],_).

sort([H|L],L2,Order):-sort(L,L1,Order),addsort(L1,H,L2,Order).
writelist([]).

writelist([S]):-write(S).

writelist([H|T]):-write(H,","),writelist(T).
revers([],[]).

revers([H|T],L):- revers(T,T1),addend(T1,H,L).
/*создание меню*/

runmenu:-

/*makewindow(3,12,12,"Обработка cписков",0,0,25,80),

makewindow(2,30,31,"Меню",9,20,10,40),*/

write("0. Выход\n"),

write("1. Добавить элемент в начало\n"),

write("2. Добавить элемент в конец\n"),

write("3. Удалить элемент из списка\n"),

write("4. Удалить все элементы\n"),

write("5. Отсортировать элементы списка\n"),

write("6. Список в обратном порядке\n"),

main([]).

/*Предикат main(L) выводит на экран полученный список

читает номер пункта меню и запускает соответствующую операцию работы со списком oper(L,C)*/

main(L):-writelist(L),

write("\nВыберите пункт:"),readint(C),oper(L,C).
oper(_,0):-write("Обработка закончена, нажмите Esc"),exit.

oper(L,1):-write("Какой элемент добавить в начало?"),readitem(I),addfront(L,I,L1),write("Полученный список"),main(L1).

oper(L,2):-write("Какой элемент добавить в конец?"),readitem(I),addend(L,I,L1),write("Полученный список"),main(L1).

oper(L,3):-write("Какой элемент удалить?"),readitem(I),delete(L,I,L1),write("Полученный список"),main(L1).

oper(L,4):-deleteall(L).

oper(L,5):-

write("1.По возрастанию\n"),

write("2.По убыванию"),

readint(C),dosort(L,C).
oper(L,6):-revers(L,L1),write("Полученный список"),main(L1).

oper(L,_):-main(L).
readitem(I):-

readln(I).
dosort(L,1):-

sort(L,L1,inc),write("Полученный список"),

main(L1).

dosort(L,2):-

sort(L,L1,dec),write("Полученный список"),

main(L1).

dosort(L,_):-

beep,

main(L).

GOAL

runmenu.






Скачать файл (56.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru