|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.06.2014, 23:39 | #1 |
Новичок
Джуниор
Регистрация: 05.06.2014
Сообщений: 6
|
Удаление из списка m элементов, начиная с элемента с номером n (Пролог)
Очень жду Вашей помощи!
Задача: Дан список, элементами которого являются вещественные числа. Удалить из списка m элементов, начиная с элемента с номером n. Указания: Создать простой проект в Visual Prolog. Все данные задаются вводом с клавиатуры. Перед выводом результатов вывести исходный список на экран. domains список_вещ = число* m, n=integer predicates ввод_списка (список_вещ) вывод_списка (список_вещ) clauses %1 - процедура ввода списка ввод_списка([H | T]):- write("Введите элемент списка : "), readreal (H), ввод_списка (T). ввод_списка ([ ]). %2 - процедура вывода списка вывод_списка([ ]). вывод_списка([H | T]):- write(H, " "), вывод_списка(T). goal %1 - процедура ввода списка write(" Введите исходный список "), nl, ввод_списка(С), nl, %2 - процедура вывода списка write("Исходный список: "), nl, вывод_списка(С), nl, nl. Это пока все, что я могу... Бужу жутко благодарна любой помощи!!!!! |
06.06.2014, 05:31 | #2 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Код:
|
06.06.2014, 21:25 | #3 |
Новичок
Джуниор
Регистрация: 05.06.2014
Сообщений: 6
|
Спасибо!
Ввожу код, а программа ругается...
domains sp_wesh = chislo* m, n=integer predicates vv_sp (sp_wesh) viv_sp (sp_wesh) p(sp_wesh) clauses %1 - vv cpiska vv_sp([H | T]):- write("vv el sp : "), readreal (H), vv_sp (T). vv_sp ([ ]). %2 - viv cp viv_sp([ ]). viv_sp([H | T]):- write(H, " "), viv_sp(T). % del p(0, 0, L, L):-!. p(0, M, [H|T], R):- !, MM is M - 1, p(0, MM, T, R). p(N, M, [H|T],[H|TR]):- NN is N - 1, p(NN, M, T, TR). goal %1 - vv cpiska write(" vv icx sp "), nl, vv_sp(C), nl, %2 - viv cp write("isx sp: "), nl, viv_sp(C), nl, nl. |
07.06.2014, 10:18 | #4 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Ну правильно ругается.
Я на SWI писал, а вы в турбо вставляете абсолютно бездумно. Я надеялся поправить сами сможете. Ну вот даже: p(sp_wesh) вы описали предикат так, как будто он один аргумент-список принимает. Но он же принимает 4 аргумента - исходный список, значения N и M и результирующий список. Я кнешно могу переписать вам все на турбо-прологе, но надеюсь вы сами справитесь с этой тривиальной задачей. |
07.06.2014, 10:49 | #5 |
Новичок
Джуниор
Регистрация: 05.06.2014
Сообщений: 6
|
Ааааа
Вот такой я дубок! Паскаль, делфи - это мое, а вот пролог, ну никак не укладывается у меня в голове!!!
Послезавтра гос, я знаю, что будет подобная задачка, но как все это реализовать,... ааа, вся надежда на вас! |
07.06.2014, 10:51 | #6 |
Новичок
Джуниор
Регистрация: 05.06.2014
Сообщений: 6
|
Ой, я и в правду в domaims'е не так описала))
p(sp_wesh, sp_wesh, sp_wesh, sp_wesh) - так ведь надо было, бессонные ночи дают о себе знать! |
07.06.2014, 11:17 | #7 |
Новичок
Джуниор
Регистрация: 05.06.2014
Сообщений: 6
|
Вот еще так я все это вижу))
domains
list=real* predicates soed(list,list,list) razd(list,list,list,list) summa(list,real) vvod(list) vyvod(list) dlina(list,byte) clauses vvod([H|T]):- write("vv el sp: "), readreal(H), vvod(T). vvod([]). %------------------ vyvod([]). vyvod([H|T]):- write(H," "), vyvod(T). %------------------- razd(O,0,[],[]):=!. razd(0, M, [H|T], R):= !, MM is M-1, rasd(0, MM, T, R). razd([N,M,[H|T],[H|TR]):- NN is N - 1, razd(NN,M,T,TR). %---------------------- summa([],0). summa([H|T],S):- summa(T,S1), S=S1+H. %---------------------- dlina([],0). dlina([_ | T], N):- dlina(T, M), N=M+1. goal vvod(L1), razd(L1,L2,L3,L4), write("perv sp: "),nl, vyvod(L3),nl, write("vtoroi sp: "),nl, vyvod(L4),nl, summa(L3,S), write("sum первого списка: ",S),nl, dlina(L4,D), write("kolvo эл второго сп: ",D). Все никак не угомонится, ругается)))) |
08.06.2014, 14:53 | #8 |
Новичок
Джуниор
Регистрация: 05.06.2014
Сообщений: 6
|
Готовая задача, может, кому пригодится!
domains
список_вещ = real* число = integer predicates ввод_списка(список_вещ) вывод_списка(список_вещ) удалить_часть_списка(список_вещ,спи сок_вещ,число,число) clauses ввод_списка([Г|Т]):- write("Введите элемент списка (вещественное число): "), readreal(Г), ввод_списка(Т). ввод_списка([]). вывод_списка([Г|Т]):- write(Г),nl, вывод_списка(Т). вывод_списка([]). удалить_часть_списка([],[],_,_). удалить_часть_списка([Г|Т],[Г1|Т1],N,M):- N>1, M>0, N1=N-1, Г1=Г, удалить_часть_списка(Т,Т1,N1,M). удалить_часть_списка([_|Т],Спис2,N,M):- N=1, M>0, M1=M-1, удалить_часть_списка(Т,Спис2,N,M1). удалить_часть_списка([Г|Т],[Г1|Т1],N,M):- N=1, M=0, Г1=Г, удалить_часть_списка(Т,Т1,N,M). goal ввод_списка(А), nl,write("Введите n: "),readint(N), nl,write("Введите m: "),readint(M), удалить_часть_списка(А,Б,N,M), вывод_списка(Б). |
08.06.2014, 19:19 | #9 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Все проблемы решены?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Список деревьев, удаление из полученного списка элементов (Пролог) | AnDrOiD73 | Помощь студентам | 1 | 21.12.2011 20:21 |
Удаление последнего элемента из списка и реверс этого списка. | Goose | Общие вопросы C/C++ | 8 | 16.05.2010 16:12 |
удаление элемента из списка | aurora_87 | Общие вопросы C/C++ | 1 | 18.06.2009 14:02 |
Удаление списка. Пролог. | luzerka | Помощь студентам | 1 | 13.01.2009 20:31 |