Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу обработка списков
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
alex99 alex99 вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 01.05.2006
По умолчанию 09.10.2006, 14:17

Добрый день!
Прошу помочь в решении задачи на PDC Prolog.
Организовать ввод и формирование списка целых чисел. Сформировать список четных элементов исходного списка. Определить сумму значений элементов полученного списка. Упорядочить полученный список по убыванию значений элементов.
Искал на форуме нашел только сортировку. Задача нужна срочно!
Заранее спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 09.10.2006, 19:08

Все эти задачи решены на форуме многократно. Так что ищите, либо покажите, как Вы пытаетесь их решать (вместе или по отдельности), и мы разберемся, что и почему не получается.
Ответить с цитированием
  (#3 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 09.10.2006, 19:29

Для начинающих в VIP7, но уже знакомых с Прологом, приведу пример, как эту задачу можно сделать в VIP7:
Код:
class my
predicates
    run: ().
end class my

implement my
    open core, console, list

class facts
сумма : integer := 0.

clauses
run():- 
    init(),
    write("Введите список целых (в виде [1,-2,3]): "),
    hasDomain(integer_list, Список),
    Список = read(), clearInput(),
    СписокЧетных = [X || X = getMember_nd(Список), X mod 2 = 0],
    write("\nСписок четных: ", СписокЧетных),
    _ = [сумма || Y = getMember_nd(СписокЧетных), сумма := сумма + Y],
    write("\nСумма элементов списка четных: ", сумма,
        "\nСписок четных по убыванию: ", sort(СписокЧетных, descending())),
    _ = readLine().
    
end implement my
goal   my::run().
PS. Это не дискриминация тех, кто изучает Пролог с помощью других реализаций, т.к. такие программы нужно научиться писать самим. Это для тех, кто уже умеет это делать, но пока еще не все освоил в VIP7.
Ответить с цитированием
  (#4 (permalink)) Старый
alex99 alex99 вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 01.05.2006
Arrow 09.10.2006, 20:37

Почитал форум и вот что получилось не судите строго:
Получился ввод длины списка и чисел так же сумма. Только почему-то вводить числа надо два раза :-( .
Как сформировать список четных элементов исходного списка так я и не понял.
Сортировку осуществил перестановкой только как её в конце вывести на экран.
Надеюсь на помощь потому что завтра программу надо сдавать.
Код:
 DOMAINS
list=integer*
PREDICATES
run
vvod_list(integer,list)
append(list, list, list)
sumlist(list,integer)
perest(list,list)
sort_p(list,list)
GOAL

run.
clauses

run:- 
makewindow(1,7,7,"sortirovka",0,0,25,80),
write("vvedite dlinu spiska: "), readint(N),vvod_list(N,L1),
write("L1= ", L1), vvod_list(N,L1),nl,
sumlist(L1,L2), write("L2=",L2).

vvod_list(0,[]).
vvod_list(N,L) :- N>0,write("vvedite element spiska: "), readint(X),
N1 = N-1, vvod_list(N1,L1), append([X],L1,L).
append([],L,L).
append([H|L],M,[H|R]):- append(L,M,R).

sumlist([],0).
sumlist([H|T],Sum):- sumlist(T,SumT),Sum = SumT+H.

sort_p(L,OL):-perest(L,L2),!,sort_p(L2,OL).
sort_p(OL,OL).
perest([X,Y|T],[Y,X|T]):-X>Y.
perest([Z|T],[Z|T1]):-perest(T,T1).
Ответить с цитированием
  (#5 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 09.10.2006, 21:46

Цитата:
Только почему-то вводить числа надо два раза.
Потому что Вы два раза вызываете vvod_list.
Цитата:
Как сформировать список четных элементов исходного списка так я и не понял.
Это просто:
Код:
new_list([A | L], [A | L1]):- A mod 2 = 0, !, new_list(L, L1).
new_list([_ | L], L1):- new_list(L, L1).
new_list([], []).
Добавьте это в программу вместе с выводом сами, по аналогии.
Цитата:
Сортировку осуществил перестановкой только как её в конце вывести на экран.
См. в программе.
Код:
PREDICATES
run
vvod_list(integer,list)
sumlist(list,integer)
perest(list,list)
sort_p(list,list)
GOAL
run.

clauses
run:-
makewindow(1,7,7,"sortirovka",0,0,25,80),
write("vvedite dlinu spiska: "), readint(N), 
vvod_list(N,L1),
write("L1= ", L1), 
sumlist(L1,Sum), write("\nSum=",Sum),
sort_p(L1,L2),
write("\nSort=",L2), nl.

vvod_list(0,[]):- !.
vvod_list(N,[X|L]) :- N>0,write("vvedite element spiska: "), readint(X),
    N1 = N-1, vvod_list(N1,L).

sumlist([],0).
sumlist([H|T],Sum):- sumlist(T,SumT),Sum = SumT+H.

sort_p(L,OL):- perest(L,L2),!,sort_p(L2,OL).
sort_p(OL,OL).

perest([X,Y|T],[Y,X|T]):- X<Y, !.
perest([Z|T],[Z|T1]):-perest(T,T1).
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение списков Alda Lisp 5 13.01.2012 12:59
Рекурсивная обработка списков Devil1991 Prolog 0 20.09.2010 21:01
Обработка списков Svoboda Prolog 8 28.06.2010 12:05
Обработка списков Dj_John Prolog 5 18.05.2010 13:58
Списки. Создание и обработка списков Chudic Prolog 7 28.03.2010 16:39
Обработка списков Ranika Prolog 0 26.04.2009 01:58
Сравнение списков z556 Prolog 6 15.04.2009 21:00
Сортировка списков imported_W_M Prolog 5 14.10.2008 08:26
Слияние списков sprew88 Prolog 5 20.12.2007 18:23
Ввод и обработка списков на Турбо-Прологе. Explosion Prolog 2 14.03.2007 15:38
Пересечение списков linux Prolog 1 21.12.2004 12:09



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов