Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2014, 23:39   #1
meme
Новичок
Джуниор
 
Регистрация: 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.

Это пока все, что я могу...
Бужу жутко благодарна любой помощи!!!!!
meme вне форума Ответить с цитированием
Старый 06.06.2014, 05:31   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
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).
rrrFer вне форума Ответить с цитированием
Старый 06.06.2014, 21:25   #3
meme
Новичок
Джуниор
 
Регистрация: 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.
meme вне форума Ответить с цитированием
Старый 07.06.2014, 10:18   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну правильно ругается.
Я на SWI писал, а вы в турбо вставляете абсолютно бездумно. Я надеялся поправить сами сможете.

Ну вот даже:
p(sp_wesh)
вы описали предикат так, как будто он один аргумент-список принимает.
Но он же принимает 4 аргумента - исходный список, значения N и M и результирующий список.

Я кнешно могу переписать вам все на турбо-прологе, но надеюсь вы сами справитесь с этой тривиальной задачей.
rrrFer вне форума Ответить с цитированием
Старый 07.06.2014, 10:49   #5
meme
Новичок
Джуниор
 
Регистрация: 05.06.2014
Сообщений: 6
По умолчанию Ааааа

Вот такой я дубок! Паскаль, делфи - это мое, а вот пролог, ну никак не укладывается у меня в голове!!!
Послезавтра гос, я знаю, что будет подобная задачка, но как все это реализовать,... ааа, вся надежда на вас!
meme вне форума Ответить с цитированием
Старый 07.06.2014, 10:51   #6
meme
Новичок
Джуниор
 
Регистрация: 05.06.2014
Сообщений: 6
По умолчанию

Ой, я и в правду в domaims'е не так описала))
p(sp_wesh, sp_wesh, sp_wesh, sp_wesh) - так ведь надо было, бессонные ночи дают о себе знать!
meme вне форума Ответить с цитированием
Старый 07.06.2014, 11:17   #7
meme
Новичок
Джуниор
 
Регистрация: 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).

Все никак не угомонится, ругается))))
meme вне форума Ответить с цитированием
Старый 08.06.2014, 14:53   #8
meme
Новичок
Джуниор
 
Регистрация: 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),
вывод_списка(Б).
meme вне форума Ответить с цитированием
Старый 08.06.2014, 19:19   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Все проблемы решены?
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список деревьев, удаление из полученного списка элементов (Пролог) 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