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,

Slides:



Advertisements
Hasonló előadás
Koordináták, függvények
Advertisements

Nevezetes algoritmusok
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ő:
Programozási tételek, és „négyzetes” rendezések
 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.
Gyakorló feladatsor eljárásokra Készítette: Rummel Szabolcs Elérhetősé:
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
Ismétlés. Ismétlés: Adatbázisok megnyitása: OPEN DATABASE adatbázis_név OPEN DATABASE ”adatbázis_név elérési útvonallal” Adattábla megnyitása: USE tábla_név.
Delphi programozás alapjai
Táblázat kezelő programok
Programozási alapismeretek 10. előadás
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.
16. Tétel. Adatbázis: Olyan adatgyűjtemény, amely egy adott feladathoz kapcsolódó adatokat szervezett módon tárolja, és biztosítja az adatokhoz való hozzáférést,
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
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.
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.
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,
MI A MEMÓRIA? A memória tulajdonképpen egy logikai áramkör, ami adatok megőrzésére alkalmas. Az adat számunkra most azt jelenti, hogy van-e jel vagy nincs.
A Pascal programozási nyelv alapjai
Félévi típus feladatok
A Pascal programozási nyelv alapjai
Tömbök és programozási tételek
Összetett adattípusok
Algoritmus gyakorlati feladatok
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Adatbázis kezelés. Az adatbázis tágabb értelemben egy olyan adathalmaz, amelynek elemei – egy meghatározott tulajdonságuk alapján – összetartozónak tekinthetők.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok
Programozási tételek.
A gyakorlatok munkakörnyezete
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..
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 5..
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
A Visual Basic nyelvi elemei
Power Lutár Patrícia Pellek Krisztián.  -ltLess than  -leLess than or equal to  -gtGreater than  -geGreater than or equal to  -eqEqual to  -neNot.
Táblázatkezelés KÉPLETEK.
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),
ProgramozásProgramozás célja hosszabb számítások elvégzése ill. kiíratása akkor érdemes programot írni, ha sok számolni való van illetve ha ugyanazt az.
Feladatok (értékadás)
Mintapélda Készítsünk programot, amely beolvas egy egész számot, és eldönti arról, hogy prímszám-e. Készítsünk programot, amely beolvas egy egész számot,
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
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?
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.
TÁMOP /1-2F Felkészítés szakmai vizsgára, informatika területre modulhoz II/14. évfolyam Az interaktív vizsga jellegzetes feladattípusainak.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Nemzetközi utalás magyar bankszámláról AdvCash-re onnan már könnyen feltölthető a PM számla! A regisztrációs linket kérd a szponzorodtól!
Excel alapok Templom Téri Német Nemzetiségi Általános iskola Pilisvörösvár 2015 A leggyakoribb Excel műveletek, ill. típusfeladatok Készítette: Kárpát.
Logikai programozás 7..
Logikai programozás 10..
Logikai programozás 8..
Nevezetes algoritmusok
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata október Skultéti Attila
Logikai programozás 4..
Kovács Gergely Péter Bevezetés
Meta-programozás (von) Neumann-elv Program-programozás (vírusok)
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Előadás másolata:

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, sör). szereti(Ki, Mit). mernek(Hol, bor). a tényállítások consult

Beszúrás:assert/1 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 ISMÉTLÉS: ADATBÁZISKEZELÉS

A beszúrás, törlés hatására hibaüzenetet kaphatunk: 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! ISMÉTLÉS: ADATBÁZISKEZELÉS

Összes adat kilistázása: listing 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. ISMÉTLÉS: ADATBÁZISKEZELÉS

assert/1: nem csak adatokat, hanem szabályokat is be tudunk szúrni. Szintaktikája: assert(a:-b.) ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA Pl.:szereti(jani, bor). szereti(eva, tej). arulnak(sarok, bor). arulnak(tejbolt, tej). egy :- assert(ember(X) :- szereti(X,_)). ketto :-assert(ital(X):-szereti(_,X)). harom :- assert(vasarol(X,Hely) :- (szereti(X,Y), arulnak(Hely,Y))).

„Szakértői rendszer” : A felhasználónak feltett választól függően a kocsmázáshoz vagy kell pénz, vagy sem, vagyis a választól függően a két szabály valamelyike használható: jar(Diak, Kocsma) :- szereti(Diak,Ital), mernek(Kocsma,Ital). jar(Diak, Kocsma) :- szereti(Diak,Ital), mernek(Kocsma,Ital), gazdag(Diak). ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA

Vagyis a választól függően: ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA retractall(jar(Diak,Kocsma):-(szereti(Diak,Ital), mernek(Kocsma,Ital), gazdag(Diak))), assert(jar(Diak,Kocsma):-(szereti(Diak,Ital), mernek(Kocsma,Ital))), vagy fordítva az assert és a retractall

Fibonacci sorozat ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA fib(0, 1). fib(1, 1). fib(N, F) :- N >= 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2. ?- fib(5,F). Nyomkövetés: 86 lépés. pontosvessző után újabb 40. újrafuttatás 86 lépés.

Fibonacci sorozat - módosítás ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA :- dynamic fib/2. fib(0, 1). fib(1, 1). fib(N, F) :- N >= 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2, asserta(fib(N,F)). ?- fib(5,F). Nyomkövetés: 58 lépés. pontosvessző után újabb 21. újrafuttatás 2 lépés.

Fibonacci sorozat – újabb módosítás ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA :- dynamic fib/2. fib(0, 1). fib(1, 1). fib(N, F) :- N >= 2, N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2, asserta(fib(N,F) :- !). ?- fib(5,F). Nyomkövetés: 58 lépés. pontosvessző után újabb 16. újrafuttatás 2 lépés.

Fibonacci sorozat – leghatékonyabb változat ASSERT/RETRACT TOVÁBBI ALKALMAZÁSA fib(0,1). fib(N,F) :- N > 1, fib(N,F,_). fib(1,1,1). fib(N,F,FElozo) :- N > 1, N1 is N-1, fib(N1, FElozo, FEE), F is FElozo + FEE. ?- fib(5,F). Nyomkövetés: 38 lépés. pontosvessző után újabb 9. újrafuttatás 38 lépés.

1. Egy szokatlan alkalmazás: „procedurális” összegzés ADATBÁZISKEZELÉS – PÉLDÁK szamol :- write('van még szám? i/n '), read(V), V = i, write(' a szám értéke: '), read(Sz), Uj is Eddig + Sz, szamol. start1:- retractall(ossz(_)), assert(ossz(0)), szamol. ossz(Eddig), retract(ossz(Eddig)), assert(ossz(Uj)), szamol :- ossz(S), writef('A számok összege: %w\n', [S]).

2. Adatbázisban lévő adatok (pl.: adat(kati,3).) összegzése: szamol(Eddig) :- adat(Nev,Db), Uj is Eddig + Db, szamol(Uj). szamol(Veg) :- writef('Az adatok összege: %w', [Veg]), visszair :- temp(Nev,Db), retract(temp(Nev,Db)), assert(adat(Nev,Db)),visszair. visszair. retract(adat(Nev,Db)), visszair. assert(temp(Nev,Db)), start :- szamol(0), … ADATBÁZISKEZELÉS – PÉLDÁK

3. Ugyanaz másképp (ügyesebben): start :- retractall(osszeg(_)), assert(osszeg(0)), forall(adat(_,Db),( retract(osszeg(Eddig)), Uj is Eddig + Db, assert(osszeg(Uj)) ) ), osszeg(Veg), writef('Az adatok összege: %w', [Veg]). ADATBÁZISKEZELÉS – PÉLDÁK

4. Max-keresés adatbázison (pl. adat(kati,3).)(a): start :- adat(Nev,Szam), max(Nev,Szam). max(_,Eddigimax) :- adat(Nev,Szam), Szam>Eddigimax, max(Nev,Szam). max(Nev,Max) :- writef('Legjobb %w %w értékkel', [Nev,Max]). Hátrányok: 1. csak kiírja, de nem tárolja a legjobbat 2. nem enged holtversenyt 3. rossz hatásfok Hol van az „else” ág? ADATBÁZISKEZELÉS – PÉLDÁK

5. Max-keresés adatbázison (pl. adat(kati,3).)(b): start :- adat(_,Szam), max2(Szam,Vegmax), writef('A legjobbak %w értékkel\n', [Vegmax]), forall(adat(Nev,Vegmax), writeln(Nev)). max2(Eddigimax,Vegmax) :- adat(_,Szam), Szam>Eddigimax, max2(Szam,Vegmax). max2(Vegmax,Vegmax). Ez sem őrzi meg az adatokat, de kezeli a holtversenyt. ADATBÁZISKEZELÉS – PÉLDÁK

6. Max-keresés adatbázison (pl. adat(kati,3).)(c): start :- adat(_,Szam), max2(Szam,Vegmax), writef('A legjobbak %w értékkel\n', [Vegmax]), findall(Nev, adat(Nev,Vegmax), Nevsor), ki(Nevsor). ki([Nev|T]) :- writeln(Nev), ki(T). ki([]). Most a Nevsor lista őrzi is a legjobbak névsorát. (Ez persze, nem biztos, hogy fontos.) Esetleg még: sort(Nevsor, Rendezett). ADATBÁZISKEZELÉS – PÉLDÁK

De persze így is lehet: findall(Szam, adat(_,Szam), Szamok) majd kikeresni a Szamok lista maximumát, és megkeresni, melyik nevekhez tartozik ez az érték. ADATBÁZISKEZELÉS – PÉLDÁK

Hogyan rendez? findall((Nev,Szam), adat(Nev,Szam), Adatok), sort(Adatok, Rendezve), findall((Szam,Nev), adat(Nev,Szam), Adatok), sort(Adatok, Rendezve), Megjegyzés: Attól még, hogy rendezéshez esetleg (Szam,Nev) alakban adjuk meg az adatokat, kiíratni Nev, Szam sorrendben illik! ADATBÁZISKEZELÉS – PÉLDÁK

A nevek.dat fájlban nevek vannak felsorolva. Be kell olvasni őket, és létrehozni egy diak(Nev,0) szerkezetű adatokból álló adatbázist. beolvas:- retractall(diak(_,_)), see('nevek.dat'), be, seen. be :- read(Nev), Nev \== end_of_file, be. assert(diak(Nev,0)), ADATBÁZISKEZELÉS – PÉLDÁK

Ugyanez elegánsabban: be :- repeat, read(Nev), ( Nev == end_of_file,!; assert(diak(Nev,0)), fail ). ADATBÁZISKEZELÉS – PÉLDÁK