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,

Slides:



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

Microsoft Excel Függvények I.
Programozási feladatok
Adatelemzés számítógéppel
Megszámlálás Elemi algoritmusok.
Diagnosztika szabályok felhasználásával, diagnosztikai következtetés Modell alapú diagnosztika diszkrét módszerekkel.
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
Comenius Logo alkalmazásai
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
INFOÉRA Dinamikus programozás (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai képzések.
Algoritmizálás, adatmodellezés tanítása 4. előadás
Programozási alapismeretek 3. előadás
Programozási alapismeretek 10. előadás
C A C nyelv utasításai.
Egy feladat megoldásának gondolatmenete. Feladat: Generáljuk véletlen számokat 1 és 6 között, amíg legalább 10 darab egyes és 10 darab hatos nem lesz.
Készítette: Pető László
Algebrai törtek.
Programozás I. Horváth Ernő.
Programozás I. Horváth Ernő.
AVL fák.
x2 x2 – 5x + 6 x(x ) + x(–2)+ (–3)(x) + (–3)(–2) = (x – 3)(x – 2) = Végezzük el a következő szorzást: (x-3)(x-2) =
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
Számoljuk meg rekurzív függvénnyel egy bináris fa leveleit!
ELTE Szlávi-Zsakó: Programozási alapismeretek Szlávi-Zsakó: Programozási alapismeretek 3. 1/
A problémamegoldás lépései
2012. február 15. Paulik Áron. i:=0 CIKLUS AMÍG i
A Pascal programozási nyelv alapjai
Ciklusok: 3. Hátultesztelő ciklus
Ciklusok: 2. Előltesztelő ciklus
A Pascal programozási nyelv alapjai
Lénárt Szabolcs Páll Boglárka
A rekurzió Páll Éve Boglárka.
Tömbök és programozási tételek
Szintaktikai, szemantikai szabályok
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Nem igaz, hogy a kocka vagy tetraéder. Nem igaz, hogy a kicsi és piros. a nem kocka és nem tetraéder. a nem kicsi vagy nem piros. Általában: "  (A  B)
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Algoritmus szerkezetek
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok
Java programozási nyelv Vezérlési szerkezetek
Programozási tételek.
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,
Dinamikus programozás
Programozási tételek.
Objektum orientált programozás
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Feladatok (értékadás)
OPERÁCIÓKUTATÁSDUALITÁS
Deduktiv adatbázisok. Normál adatbázisok: adat elemi adat SQL OLAP adatbázisok: adat statisztikai adat OLAP-SQL … GROUP BY CUBE(m1,m2,..)
Algoritmizálás, adatmodellezés
Programozási alapismeretek 10. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/  Kiválogatás + összegzés.
© Tóth Ákos, Óbudai Egyetem, 2010
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Horváth Bettina VZSRA6 Feladat: Szemléltesse az edényrendezést.
Iteráció, rekurzió, indukció. Iteráció iterációs módszer –egy adott műveletsort egymás után, többször végrehajtani megvalósítás –ciklusokkal pl. –hatványozás.
INFOÉRA 2006 Nagypontosságú aritmetika II.
Excel programozás (makró)
Készítette: Weigel Szilvia számítástechnika szak III. évfolyam, Budapest – ADU A Logo programozási nyelv X.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Szöveg beírásához kattintson ide A SCRATCH környezet bemutatása szakköri tapasztalatok alapján Gödöny Péter Budapesti Műszaki Szakképzési Centrum Pataky.
Programozási nyelvek csoportosítása.
Programozási alapok.
Logikai programozás 6..
Programozási nyelvek alapfogalmai
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

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, A 12, …, A 1n ) ; (A 21, A 22, …, A 2k ) ; … ; (A m1, A m2, …, A mr ). c/ feltétel -> akció.

ISMÉTLÉS: ELÁGAZÁS (példa) proba1(A, B) :- A < B, writeln('Az első szám kisebb'). proba1(A, B) :- A > B, writeln('A második szám kisebb'). proba1(_,_) :- writeln('Egyformák'). proba2(A,B) :- A < B, writeln('Az első paraméter kisebb') ; A > B, writeln('A második paraméter kisebb') ; writeln('Egyformák').

ISMÉTLÉS: ELÁGAZÁS (példa) proba3(A,B) :- A writeln('Az első szám kisebb') ; A > B -> writeln('A második szám kisebb') ; writeln('Egyformák'). proba4(A,B) :- A writeln('Az első paraméter kisebb') ; writeln('Nem kisebb az első').

„Normál” működés: B :- A 11, A 12, …A 1k-1, A 1k, A 1k+1, …, A 1n. B :- A 21, A 22, …, A 2m. … KITÉRŐ: CUT (vágás) Cut-tal (jele: !): B :- A 11, A 12, …A 1k-1, !, A 1k, A 1k+1, …, A 1n. B :- A 21, A 22, …, A 2m. …  

Példa: CUT – KICSIT RÉSZLETEZVE ha X < 3  Y = 0, ha 3<=X és X < 6  Y = 2, ha 6 <= X  Y = 4 f(X,0) :- X < 3. f(X,2) :- 3 =< X, X < 6. f(X,4) :- 6 =< X. igaze :- f(1, Y), 2 < Y.

CUT f(X,0) :- X < 3, !. f(X,2) :- 3 =< X, X < 6, !. f(X,4) :- 6 =< X. vagy: igaze :- f(1, Y),!, 2 < Y. A „cut” növelte a program hatékonyságát, de nem befolyásolta a deklaratív jelentését  green (zöld) cut f(X,0) :- X < 3. f(X,2) :- 3 =< X, X < 6. f(X,4) :- 6 =< X. CUT – KICSIT RÉSZLETEZVE

Új cél: ?:- f(7, Y) 7 < 3 hamis.  a 3 =< 7 feltételt fölösleges még egyszer megvizsgálni a második szabály kiértékelésekor. A program ügyesebb átfogalmazása: f(X,0) :- X < 3. f(X,2) :- 3 =< X, X < 6. f(X,4) :- 6 =< X. f(X,0) :- X < 3, !. f(X,2) :- X < 6, !. f(X,4). Ennek a programnak ugyanaz az eredménye, mint az eredetinek, de hatékonyabb mindkét előző verziónál. CUT – KICSIT RÉSZLETEZVE

Mi a helyzet cut nélkül? f(X,0) :- X < 3, !. f(X,2) :- X < 6, !. f(X,4). f(X,0) :- X < 3. f(X,2) :- X < 6. f(X,4). Az alternatívák végigvizsgálása miatt többszörös megoldást nyújt, melyek közül némelyik helytelen. ?:- f(1,Y) : Y=0 Y=2 Y=4 Megváltozott a program deklaratív jelentése is  red (vörös) cut CUT – KICSIT RÉSZLETEZVE

CUT – PÉLDA Példa: uzemel(parizs, hp). uzemel(parizs, dior). uzemel(parizs, chanel). uzemel(budapest, kinoin). uzemel(budapest, mom). elad(hp, 120). elad(dior, 200). elad(chanel, 300). elad(kinoin, 130). elad(mom, 140). nagy(C) :- fovaros(C, X), uzemel(X, Y), elad(Y, Z), Z > 100. fovaros(franciao, parizs). fovaros(usa, washington). fovaros(magyaro, budapest). nagy(C) :- fovaros(C,X), valami(X). valami(X) :- uzemel(X,Y), elad(Y, Z), Z > 100., !.

„CIKLUSSZERVEZÉS”: REKURZIÓ (ism.) A rekurzió részei: 1. rekurzív szabály(ok) (szabályfejben, szabálytörzsben ugyanaz a predikátumszimbólum szerepel) 2. megállító szabály(ok) (szabályfejben, szabálytörzsben nem szerepel ugyanaz a predikátumszimbólum)

REKURZIÓ – PÉLDA fakt(N,F) :- N>1, M is N-1, fakt(M,K), F is N*K. fakt(1,1). Vagyis: 1. rekurzív szabály: ha N >1, akkor számoljuk ki N-1 faktoriálisát, és szorozzuk meg N-nel. (Azaz n! = n*(n-1)!, n>1) 2. megállító feltétel: 1 faktoriális értéke 1.

fakt(N,F) :- N>1, M is N-1, fakt(M,K), F is N*K. fakt(1,1). KIÉRTÉKELÉS

FAKTORIÁLIS MÁSKÉPP Nem rekurzív megadás: N! = 1*2*3*… * I * … * N. I = 1; P = 1; ciklus amíg I <= N P = P * I; I = I + 1; ciklusvég Fakt = P fakt(N,F,I,P) :- I =< N, UjP is P*I, UjI is I + 1, fakt(N,F,UjI, UjP). fakt(_,F,_,F). fakt(N,F) :- fakt(N,F,1,1).

fakt(N,F,I,P) :- I =< N, UjP is P*I, UjI is I + 1, fakt(N,F,UjI, UjP). KIÉRTÉKELÉS fakt(3,F). fakt(3,F,1,1). 1 <= 3 fakt(3,F,2,1). 2 <= 3 fakt(3,F,3,2). 3 <= 3 fakt(3,F,4,6). 4 <= 3 F | 6 F = 6 Jobb-rekurzió (tail recursion) Hatékonyabb, mint a másik.

ÚTKERSÉSI PÉLDA ut(Start,Cel) :- repulo(Start,Cel). ut(Start,Cel) :- repulo(Start,Uj_varos), ut(Uj_varos,Cel). Problémák: Megoldás (előkészítése): Tárolni kell az adatokat! (Legalább a kiértékelés idejéig.)

LISTÁK Lista: elemek felsorolása, pl: [1, 3, 5, 4, 12, 27] [alma, körte, barack] [alma, 200, banán, 350, narancs, 270] [(alma, 200), (banán, 350), (narancs, 270)] [[alma, 200], [banán, 350], [narancs, 270]] [piaci(alma, 200), piaci(banán, 350), piaci(narancs, 270)] stb…

LISTÁK Lista definiálása: [Fej | Törzs] elemlista Rekurzív definíció kell megállító feltétel [] üres lista

LISTÁK – NÉHÁNY EGYSZERŰ PÉLDA – egy elem benne van-e egy listában? – hány elemű a lista? („sima” rekurzióval és jobb-rekurzióval) – egy elem törlése egy listából – a elemek szétválogatása stb…