Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.

Podobné prezentace


Prezentace na téma: "Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu."— Transkript prezentace:

1 Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu

2 Příklad programu v procedurálním programovacím jazyce (Pascal)‏ Procedure kvadraticka_rovnice (a,b,c:Real); Begin D:=b*b-4*a*c if D<0 then writeln ('neni reseni'); if D=0 then writeln ('jedno reseni:', -b/(2*a)); if D>0 then begin D:=sqrt(D); R1:=(-b+D)/(2*a); R2:=(-b-D)/(2*a); writeln ('Dve reseni:', R1, R2); end;

3 Neprocedurální (logické) programování „Program“ je pouze popis situace, problému. Programátor nespecifikuje, jak problém řešit. To nechává na programu, respektive na překladači, či interpretu jazyka

4 Neprocedurální programovací jazyky LISP AUTOLISP Prolog (SWI-Prolog)

5 Příklad programu v Prologu Fakta pravidla

6 Fakta muz(tomas). muz petr). muz(jan). muz(jiri). muz(josef). muz(lukas). muz(bartolomej). zena(lucie). zena(zdislava). zena(petra). zena(hana). zena(johana). zena(anna).

7 Fakta rodic(tomas,josef). rodic(tomas,anna). rodic(lucie,josef). rodic(lucie,anna). rodic(petr,johana). rodic(petr,bartolomej). rodic(zdislava,johana). rodic(zdislava,bartolomej). rodic(jan,lukas). rodic(petra,lukas). rodic(jiri,tomas). rodic(jiri,petr). rodic(jiri,jan). rodic(hana,tomas). rodic(hana,petr). rodic(hana,jan).

8 Pravidla otec(X,Y) :- rodic(X,Y), muz(X). matka(X,Y) :- rodic(X,Y), zena(X). dite(X,Y) :- rodic(Y,X). sourozenec(X,Y) :- rodic(Z,X), rodic (Z,Y). bratr(X,Y) :- sourozenec(X,Y), muz(X). sestra(X,Y) :- sourozenec(X,Y), zena(X). manzel(X,Y) :- dite(Z,X), dite(Z,Y), muz(X). manzelka(X,Y) :- dite(Z,X), dite(Z,Y),zena(X).

9 Dotazy muz(tomas)‏ muz(anna)‏ otec(tomas,josef)‏ otec(X,josef)‏ dite(tomas,X)‏ dite(X,_)‏ otec(X,Y)‏ sestra(X,Y)‏ bratr(tomas,X)‏

10 Úkoly Napiše tato pravidla: dedecek(X,Y)‏ babicka(X,Y)‏ stryc(X,Y)‏ teta(X,Y)‏ synovec(X,Y)‏ neter(X,Y)‏ bratranec(X,Y)‏ sestrenice(X,Y)‏

11 Predikát řez (!) Vždy splněn Není povolen návrat přes něj

12 Použití řezu Problém s opakovaným výskytem sourozenců (kteří mají dva společné rodiče) sourozenec(X,Y) :- rodic(Z,X),!,rodic(Z,Y).

13 Predikát fail Nikdy není splněn Použití: technika „konstruktivního selhání“ vypismuze:-muz(X),write(X),nl,fail.

14 Technika cut and fail Způsob tvorby negace Zařídím, aby člověk nebyl sám sobě sourozencem.  ruzny(X,Y):-X=Y,!,fail.  ruzny(X,Y):-true.  sourozenec(X,Y) :- rodic(Z,X),!,rodic(Z,Y),ruzny(X,Y). Některé implementace Prologu (i SWi Prolog) obsahují přímo logickou spojku not, tvorbu negace není třeba takto opisovat.

15 Aritmetika soucet (A,B,C) :- C is A+B. soucin (A,B,C) :- C is A*B. sude_cislo(X) :- soucin(2,Y,X). (nefunguje, nevi se, co to je Y) cislo(X):-X=0. cislo(Y):-cislo(X),Y is X+1.

16 Albegrogram Zaměňte písmena za čísla, aby platilo: A * B * C = 6 + - + D + E + F = 6 + + - G + H + I =6 =4 =4 =4 Použijte čísla <=3.

17 Albegrogram řešení cis(0). cis(1). cis(2). cis(3). ohodnot(A,B,C,D,E,F,G,H,I) :- cis(A), cis(B), cis(C), cis(D), cis(E), cis(F), cis(G), cis(H), cis(I), 6 is A * B * C, 4 is A + D + G, 6 is D + E + F, 6 is G + H + I, 4 is C+F-I, 4 is B-E+H. ?- ohodnot(A,B,C,D,E,F,G,H,I).

18 Práce se seznamy http://iris.uhk.cz/logpro/teorie/teorie6.html Další příklady  http://iris.uhk.cz/logpro/


Stáhnout ppt "Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu."

Podobné prezentace


Reklamy Google