Příklad do prologu

Přednáška je věnována neprocedurálnímu programování. Většina semestru je věnována programování v jazyku Prolog, ve kterém studenti i ladí zápočtové programy. Informativně se studenti seznámí i s jazykem LISP a neprocedurálními částmi programovacích systémů.

Příklad do prologu

Příspěvekod wweennddeell » 28. 6. 2010 21:20

Dobrý den,

potřeboval bych pomoct naprogramovat úlohu v prologu. Hledal jsem nějaké řešení na internetu, ale nic jsem nenašel a absolutně si s tím nevím rady.

Úloha zní takto: Na vstupu je zadán graf, který obecně není stromem. Napište program v jazyce Prolog, který vytiskne pro zadaný uzel grafu všechny cykly grafu, jichž je daný uzel prvkem.

Budu rád za každou Vaši pomoc...
wweennddeell
Matfyz(ák|ačka) level I
 
Příspěvky: 2
Registrován: 28. 6. 2010 21:12
Typ studia: Informatika Bc.

Re: Příklad do prologu

Příspěvekod H8me » 29. 6. 2010 16:12

Zdarec,
co to to ? Je to pre orientovany graf.

Kód: Vybrat vše

%graf je zoznam hran v tvare h(X,Y)

vsetkyCykly(Hrany,X,Out):-findall(C,(cyklus(Hrany,X,X,[],C),length(C,Len),Len > 1),Out).

cyklus(_,X,X,Akum,Akum).
cyklus(Hrany,X,Y,Akum,Out):-member(h(Y,N),Hrany), not(member(N,Akum)), cyklus(Hrany,X,N,[N|Akum],Out).
H8me
 

Re: Příklad do prologu

Příspěvekod wweennddeell » 29. 6. 2010 22:05

Díky moc za snahu. Ten prolog je pro mě kámen úrazu.

Jestli sem to dobře pochopil, tak mám například tyto hrany:

h(b,c).
h(f,c).
h(g,h).
h(d).
h(f,b).
h(k,f).
h(h,g).

Co mám teda napsat za vstupní podmínku, aby mi prolog vypsal všechny cykly třeba uzlu f (i když v tomhle příkladu je pouze jeden cyklus).

Řešení sem našel na téhle stránce: https://prof.ti.bfh.ch/hew1/informatik3/prolog/p-99/ .Příklad P82 by měl být přesně ten, co hledám, bohužel vůbec nevím jak ten program mám z toho sestavit.
wweennddeell
Matfyz(ák|ačka) level I
 
Příspěvky: 2
Registrován: 28. 6. 2010 21:12
Typ studia: Informatika Bc.

Re: Příklad do prologu

Příspěvekod H8me » 29. 6. 2010 22:25

Neviem co ma vyjadrovat h(d) ale ked to preskocim tak dotaz pre tvoj priklad by vyzeral takto:

vsetkyCykly([h(f,c),h(g,h),h(f,b),h(k,f),h(h,g)],f,Out).

Out je volna premenna, ta vrati zoznam cyklov.

A to riesenie co si postol funguje na tom istom principe, tiez vyhladava cesty v grafe zo zaciatkom aj koncom v tom istom bode.
H8me
 

Re: Příklad do prologu

Příspěvekod Andrew24 » 12. 1. 2015 13:58

Mohl by mi prosím někdo poradit jak by to vypadalo kdyby se měly na konci vypsat všechny cykly jichž daný uzel neni prvkem? díky
Andrew24
 


Zpět na PRG005 Neprocedurální programování

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků

cron