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,

Slides:



Advertisements
Hasonló előadás
Deduktív adatbázisok.
Advertisements

Sor láncolt ábrázolással
Tananyag: konzultáció
A Powerpoint használata (gyorstalpaló)
 Megfigyelhető, hogy amikor több elem közötti összehasonlítás történik, akkor szükség van egyszerre több értékre is, főleg akkor, ha ezek az értékek jóval.
Diagnosztika szabályok felhasználásával, diagnosztikai következtetés Modell alapú diagnosztika diszkrét módszerekkel.
C++ programozási nyelv Gyakorlat hét
Neumann-elvek A számítógép legyen teljesen elektronikus, külön vezérlő és végrehajtó egységgel. Kettes számrendszert használjon. Az adatok és a programok.
Delphi programozás alapjai
Jt Java Feltételek, logikai kifejezések. jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró.
Operációs rendszerek Mappa és file-kezelés.
4. Helyes zárójelezés algoritmusa
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Tudásalapú rendszerek
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:
Készítette: Pető László
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
Logika 5. Logikai állítások Miskolci Egyetem Állam- és Jogtudományi Kar Jogelméleti és Jogszociológiai Tanszék március 10.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Szélességi bejárás A szélességi bejárással egy irányított vagy irányítás nélküli véges gráfot járhatunk be a kezdőcsúcstól való távolságuk növekvő sorrendjében.
PROLOG PROGRAMOZÁSI NYELV
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Beolvasó utasítás Console.Read();  Int típusú adatot kapunk. Console.ReadLine();  String típusú adatot kapunk. Console.ReadKey();  Tetszőleges billentyű.
A Pascal programozási nyelv alapjai
Kifejezések a Pascalban Páll Boglárka. Ismétlés: Ahogy algoritmikából láttuk, a kifejezések a Pascal nyelvben is operátorokból és operandusokból állnak.
A Pascal programozási nyelv alapjai
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.
Tömbök és programozási tételek
Fájlkezelés Pascalban
Szintaktikai, szemantikai szabályok
1.3. Pascal program felépítése Az els ő program. Program ; … Begin … End. Program fej Deklarációs rész Végrehajtó rész.
Űrlapok.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Visual Basic 2008 Express Edition
Csempe Programozás érettségi mintafeladat
Logikai programozás 2..
Programozás III KOLLEKCIÓK.
Programozás III KOLLEKCIÓK.
Logikai programozás 9.. Programok: EGY KIS ISMERET-TÁGÍTÁS – struktura.pl – operatorok.pl, precedencia.pl – útvonaltervezés – send_more_money (smm1.pl,
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..
Objektum orientált programozás
Logikai programozás 3.. ISMÉTLÉS Elágazás-szervezés: a/ B :- A 11, A 12, …, A 1n. B :- A 21, A 22, …, A 2k. … B :- A m1, A m2, …, A mr. b/ B :- (A 11,
Logikai programozás BEVEZETÉS.
Logikai programozás 8.. KIINDULÓ PÉLDÁK
Programozás III KOLLEKCIÓK.
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),
1. feladat  Készíts olyan függvényt, mely paraméterül kapja két egész típusú változó címét, s hívása után a két változó értéke helyet cserél.
Free pascal feladatok
Alapfogalmak, adatforrások, szűrés
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Gráf szélességi bejárása. Cél Az algoritmus célja az, hogy bejárjuk egy véges gráf összes csúcsát és kiírjuk őket a kezdőcsúcstól való távolságuk szerint.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
A következő dián még van pár információ.
Az 5,6,7 laborok VBA anyagának összefoglalása
Logikai programozás 7..
Logikai programozás 8..
TÖMBÖK – péntek Jordán Sándor.
Programozási nyelvek típusossága.
Nevezetes algoritmusok
Atomi mondatok Nevek Predikátum
Programozás C# -ban Elágazások.
Meta-programozás (von) Neumann-elv Program-programozás (vírusok)
A CLIPS keretrendszer
A dia beszúrása a bemutatóba
A piros sál a leghosszabb.
Előadás másolata:

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, 4.2, szekszard). segelytKap(Diak) :- diak(Diak, Atlag, _), Atlag > 3.5. segelytKap(Diak) :- diak(Diak, _, Hely), Hely \== 'pecs'. Állapítsuk meg, hogy kik kapnak segélyt! TÖBBSZÖRÖS MEGOLDÁS ?- segelytKap(Diak). Diak = laci ; Diak = matyi ; Diak = jeno ; Diak = laci ; Diak = kati ; Diak = jeno.

1. Megoldás: listaba(L) :- listaba([],L). listaba(Akt, L) :- segelytKap(Diak), \+member(Diak,Akt), listaba([Diak|Akt], L). listaba(L,L). TÖBBSZÖRÖS MEGOLDÁS Többi: önállóan a végén.

kor(jani,6). kor(jozsi,4). kor(judit,7). kor(jani,6). kor(marci,6). kor(gizi,6). kor(jeno,3). kor(mari,5). kor(jani,6). kor(gizi,6). kor(jakab,4). kor(eva,6). kor(jani,5). kor(dezső,3). TÖBBSZÖRÖS MEGOLDÁS bagof(Nev, kor(Nev,6),L). setof(Nev, kor(Nev,6),L). findall(Nev, kor(Nev,6),L). bagof(Nev, kor(Nev,2),L). setof(Nev, kor(Nev,2),L). findall(Nev, kor(Nev,2),L). bagof(Nev,kor(Nev,Ev),L). setof(Nev,kor(Nev,Ev),L). findall(Nev,kor(Nev,Ev),L). setof(Nev, kor(Nev,_),L). findall(Nev, kor(Nev,_),L).

TÖBBSZÖRÖS MEGOLDÁS bagof(Valtozo, feltetel, Lista): Lista-ba gyűjti a Valtozo feltetel-nek megfelelő értékeit. Ahányszor megtalál egy értéket, annyiszor belerakja a listába. Ha nincs a feltételnek megfelelő elem,  false. setof(Valtozo, feltetel, Lista): Lista-ba gyűjti a Valtozo feltetel-nek megfelelő értékeit. Minden értéket csak egyszer rak a listába, majd növekvő sorrendbe rendezi a listát. setof(Valtozo, feltetel, Lista) :- bagof(Valtozo, feltetel, Lista1), sort(Lista1, Lista).

TÖBBSZÖRÖS MEGOLDÁS findall(Valtozo, feltetel, Lista): Lista-ba gyűjti a Valtozo feltetel-nek megfelelő értékeit. Ahányszor megtalál egy értéket, annyiszor belerakja a listába. Ha nincs a feltételnek megfelelő elem,  üres lista.

TÖBBSZÖRÖS MEGOLDÁS Lényeges különbség a bagof-setof és a findall között: Ha a feltételben van szabad változó, akkor a/ a bagof-setof behelyettesít oda egy lehetséges értéket, és kigyűjti a Valtozo megfelelő értékeit. b/ a findall minden lehetséges értéket behelyettesít a szabad változó helyére, és úgy gyűjti ki a Valtozo megfelelő értékeit.

TÖBBSZÖRÖS MEGOLDÁS Ez megoldható a bagof-setof-fal is: setof(Nev, Ev^kor(Nev,Ev), Nevek), A ^ jelentése: van olyan. Vagyis az Ev^kor(Nev,Ev) jelentése: van olyan Ev, amelyre kor(Nev,Ev) igaz, azaz van olyan Ev, amelyre a kor(Nev,Ev) szerepel az adatbázisban.

TÖBBSZÖRÖS MEGOLDÁS Más céllal, de térjünk vissza a kor/2 adatokat tartalmazó adatbázisra. forall(kor(Nev,6), writef('%w\n',[Nev])). forall(kor(Nev,Ev), writef('%w\t%w\n',[Nev,Ev])). forall(kor(Nev,_), writef('%w\n',[Nev])). forall(kor(Nev,Ev), barmi(Nev,Ev)).

TÖBBSZÖRÖS MEGOLDÁS Általánosan: forall(feltetel, akcio). FIGYELEM!! Ha a forall akció része hamis, akkor az egész forall is az!!

kocsmazok1.pl: szereti(pal,sor). … mernek(sarok,bor). … jar(Diak,Kocsma):-szereti(Diak,Ital), mernek(Kocsma,Ital). kocsmabaJarok :- writeln(‘A kocsmába járó diákok: ‘), … MÁR MEGINT KOCSMÁZÁS

kocsmazok2.pl: jar(Diak,Kocsma):-szereti(Diak,Ital), mernek(Kocsma,Ital). kocsmabaJarok :- writeln(‘A kocsmába járó diákok: ‘), … MÁR MEGINT KOCSMÁZÁS Működik, ha konzultálunk az ‘adatok.pl’ fájllal: :- consult(‘adatok.pl’). vagy start :- consult(‘adatok.pl’), …

Adatok: a tényállítások ADATBÁZISKEZELÉS consult : hatására az adatok bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani, sör). szereti(Ki, Mit). mernek(Hol, bor).

Beszúrás:assert/1 ADATBÁZISKEZELÉS pl.: assert(szereti(jani,bor)). Törlés:retract/1, retractall/1 pl.: retract(szereti(jani,bor)). retract(szereti(jani,_)). retract(szereti(_,_)). retractall(szereti(jani,_)). Ha nincs törlendő: eredmény: false Ha nincs törlendő: eredmény: true

Az előző műveletek végrehajtódnak, ha pl. a kocsmazok2.pl fájl futásakor adjuk ki a parancsokat, de hibaüzenettel elszáll a kocsmazok1.pl futása közben: ADATBÁZISKEZELÉS assert/1: No permission to modify static_procedure `szereti/2' A predikátumok alapértelmezetten statikusként fordulnak. Dinamikussá tétel: :- dynamic szereti/2. Figyelem! Ez deklaráció, nem predikátum, vagyis nincs zárójel!

Összes adat kilistázása: listing ADATBÁZISKEZELÉS pl.: listing(szereti/2). Az adatok addig „élnek”, amíg ki nem lépünk a futtató- környezetből. Fájlba mentés mint eddig, de a listing-gel egyszerűsíthető: pl.: fajlba:- tell(‘fajlnev’), listing(szereti/2), told. Hatására a dynamic deklaráció is a fájlba kerül – saját adatfájlnál is célszerű ide írni.

start :- beolvas, kiir. beolvas :- write('A diák neve: '), read(Nev), assert(diak(Nev)), write('Van még? (i/n)'), read(i), beolvas. kiir :- tell('fajlnev.txt'), listing(diak/1), told. ADATBÁZISKEZELÉS - PÉLDA :- dynamic diak/1. diak(jani). diak('béla'). diak(mari).