Logikai programozás 4..

Slides:



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

Grafikus tervezőrendszerek programozása 2. előadás.
Delphi programozás alapjai
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,
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
Táblázat kezelő programok
Programozási Nyelvek (C++) Gyakorlat Gyak 03.
LINUX/UNIX PARANCSOK.
Boole- féle algebra Készítette: Halász Rita I. István Szakképző Iskola szeptember 19.
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.
Bevezetés a Java programozásba
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
3. LOGIKAI ADATSZERKEZETEK
Készítette: Nagy-Szakál Zoltán 2007.
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
Edényrendezés - RADIX „vissza” - bináris számokra
Operációs rendszerek gyakorlat 9. Gyakorlat Vakulya Gergely.
1 Bevezetés a funkcionális programozásba 2009.
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.
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.
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.
Rendezések és szövegkezelő függvények
Adatbázis-kezelés JAG,
Rekordok Dinamikus tárkezelés és pointerek Dinamikusan láncolt listák
Java programozási nyelv Metódusok
Programozási tételek.
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..
HF MINTA 2012/2013. ősz. HF Minta  Objektum-orientált program  „Adatvezérelt” alkalmazás írása  Fájl kezelés (olvasás, írás)  Menü készítése  5-6.
Logikai programozás 6..
A Visual Basic nyelvi elemei
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:
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),
Edényrendezés. Működés, elvek - Az edényrendezés nem összehasonlító rendezés. - A rendezendő elemeket nem hasonlítjuk össze, hanem a rendezés során az.
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Gráfok ábrázolása teljesen láncoltan
Java web programozás 2..
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.
A 2. géptermi beszámoló VBA anyagának összefoglalása
Összeállította: Gergely János
Excel programozás (makró)
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
Az 5,6,7 laborok VBA anyagának összefoglalása
NJSzT Nemes Tihamér Országos Középiskolai Sámítástechnikai Tanulmányi Verseny.
Készítette: Rummel Szabolcs Elérhet ő ség: Linux kezelése.
Logikai programozás 8..
Script nyelvek előadás
Informatikai gyakorlatok 11. évfolyam
Excel programozás (makró)
Logikai programozás 6..
Az esemény neve Esemény dátuma Esemény időpontja
Beépített függvények használata programozáskor
Piros-fekete fák Beszúrás, ill. törléskor a fa elveszítheti az egyensúlyát. A piros-fekete fák: az egyensúly megtartását biztosítják. +1 bit információ.
Kedvenc prezentáció készítő szoftverem
Programozási nyelvek alapfogalmai
Többszörös kvantifikáció
Cím elrendezése képpel
43. Gombaszedés Kováts László.
Cím és kép elrendezés Alcím
Előadás másolata:

Logikai programozás 4.

ISMÉTLÉS – n! fakt(N,F) :- fakt(N,1,1,F). fakt(N,I,P,F) :- I=<N, UjP is P*I, UjI is I+1, fakt(N,UjI,UjP,F). fakt(_,_,F,F). Mi a fakt/4 utolsó két paraméterének szerepe? Az egyik kezdőérték, a másik végérték. Pontosabban: ld. köv. dia

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] elem lista [] ü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, régi_lista, új_lista) 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).

LISTÁK – PÉLDÁK torol(Elem, [Fej | Torzs], [Fej | Torzs2] ) :- torol(Elem, Torzs, Torzs2). e a, b, e, c, e, d, f e b, e, c, e, d, f a, b, c, d, f b, c, d, f torol(Elem, [Elem | Torzs], Torzs2) :- torol(Elem, Torzs, Torzs2). e e, 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, régi_lista, új_lista) 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)

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, c d, e b, c d, 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ú! (n2 nagyságrendű)

LISTÁK – PÉLDÁK Lista megfordítása (hatékonyabb): % fordit(regi,forditott) % fordit(regi, temp, forditott) fordit(Regi, Forditott) :- fordit(Regi, [], Forditott). fordit([F|T], Eddig, Forditott) :- fordit(T, [F|Eddig], Forditott). fordit([], L,L). a,b, c b, c c [] [] a b, a c, 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). [F|Jo] Rossz Jo [F|Rossz] Mikor válogat? A listába „befelé” menet, vagy „kifelé”? A másik irány: HF

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?