Logikai programozás. ISMÉTLÉS Fibonacci sorozat: a/ fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1),

Slides:



Advertisements
Hasonló előadás
Sor láncolt ábrázolással
Advertisements

Készítette: Kosztyán Zsolt Tibor
Nevezetes algoritmusok
Internet alapú önértékelés
EXCEL TÁBLÁZATKEZELŐ ALKALMAZÁS
Grafikus tervezőrendszerek programozása 2. előadás.
Delphi programozás alapjai
MELEDA archívum Csányi János elnök homoludens.hu Egyesület.
Programozás III KOLLEKCIÓK 2..
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
Algebrai specifikációk Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Algoritmizálás, adatmodellezés tanítása 4. előadás
A korlátozott síkbeli háromtestprobléma
Táblázat kezelő programok
LINUX/UNIX PARANCSOK.
KOVÁCS DÁVID. ALAPFOGALMAK Adatbázis: Olyan adatgyűjtemény, amely egy adott feladathoz kapcsolódó adatokat szervezett módon tárolja, és biztosítja az.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
C A C nyelv utasításai.
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
A digitális számítás elmélete
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Edényrendezés - RADIX „vissza” - bináris számokra
A PLC-s vezérlés előnyei és alkalmazásai (Mitsubishi)
 Matematika a tudományokban és a művészetekben.  Egy nyúlpárnak havonta egyszer születik kölyke, egy hím és egy nőstény. A kölykök születésük után 2.
Operációs rendszerek gyakorlat 9. Gyakorlat Vakulya Gergely.
1 Bevezetés a funkcionális programozásba 2009.
ERŐHATÁS Machács Máté Az erőhatás a testeknek a forgását is megváltoztathatja, vagyis az erőnek forgató hatása is lehet. Az erő jele: F forgástengely A.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
Gráfok Készítette: Dr. Ábrahám István.
Grafikus tervezőrendszerek programozása 8. előadás.
Listák, Vermek és Várakozási Sorok. Vermek Def: Egy sajátos lista amelyben minden beszúrási illetve törlési művelet csak a lista egyik végén történik.
Klasszikus Programozás a FoxPro-ban
Klasszikus Programozás a FoxPro-ban FELADATOK
Listák, Vermek és Várakozási Sorok
Listák, Vermek és Várakozási Sorok. Listák Pl: Kirándulók listája Bevásárló lista Alma Kenyér Krumpli Szappan Mosópor Bevásárló lista.
Egyirányban láncolt lista
Speciális Listák: Sor A sor adatszerkezet olyan speciális lista, amelyet a műveletei definiálnak. 1. ACCESS HEAD 3. POP itt GET-nek nevezzük 5. INJECT.
Szintaktikai, szemantikai szabályok
Rekordok Dinamikus tárkezelés és pointerek Dinamikusan láncolt listák
Java programozási nyelv Metódusok
A Helyes Zárójelezés Struktogramja
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Logikai programozás 2..
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Logikai programozás 5..
Logikai programozás 6..
Táblázatkezelés KÉPLETEK.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Mindenki kezet fogott mindenkivel.  x  y(x kezet fogott y-nal) Biztos? Ugyanez a probléma egy másik példán: Cantor’s World, Cantor’s Sentences. Az érdekesebb.
Objektum orientált programozás
Egy lekérdezés végrehajtása SELECT o1 FROM T1 WHERE o2 = … Hogyan jutnak el a megfelelő sorokból a mező értékei a klienshez?
Összeállította: Gergely János
Az 5,6,7 laborok VBA anyagának összefoglalása
Készítette: Rummel Szabolcs Elérhet ő ség: Linux kezelése.
Logikai programozás 8..
Script nyelvek előadás
Logikai programozás 4..
Logikai programozás 6..
Beépített függvények használata programozáskor
Geometria 9. évfolyam Ismétlés.
Teljes visszalépéses elemzés
Edényrendezés - RADIX „vissza” - bináris számokra
Cím és kép elrendezés Alcím
Előadás másolata:

Logikai programozás

ISMÉTLÉS Fibonacci sorozat: a/ fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1), fibonacci(N2, F2), F is F1 + F2.

ISMÉTLÉS Fibonacci sorozat: b/ fibonacci(N, I, Elozo, Utolso) :- I =< N, Mostani is Elozo + Utolso, UjI is I + 1, fibonacci(N, UjI, Utolso, Mostani). fibonacci(_,_,_,_).

ISMÉTLÉS Fibonacci sorozat: c/ fibonacci(N,Elozo, Utolso) :- N > 0, Mostani is Elozo + Utolso, UjN is N - 1, fibonacci(UjN, Utolso, Mostani). fibonacci(_,_,_). Hogyan írathatjuk ki az első N Fibonacci számot? Hogyan határozhatjuk meg az N-edik Fibonacci számot? Hogyan indíthatjuk?

ISMÉTLÉS Fibonacci sorozat: b/ (1. javítás) fibonacci(N,I,Elozo, Utolso) :- I =< N, writef('%w. elem: %w\n',[I,Utolso]), Mostani is Elozo + Utolso, UjI is I + 1, fibonacci(N, UjI, Utolso, Mostani). fibonacci(_,_,_,_). Indítás: fibonacci(N) :- writef('Az első %w Fibonacci szám: \n', [N]), fibonacci(N, 1, 0, 1).

ISMÉTLÉS Fibonacci sorozat: b/ (2. javítás) fibonacci(N,I,Elozo, Utolso, F) :- I < N, Mostani is Elozo + Utolso, UjI is I + 1, fibonacci(N, UjI, Utolso, Mostani, F). fibonacci(_,_,_, F, F). Indítás: fibonacci(N,F) :- writef('A(z) %w. Fibonacci szám: \n', [N]), fibonacci(N, 1, 0, 1,F). Miért kell a plusz paraméter?

ISMÉTLÉS Akkumulátor (gyűjtőargumentum-pár): Ugyanahhoz a mennyiséghez tartozó változópár: – az egyik a mennyiség belépéskori értéke – a másik a kilépéskor érvényes érték. Pl.: ha a hívás: hossza(Lista, 0) akkor honnan tudjuk meg a kérdéses hosszat? Helyes megoldás: hossza(Lista, 0, Eredmeny) Vagy: hossza(Lista, H) :- hossza(Lista, 0, H).

ISMÉTLÉS – LISTÁK Lista: elemek felsorolása [Fej | Torzs] elemlista [] üres lista

ISMÉTLÉS – LISTÁK Listafeldolgozás: ?- feldolgoz(Lista). feldolgoz([Fej | Torzs]) :- muvelet(Fej), feldolgoz(Torzs). + leállási feltétel De lehet: feldolgoz([Fej | Torzs]) :- feldolgoz(Torzs), muvelet(Fej). Vagyis a tényleges művelet lehet: a/ a listába „befelé” menet b/ „kifelé” jövet.

LISTÁK – PÉLDÁK Listaelemek olvasása: olvas([Fej|Torzs]) :- read(Fej), olvas(Torzs). olvas([]). Probléma:Sohasem áll meg.  olvas([]). olvas([Fej|Torzs]) :- read(Fej), olvas(Torzs). Probléma:Azonnal megáll, eredmény: []

LISTÁK – PÉLDÁK Listaelemek olvasása: olvas([Fej|Torzs]) :- read(Fej), Fej \= vege, olvas(Torzs). olvas([]). FONTOS: – a felhasználóval mindig közölni kell, hogy mi a végjel – és azt is, hogy adatot várunk vagyis: olvas([Fej|Torzs]) :- writef(…), read(Fej),… „Odafelé” vagy „visszafelé” tölti fel a listát?

LISTÁK – PÉLDÁK Listaelemek olvasása másképp: olvas(L) :- olvas([],L). olvas(Eddig, Lista) :- writef(…), read(Elem), Elem \= vege, olvas([Elem|Eddig], Lista). olvas(Lista,Lista). „Odafelé” vagy „visszafelé” tölti fel a listát? Eredmény: a beolvasási sorrend fordítottja.

LISTÁK – PÉLDÁK Listaelem törlése: torol(Elem, [Elem | Torzs], Torzs). torol(Elem, [Fej | Torzs], [Fej | Torzs2] ) :- torol(Elem, Torzs, Torzs2). torol(_, [], [] ). Többszörös előfordulás törlése: torol(Elem, [Elem | Torzs], Torzs2) :- torol(Elem, Torzs, Torzs2). % torol( elem, régi_lista, új_lista)

LISTÁK – PÉLDÁK torol(Elem, [Fej | Torzs], [Fej | Torzs2] ) :- torol(Elem, Torzs, Torzs2). torol(Elem, [Elem | Torzs], Torzs2) :- torol(Elem, Torzs, Torzs2). ea, b, e, c, e, d, f e b, e, c, e, d, f a, b, c, d, f b, c, d, f ee, b, e, c, e, d, f e b, e, c, e, d, f b, c, d, f

LISTÁK – PÉLDÁK Listaelem beszúrása: torol(Elem, [Elem | Torzs], Torzs). torol(Elem, [Fej | Torzs], [Fej | Torzs2] ) :- torol(Elem, Torzs, Torzs2). torol(_, [], [] ). Vagyis ugyanez, csak ha a hívás pl. torol( a, [b,a,d,e], L) – akkor törlés torol(a, L, [b,d,e]) – akkor beszúrás (több alternatív megoldás) % torol( elem, régi_lista, új_lista)

LISTÁK – PÉLDÁK Listák összefűzése: % fuz(egyik, masik, harmadik) fuz([Fej|L1Torzs], L2, [Fej|L3Torzs] ) :- fuz(L1Torzs, L2, L3Torzs). fuz([], L, L). a, b, cd, e b, cd, e a, b, c, d, e b, c, d, e

LISTÁK – PÉLDÁK fuz([Fej|L1Torzs], L2, [Fej|L3Torzs] ) :- fuz(L1Torzs, L2, L3Torzs). fuz([], L, L). [trace] 2 ?- fuz([a,b,c],[d,e],L). Call: (6) fuz([a, b, c], [d, e], _G549) ? creep Call: (7) fuz([b, c], [d, e], _G631) ? creep Call: (8) fuz([c], [d, e], _G634) ? creep Call: (9) fuz([], [d, e], _G637) ? creep Exit: (9) fuz([], [d, e], [d, e]) ? creep Exit: (8) fuz([c], [d, e], [c, d, e]) ? creep Exit: (7) fuz([b, c], [d, e], [b, c, d, e]) ? creep Exit: (6) fuz([a, b, c], [d, e], [a, b, c, d, e]) ? L = [a, b, c, d, e].

LISTÁK – PÉLDÁK fuz([Fej|L1Torzs], L2, [Fej|L3Torzs] ) :- fuz(L1Torzs, L2, L3Torzs). fuz([], L, L). [trace] 3 ?- fuz([a,b,c],L,[a,b,c,d,e]). Call: (6) fuz([a, b, c], _G593, [a, b, c, d, e]) ? creep Call: (7) fuz([b, c], _G593, [b, c, d, e]) ? creep Call: (8) fuz([c], _G593, [c, d, e]) ? creep Call: (9) fuz([], _G593, [d, e]) ? creep Exit: (9) fuz([], [d, e], [d, e]) ? creep Exit: (8) fuz([c], [d, e], [c, d, e]) ? creep Exit: (7) fuz([b, c], [d, e], [b, c, d, e]) ? creep Exit: (6) fuz([a, b, c], [d, e], [a, b, c, d, e]) ? creep L = [d, e].

LISTÁK – PÉLDÁK Lista megfordítása: % fordit(régi_lista, új_lista) fordit([],[]). fordit([F|T],Forditott):-fordit(T,Tford), fuz(Tford,[F],Forditott). Logikailag jó, de rossz hatásfokú! (n 2 nagyságrendű)

LISTÁK – PÉLDÁK Lista megfordítása (hatékonyabb): % fordit(regi,uj) % fordit(regi, temp, uj) fordit(Regi, Uj) :- fordit(Regi, [], Uj). fordit([F|T], Eddig, Uj) :- fordit(T, [F|Eddig], Uj). fordit([], L,L). a,b, c b, c c [] a b, a c, b, a

LISTÁK – PÉLDÁK Lista elemeinek szétválogatása: % valogat(eredeti_lista, jo_lista, nemjo_lista) % jó: a feltételnek megfelelő valogat([],[],[]). valogat([F|T],, ) :- feltetel(F), valogat(T, Jo, Rossz). valogat([F|T],, ) :- valogat(T, Jo, Rossz). Mikor válogat? A listába „befelé” menet, vagy „kifelé”? A másik irány: HF [F|Jo]Rossz Jo[F|Rossz]

LISTÁK – PÉLDÁK Ezek után: Hogyan lehet összeadni egy olyan listában lévő számokat, amelyik vegyesen tartalmazhat számokat is és nem számokat is?