Académique Documents
Professionnel Documents
Culture Documents
Oktatsi segdlet
sszelltotta: Kovcs Lszl
Programozs-elmlet K.L.
Tartalomjegyzk
A szmtgpes feladatmegolds lpsei..................................................................................................................3 A feladat meghatrozsa...........................................................................................................................................3 Adatszerkezetek .......................................................................................................................................................4 Algoritmuskszts ...................................................................................................................................................7 Programozsi ttelek ................................................................................................................................................9 Rekurzi .................................................................................................................................................................20 Fjlkezels..............................................................................................................................................................24 Programozsi nyelvek osztlyozsa .......................................................................................................................27 Programksztsi elvek...........................................................................................................................................30 Programhelyessgvizsglat.....................................................................................................................................31 Hibakeress s -javts ...........................................................................................................................................32 Hatkonysgvizsglat.............................................................................................................................................34 Dokumentls.........................................................................................................................................................36 sszetett adatszerkezetek megvalstsa................................................................................................................37 Statikus verem s m veletei ...................................................................................................................................40 Dinamikus verem s m veletei...............................................................................................................................41 Statikus sor s m veletei ........................................................................................................................................42 Dinamikus sor s m veletei....................................................................................................................................43 Statikus lista s m veletei.......................................................................................................................................44 Dinamikus lista s m veletei ..................................................................................................................................47 Binris fa ................................................................................................................................................................50 Grf ........................................................................................................................................................................56 Objektumorientlt programozs .............................................................................................................................58
Programozs-elmlet K.L.
Programozs
A szmtgpes feladatmegolds lpsei
1. A feladat meghatrozsa 2. Algoritmuskszts 3. Kdols: programkszts (a szg. szmra rthet# algoritmus rsa, fordtsa) 4. Tesztels, hibakeress, javts 5. Hatkonysgvizsglat 6. Dokumentls
A feladat meghatrozsa
Elemei:
1. Bemenet -kiindulsi adatok (megnevezs, tpusmeghatrozs) -bemen# paramterek -felhasznlhat fggvnyek, eljrsok 2. Kimenet -el#lltand adatok (megnevezs, tpusmeghatrozs) 3. El felttel -az algoritmus elksztse sorn figyelembe vehet# illetve veend# kiindulsi krlmnyek -a bemenetekre vonatkoz el#rsok illetve megktsek 4. Utfelttel -az algoritmussal szemben tmasztott kvetelmnyek -a lefuts utn a kimenetek rtkre vonatkoz meghatrozsok, elvrsok
1. plda: gykvons Be: Ki: Ef: Uf: X R Y12 R X >= 0 Y12 = X 2. plda: msodfok egyenlet megoldsa Be: Ki: Ef: Uf: a,b,c R x12 R a <> 0 x12 = s b2-4ac >= 0
b b2 4ac 2a
Programozs-elmlet K.L.
Adatszerkezetek
I., Elemi tpusok
Egy vltoznv alatt egyetlen adat trolhat el. 1. Megszmllhat tpusosztly: a., egszek: Tpus byte word shortint integer longint brzols: M veletei: b., karakteres: brzols: Mret 1B 2B 1B 2B 4B El#jel el#jel nlkli el#jel nlkli el#jeles el#jeles el#jeles Tartomny 0..255 0..65535 -128..+127 -32768..+32767 2 millird
kettes komplemens kdban +, , , DIV, MOD, INC, DEC; SHL, SHR, AND, OR, XOR. char 1B
ASCII kdtbla alapjn: 0 .. 31 vezrl# karakterek 32 .. 127 alapkarakterek 128 .. 255 kiegszt# karakterek (kdlap-fgg#) chr(65), ord('A'). boolean / logical 1B {false..true}
NOT; AND, OR, XOR, EQU, NAND, NOR, implikci. =, >, <, <>, >=, <=, IN.
Hasonlt opertorok:
Programozs-elmlet K.L.
2. Vals tpusosztly:
brzols: M veletei:
lebeg#pontos szmknt: mantissza+karakterisztika minden matematikai m velet s fggvny - pl: abs(), int(), random() - pascalban nincs hatvnyozs, de ab = exp(b*ln(a))
2. Tmb: 3. Rekord:
Programozs-elmlet K.L.
2. Rszintervallum: valamilyen megszmllhat tpus rsztartomnya 3. Halmaz: elemek csoportja, ahol - nincsenek azonos elemek - elemek sorrendje nem rtelmezhet# 4. Felsorols 5. Verem: Last In First Out (LIFO) 6. Sor: First In First Out (FIFO) 7. Lista 8. Grf: pontok s lek halmaza, ahol az lek ponttl pontig tartanak. 9. Fa: krmentes, irnytott, sszefgg# grf; minden pontja max. 1 bemen# s tetsz#leges szm kimen# llel. Binris fa: minden pontja max. 1 bemen# s max. 2 kimen# llel.
Programozs-elmlet K.L.
Algoritmuskszts
Algoritmus: utastssorozat, mely megadja egy feladat megoldsmenetnek pontos lerst - vges sok utastst tartalmaz - nem felttlenl vges vgrehajtsi idej - megfelel# sorrend (szemantikailag helyes) - utastsonknt megfelel#en paramterezett (szintaktikailag helyes) Strukturlt algoritmus elemei: a., szekvencia (soros algoritmus, blokk) b., szelekci (elgazs) - feltteles - tbbirny c., iterci (ciklus, ismtls) - elltesztel# - htultesztel# - szmll d., procedura (eljrs, szubrutin) e., fggvny Ugr utastsok nem elemei a strukturlt algoritmusnak! Programozs alapttele: minden algoritmus megvalsthat strukturltan. (Bhm-Jacopini - ttel)
Algoritmusler eszkzk Rajzos: ltvnyos, de nehezen szerkeszthet# 1., folyamatbra (blokkdiagram) 2., struktogram 3., Jackson-bra Szveges: nem annyira ltvnyos, de knnyen szerkeszthet# 1., mondatokkal trtn# lers nem egyrtelm , nem specifikus 2., programnyelven trtn# lers nem mindenki szmra rthet# 3., mondatszer lers (pszeudokd, lernyelv) el#nyk tvzse: anyanyelv , specifikus
Programozs-elmlet K.L.
H:=1 : Tizes:=0 Ciklus i:=Hossz(Szam1)-t l 1-ig -1-esvel Tizes:=Tizes+(Pozici(Szam1[i],SzJ)-1)*H H:=H*SzR1 Ciklus vge Szam2:= Ciklus amig Tizes>0 Szam2:=SzJ[Tizes mod SzR2]+Szam2 Tizes:=Tizes div SzR2 Ciklus vge
Programozs-elmlet K.L.
Programozsi ttelek
1., Sorozatszmts
Be: X(N) f F0 Y -Y=f(F0,X) X nev#, N elem# tmb fggvny kezd rtk rtk
Eljrs Sorozatszmts Y:=F0 Ciklus i:=1-t l N-ig Y:=f(Y,X(i)) Ciklus vge Eljrs vge Kapcsold feladat: - sszegzs, tlagszmts - szmrendszervlts tizes szmrendszerbe - egszkitev s hatvnyozs (12.11.) - faktorilis
2., Megszmlls
Be: Ki: Ef: Uf: X(N) T DB N -DB : 0<=DB<=N, X-beli T tulajdonsg elemek szma X nev#, N elem# tmb tulajdonsg darabszm
Eljrs Megszmlls DB:=0 Ciklus i:=1-t l N-ig Ha T(X(i)), akkor DB:=DB+1 Ciklus vge Eljrs vge Kapcsold feladat: - megszmlls tlagszmtshoz - szveg sztagszmnak meghatrozsa - kockadobsok: egyes, hatos, stb. dobsok szma (8.1.29.d., e., f.) - a rtknek kzeltse geometriai valszn #sg alapjn (10.50.)
10
Programozs-elmlet K.L.
3., Maximumkivlaszts
Be: Ki: Ef: Uf: X(N) MAX N -MAX : 1<=MAX<=N, X(MAX)>=X(i) minden 1<=i<=N esetn X nev#, N elem# tmb sorszm
Eljrs Maximumkivlaszts MAX:=1 Ciklus i:=2-t l N-ig Ha X(i)>X(MAX), akkor MAX:=i Ciklus vge Eljrs vge Kapcsold feladat: - minimumkivlaszts - kockadobsok: legtbbszr el fordul szm (8.1.29.g.) - egy szveg leghosszabb szavnak hossza
4., Eldnts
Be: Ki: Ef: Uf: X(N) T VAN L -VAN=igaz, ha ltezik olyan 1<=i<=N, melyre T(X(i)), VAN=hamis egybknt. X nev#, N elem# tmb tulajdonsg logikai rtk
Eljrs Eldnts i:=1 Ciklus amg i<=N s nem T(X(i)) i:=i+1 Ciklus vge VAN:=(i<=N) Eljrs vge Kapcsold feladat: - prmszmvizsglat (8.1.6.) - vizsglds mtrixokban (8.2.4., 8.2.8., 8.2.11.)
Programozs-elmlet K.L.
11
5., Keress
Be: Ki: Ef: Uf: X(N) T X nev#, N elem# tmb tulajdonsg S N logikai vltoz sorszm
VAN=igaz, ha ltezik olyan 1<=i<=N, melyre T(X(i)), VAN=hamis egybknt. Ha VAN, akkor S : 1<=S<=N s T(X(S))
Eljrs Keress i:=1 Ciklus amg i<=N s nem T(X(i)) i:=i+1 Ciklus vge VAN:=(i<=N) Ha VAN, akkor S:=i Eljrs vge Kapcsold feladat: - keress sztrban (rekordokat tartalmaz tmbben)
6., Kivlaszts
Be: Ki: Ef: Uf: X(N) T S N X nev#, N elem# tmb tulajdonsg sorszm
Eljrs Kivlaszts i:=1 Ciklus amg nem T(X(i)) i:=i+1 Ciklus vge S:=i Eljrs vge Kapcsold feladat: - legnagyobb kzs oszt s legkisebb kzs tbbszrs meghatrozsa (8.1.9., 8.1.10.)
12
Programozs-elmlet K.L.
7., Msols
Be: Ki: Ef: Uf: X(N) f Y(N) -Y(N) : Y(i)=f(X(i)) minden 1<=i<=N esetn X nev#, N elem# tmb fggvny Y nev#, N elem# tmb
Eljrs Msols Ciklus i:=1-t l N-ig Y(i):=f(X(i)) Ciklus vge Eljrs vge Kapcsold feladat: - fggvnytblzatok ksztse - ASCII kdtbla megjelentse (10.51.) - szveg megfordtsa ill. eszperente nyelvre fordtsa (10.52., 10.53.)
8., Kivlogats
Be: Ki: Ef: Uf: X(N) T DB N Y(DB): -DB : Y(DB): 0<=DB<=N, X-beli T tulajdonsg elemek szma minden 1<=i<=DB esetn T(X(Y(i))) X nev#, N elem# tmb tulajdonsg darabszm Y nev#, DB elem# tmb
Eljrs Kivlogats DB:=0 Ciklus i:=1-t l N-ig Ha T(X(i)), akkor DB:=DB+1 : Y(DB):=X(i) Ciklus vge Eljrs vge Kapcsold feladat: - szm sszes osztjnak meghatrozsa - Armstrong-szmok keresse (10.22.)
Programozs-elmlet K.L.
13
Ef: Uf:
Eljrs Sztvlogats_kt_tmbbe DB:=0 : DBZ:=0 Ciklus i:=1-t l N-ig Ha T(X(i)), akkor DB :=DB +1 : Y(DB) :=X(i) klnben DBZ:=DBZ+1 : Z(DBZ):=X(i) Ciklus vge Eljrs vge
Eljrs Sztvlogats_egy_tmbbe DB:=0 : DBZ:=0 Ciklus i:=1-t l N-ig Ha T(X(i)), akkor DB :=DB +1 : Y(DB):=X(i) klnben DBZ:=DBZ+1 : Y(N+1-DBZ):=X(i) Ciklus vge Eljrs vge
14
Programozs-elmlet K.L.
Eljrs Sztvlogats_helyben Y:=X(1) : E:=1 : U:=N Ciklus amg E<U Ciklus amg E<U s nem T(X(U)) U:=U-1 Ciklus vge Ha E<U, akkor X(E):= X(U) : E:=E+1 Ciklus amg E<U s T(X(E)) E:=E+1 Ciklus vge Ha E<U akkor X(U):=X(E) : U:=U-1 Felttel vge Ciklus vge X(E):=Y Ha T(Y) akkor DB:=E klnben DB:=E-1 Eljrs vge
Programozs-elmlet K.L.
15
10., Metszet
Be: Ki: Ef: Uf: X(N) Y(M) DB N Z(DB) X s Y DB : Z(DB) : X nev#, N elem# tmb Y nev#, M elem# tmb darabszm Z nev#, DB elem# tmb
halmazok 0<=DB<=min(N,M), XY halmaz elemeinek szma minden 1<=i<=DB esetn Z(i)X s Z(i)Y
Eljrs Metszet DB:=0 Ciklus i:=1-t l N-ig j:=1 Ciklus amg j<=M s X(i)<>Y(j) j:=j+1 Ciklus vge Ha j<=M akkor DB:=DB+1 : Z(DB):=X(i) Ciklus vge Eljrs vge
11., Uni
Be: Ki: Ef: Uf: X(N) Y(M) DB N Z(DB) X s Y DB : Z(DB) : X nev#, N elem# tmb Y nev#, M elem# tmb darabszm Z nev#, DB elem# tmb
halmazok 0<=DB<=N+M, XY halmaz elemeinek szma minden 1<=i<=DB esetn Z(i)X vagy Z(i)Y
Eljrs Uni Z:=X : DB:=N Ciklus i:=1-t l M-ig j:=1 Ciklus amg j<=N s X(j)<>Y(i) j:=j+1 Ciklus vge Ha j>M akkor DB:=DB+1 : Z(DB):=Y(i) Ciklus vge Eljrs vge
16
Programozs-elmlet K.L.
elemei rendezettek minden 1<=i<=K esetn Z(i)X vagy Z(i)Y (K a XUY halmaz elemeinek szma)
Eljrs sszefuttats i:=1 : j:=1 : k:=0 Ciklus amg i<=N s j<=M k:=k+1 Elgazs X(i)<Y(j) esetn: Z(k):=X(i) : i:=i+1 X(i)=Y(j) esetn: Z(k):=X(i) : i:=i+1 : j:=j+1 X(i)>Y(j) esetn: Z(k):=Y(j) : j:=j+1 Elgazs vge Ciklus vge Cilkus amg i<=N k:=k+1 : Z(k):=X(i) : i:=i+1 Ciklus vge Cilkus amg j<=M k:=k+1 : Z(k):=Y(j) : j:=j+1 Ciklus vge Eljrs vge Eljrs sszefsls i:=1 : j:=1 : k:=0 : X(N+1):=+ : Y(M+1):=+ Ciklus amg i<N+1 vagy j<M+1 k:=k+1 Ha X(i)<=Y(j), akkor Z(k):=X(i) : i:=i+1 klnben Z(k):=Y(j) : j:=j+1 Ciklus vge Eljrs vge
Programozs-elmlet K.L.
17
13., Rendezs
Be: Ki: Ef: Ki: X(N) X(N) -X(N) : elemek sorrendje rtk szerint nvekv (rendezett) X nev#, N elem# tmb X nev#, N elem# tmb
a., Eljrs Egyszer _csers_rendezs Ciklus i:=1-t l N-1-ig Ciklus j:=i+1-t l N-ig Ha X(j)<X(i), akkor s:=X(i) : X(i):=X(j) : X(j):=s Ciklus vge Ciklus vge Eljrs vge b., Eljrs Buborkelv _rendezs Ciklus i:=N-1-t l 1-ig -1-esvel Ciklus j:=1-t l i-ig Ha X(j)>X(j+1), akkor s:=X(j) : X(j):=X(j+1) : X(j+1):=s Ciklus vge Ciklus vge Eljrs vge c., Eljrs Minimumkivlasztsos_rendezs Ciklus i:=1-t l N-1-ig MIN:=i Ciklus j:=i+1-t l N-ig Ha X(j)<X(MIN), akkor MIN:=j Ciklus vge s:=X(MIN) : X(MIN):=X(i) : X(i):=s Ciklus vge Eljrs vge d., Eljrs Beillesztses_rendezs Ciklus i:=1-t l N-1-ig Y:=X(i+1) j:=i Ciklus amg j>0 s X(j)>Y X(j+1):=X(j) j:=j-1 Ciklus vge X(j+1):=Y Ciklus vge Eljrs vge
18
Programozs-elmlet K.L.
VAN=igaz, ha ltezik olyan 1<=i<=N, melyre Y=X(i), VAN=hamis egybknt. Ha VAN, akkor S : 1<=S<=N s Y=X(S)
Eljrs Logaritmikus_keress E:=1 : U:=N Ciklus k:=[(E+U)/2] Elgazs X(k)<Y esetn: E:=k+1 X(k)>Y esetn: U:=k-1 Elgazs vge Mgnem E>U vagy X(k)=Y Ciklus vge VAN:=(E<=U) Ha VAN, akkor S:=k Eljrs vge Kapcsold feladat: - 2 x = x 3 egyenlet megoldsa (10.45)
Programozs-elmlet K.L.
19
Eljrs Visszalpses_keress i:=1 : S(1):=0 Ciklus amig i>=1 s i<=N Ha VanJElem(i) akkor i:=i+1: S(i):=0 kl. i:=i-1 Ciklus vge VAN:=(i>N) Eljrs vge Fggvny VanJElem(i:szm):logikai Ciklus S(i):=S(i)+1 Mignem s(i)>M(i) vagy ElemRendben(i,S(i)) Ciklus vge VanJElem:=(S(i)<=M(i)) Fggvny vge Fggvny ElemRendben(i,S(i)):logikai j:=1 Ciklus amig j<i s T(i,S(i),j,S(j)) j:=j+1 Ciklus vge ElemRendben:=(j=i) Fggvny vge
20
Programozs-elmlet K.L.
Rekurzi
Matematikai m#velet:
1 Fakt(n)= n Fakt(n 1) ha n 1 ha n > 1
Algoritmusban:
- specifikci nmagra visszautal - eljrs sajt magt is meghvhatja
Programozsi nyelvben:
- rekurziv a nyelv, ha megengedi a vltozk sokszorozdst - rekurziv: Pascal, Logo - nem rekurziv: Basic
Programozs-elmlet K.L.
21
22
Programozs-elmlet K.L.
6., Fa adatszerkezet
- tulajdonsgai: - nhasonlsg: a grbe brmely rszt felnagytva az eredetivel azonos grbt kapunk - trtdimenzi: "Hny dimenzis a fa lombja?" - a sz eredete: Berniot B. Mandelbrot (Amerikban l#, lengyel szrm.) 1975: fraktus (latin: trtt)
Fraktlok a termszetben: a., - hpelyhek - jgvirg az ablakon - felh#k - villmls - hullmok - hegyek - partvonal - kristlyok - fa - pensz - korall - td# - idegsejt - m anyaghab
b., - mechanikai feszltsg skvegben => trs - eltpett papr hatrfellete Fraktlkutats terletei: a., koszelmlet: meteorolgia, orvostudomny b., trsmechanika c., nagy felletek kialaktsnak ignye - h t#felletek - hangszigetel#k - kataliztorok autk kipufoggzaihoz Fraktlok a m vszetben: - festszet - szmtgpes grafika - zene Linkajnlat: - fraktal.lap.hu
Programozs-elmlet K.L.
23
Nevezetes fraktlok: a., Koch-grbe Eljrs Koch irny:=0 Pozici1(0,0) KochRajz(4,270) Eljrs vge Eljrs KochRajz(szint, hossz: egsz) Ha szint=0 akkor x:=hosszcos(irny) y:=hosszsin(irny) VonalAktulisPontbl2(x,y) klnben KochRajz(szint-1,hossz/3) irny:=irny+60 KochRajz(szint-1,hossz/3) irny:=irny-120 KochRajz(szint-1,hossz/3) irny:=irny+60 KochRajz(szint-1,hossz/3) Elgazs vge Eljrs vge b., Sierpinski-csipke
c., Cantor-halmaz
1 2
24
Programozs-elmlet K.L.
Fjlkezels
Fjltpusok hozzfrs szerint: a., Szekvencilis: b., Direkt Hasznlat: 1. Logikai fjlvltoz deklarlsa -szveges fjl -tpusos fjl -tpus nlkli fjl 2. Hozzrendels(fjlvltoz,fjlnv) 3. Megnyits(fjlvltoz) 4. Fjlm veletek 5. Bezrs(fjlvltoz) Fjl megnyitsa: -ltrehozssal -csak olvassra -hozzf zsre -mdostsra Fjlm veletek: -sor olvassa -sor rsa -adat olvassa -adat rsa -blokk olvassa -blokk rsa -sorvge? -fjlvge? -hibakd? -fjlmret? -fjlpozci? -pozcionls -fjlcsonkts readln writeln read write blockread blockwrite seekeol,eoln seekeof eof ioresult filesize filepos seek truncate rewrite reset append reset close szveges tpusos tpus nlkli text file of ... file assign -soros hozzfrs -pl.: szveges fjl -kzvetlen hozzfrs -pl.: tpusos s tpus nlkli fjlok
szveges tpusos
tpus nlkli
Programozs-elmlet K.L.
25
b., rs fjlba:
var f: text; i: byte; begin assign(f,'ascii.txt'); rewrite(f); for i:=32 to 255 do writeln(f,i:6,chr(i):3); close(f); end.
Kapcsold feladat: Irassa ki fjlba a jv vi nnepnapok listjt, megadva az egyes nnepek dtumt, s hogy azok milyen napra esnek! - szksges hozz:
procedure SetDate(Year, Month, Day: Word); procedure GetDate(var Year, Month, Day, DayOfWeek: Word);
26
Programozs-elmlet K.L.
Rendezs: Problma: a fjl nagyobb, mint amekkora adatmennyisg befr a memriba. Megolds: ngysegdfjlos rendezs sszefuttatssal. FUTAM: az az adatmennyisg, ami mg befr a memriba. Eredeti fjl:
1. futam 2. futam 3. futam 4. futam 5. futam 6. futam
1. segdfjl:
1. futam rendezve 3. futam rendezve 5. futam rendezve 7. futam rendezve 9. futam rendezve
2. segdfjl:
2. futam rendezve 4. futam rendezve 6. futam rendezve 8. futam rendezve 10. futam rendezve
4. segdfjl:
3-4. futam rendezve 7-8. futam rendezve
1. segdfjl:
2. segdfjl:
Programozs-elmlet K.L.
27
Kikapcsoland a $0040:$0017 memriacm 5. bitje. (Maszk: 11011111 = DF) - magasszint megvalsts: begin Mem[$40:$17] := Mem[$40:$17] AND $DF; end. - alacsonyszint megvalsts: mov mov mov and mov int AX,40H ES,AX AL,ES:[17H] AL,0dfH ES:[17H],AL 20H
- gpnyelvi megvalsts: B8 40 00 8E C0 26 A0 17 00 24 DF 26 A2 17 00 CD 20
28
Programozs-elmlet K.L.
d., funkcionlis (fggvnyszer ) nyelvek - program: paramterezhet# fggvny - nincs: memria, vltoz, rtkads - van: paramter, fggvnyrtk, fggvnykompozci - f(g(x)) - ciklus helyett rekurzi
Programozs-elmlet K.L.
29
Programnyelv-genercik
1GL: - elemi adattpusok - beolvass, kirs, m veletek 2GL: - kifejezsek, szintaxis - zrjelezs - sszetett tpusok - fjlkezels 3GL: - stukturlt programozs - programozsi ttelek 4GL: - modulris programozs - objektumorientlt programozs - programkdgenertor 5GL: - prhuzamossg '50s '60s
'70s '80s
'90s
30
Programozs-elmlet K.L.
Programksztsi elvek
I. Stratgiai elvek
1. frontlis: "nekiesnk", s egyszerre mindent fejlesztnk (kerlend#) 2. fellr#l lefel: rszekre bontssal 3. alulrl felfel: nyelvi elemek prog. ttelek rutinok modulok
Programozs-elmlet K.L.
31
Programhelyessgvizsglat
A program helyes, ha az el#felttelek teljeslse esetn a program futtatsnak eredmnyeknt az utfelttel teljesl. A helyessgvizsglat mdszerei: 1. Tesztels (kiprbls jellemz# adatokkal) 2. rvnyests (valdi kiprbls les krnyezetben) 3. Bizonyts (ez az elvi mdszer a gyakorlatban nem mindig kivitelezhet#) 4. Levezets (formlis mdszer, a bizonyts ellentettje) 5. Hibakeress s -javts
Tesztels
I. Statikus tesztels: szg. nlkli forrskdellen#rzs 1. szintaktikai ellen#rzs - nyelvhelyessg - paramterezs - tpusellen#rzs 2. szemantikai ellen#rzs - ellentmondsok keresse - kezd#rtk hinya - felhasznlatlan vltozk - felttelek ellen#rzse II. Dinamikus tesztels: programfuttats 1. fekete doboz mdszer (feladatorientlt teszt): nem nz bele a prg. forrskdjba - ekvivalenciaosztlyok mdszere - hatrrtkvizsglat mdszere 2. fehr doboz mdszer (strukturavezrelt teszt): forrskd alapjn - utastslefeds elve minden utasts kerljn kiprblsra - felttellefeds elve minden felttel legyen igaz is s hamis is - rszfelttellefeds elve minden elemi felttelrsz kln-kln legyen igaz is s hamis is 3. specilis tesztek - volumenteszt: mennyisgi teszt nagy mennyisg adattal - stresszteszt: gyorsan rkez# bemen# adatokkal - biztonsgi teszt: rossz adatokkal - hatkonysgi teszt: futsi id# s helyfoglals mrse
32
Programozs-elmlet K.L.
Hibakeress s -javts
Hibajelensgek: - fordtsi hiba: szintaktikai hiba miatt a program el sem indul pldk Pascalban: a., " ; " expected " ) " expected Boolean expression expected THEN expected
A kurzor el#tti helyen pontosvessz#nek, csukzrjelnek, logikai kifejezsnek vagy THEN parancsnak kell szerepelnie (pl. nem lett pontosvessz#vel lezrva a kurzor el#tti utasts).
Programozs-elmlet K.L.
33
- futsi hiba: a program elindul, de hiba miatt megszakad pldk Pascalban: a., Division by zero
Nullval val oszts. (Turbo Pascal 7.0 esetn a Newdelay unit hinyra is utalhat.)
- nem ll le a program futsa (nem lehet zemszer en kilpni) - nem r ki semmit (vagy nem mindent) - rosszat r ki Hibajavtsi alapelvek: - "rdemes" gondolkodni - mirt nem azt csinlja, amit vrunk? - mirt azt csinlja, amit kapunk? - csak akkor javtsunk, ha megvan a hiba - javtani hibt kell, s nem a tneteit - egy hiba tbb hibajelensget is okozhat: minden egyes javts utn teszteljnk jra Mdszerek: 1. felttelkeress - mire ad j s mire rossz eredmnyt? ez mit l fgg? 2. visszalpses hibakeress - hiba helyb#l kell kiindulni, s onnan haladni visszafel a j rszig Hibakeress (debug) eszkzei: 1. Kirs 2. Lpsenknti vgrehajts (programnyomkvets) - meghvott eljrsok vgrehajtsa egy lpsknt (step over - F8) - meghvott eljrsok vgrehajtsa soronknt (trace into - F7) 3. Trspont (breakpoint - Ctrl+F8) 4. Adatnyomkvets (watch)
34
Programozs-elmlet K.L.
Hatkonysgvizsglat
A hatkonyvizsglat szempontjai: - vgrehajtsi id# - helyfoglals - bonyolultsg (ld. pl. Hanoi, terletfests) A hatkonysg megkzeltse: - globlis (algoritmushatkonysg - az algoritmust vizsglja) - loklis (kdhatkonysg - elemi utastsokat, tpusokat, m veleteket vizsglja)
Globlis hatkonysg
Vgrehajtsi id# szempontjbl Ciklus ciklus ideje = lpsszm * egyszeri vgrehajtsi id# I. Ciklus lpsszmnak cskkents 1. sorozat elemszmnak cskkentse pl.: prmszmvizsglat N helyett N -ig 2. sorozat rszekre bontsa pl.: lneris keress helyett logaritmikus keress 3. sorozatok prhuzamos feldolgozsa pl.: sszefuttats, uni 4. gyakorisg szerinti elrendezs - gyakoriakat el#re rakjuk egy sorozatban Eljrs Keress i:=1 Ciklus amg i<=N s nem X(i)=Y i:=i+1 Ciklus vge VAN:=(i<=N) Ha VAN s i>1 akkor csere (X(i),X(i-1)) Eljrs vge - lemezen: leggyakoribb adatok kzpen, ritkbbal szleken. II. Ciklusmag vgrehajtsi idejnek cskkentse 1. elgazstranszformls indexelss pl.: 100 kockadobs esetn mib#l hnyat dobtak? 2. felttelek egyszer stse, sztvlasztsa 3. adatok el#feldolgozsa pl.: sok keress el#tt rendezs 4. adatmozgatsok megszntetse pl.: buborkelv rendezs helyett minimumkivlasztsos
Programozs-elmlet K.L.
35
Helyfoglals szempontjbl Adatok elemszm * elemmret Programszveg I.a., Elemszmcskkents 1. sorozatok elemeinek trolsa helyett azok szmtsa pl.: faktorilis pl.: pixelgrafika helyett vektorgrafika 2. hzagos strukturk pl.: x 23 + 3 x 7 + 7 x ktdimenzis tmbben pl.: mtrixok sok 0 elem esetn pl.: tmrtsi eljrsok I.b., Elemmretcskkents 1. elemek szmtsa 2. elemek kdolsa II. Programszveg cskkentse (fordtkhoz is!) 1. eljrsok hasznlata 2. programozsi ttelek sszeptse 3. kd adatt formlsa (nll adatllomnyok hasznlata)
Loklis hatkonysg
Vgrehajtsi id# szempontjbl 1. gyors m veletek hasznlata 2. gyors tpusok hasznlata 3. fggvnyek megszntetse pl.: i < N helyett i i < N pl.: sin(x)/cos(x) helyett tg(x) 4. rszkifejezsek kln kiszmolsa 5. konstanskifejezsek 1 pl.: E = mv 2 helyett E = 0. 5 mv 2 2 6. algebrai talaktsok pl.: kiemels Helyfoglals szempontjbl 1. kis tpusok hasznlata 2. rszeredmny megszntetse 3. elgazs- s ciklussszevons 4. utastskiemels elgazsbl
36
Programozs-elmlet K.L.
Dokumentls
1. Felhasznli dokumentci
1.1. A program clja s leglnyegesebb funkcii - specilis elnevezsek, fogalmak, kifejezsek 1.2. Minimlis s optimlis konfigurci (HW, SW) 1.3. Hasznlat 1.3.1. Telepts lpsei - kiindulsi llomnyok - opcik (meghajt s knyvtr, teljes/rszleges, ...) - helyes telepts eredmnynek knyvtrai, llomnyai 1.3.2. Indts - felttelei - lehet#sgei 1.3.3. tfog ismertets - mennknt, kperny#nknt, opcikknt 1.3.4. Menszerkezet (menfa) - clszer en egy oldalon megvalstva, forrbillenty k feltntetsvel 1.3.5. Gyakran ismtl#d# krdsek (GyIK, FAQ, frequently askes questions) 1.4. Hibalehet#sgek - helytelen hasznlatbl add hibajelzsek magyarzata s lekezelse 1.5. Informcikrs - sajt help - knyvek - WEB-oldalak - a program kszt#jnek elrhet#sge (pl. e-mail cme) - tjkozds az jabb vltozatrl
2. Fejleszt#i dokumentci
2.1. Clkit zs, feladatmeghatrozs 2.2. Fejleszt#krnyezet (HW, SW) 2.3. Adatszerkezet, tpusok, vltozk 2.4. Algoritmusok 2.5. Tesztels (tesztdokumentci) 2.6. Fejlesztsi lehet#sgek 2.7. Mellklet - forrskd - irodalomjegyzk - trtneti ttekints (korbbi verzik jdonsgai)
3. Reklm / Demo
Programozs-elmlet K.L.
37
Pascal pldaprogram
program MotorCsonakAzas; uses crt; type kepernyo=array[1..25,1..80] of record alak: char; szin: byte; end; var kep: kepernyo absolute $B800:$0000; f,cs: byte; i,j,m: byte; ch: char; utkozes: boolean; Function sok(db: byte;k:char):string; var ii: byte; sz: string; begin sz:=''; for ii:=1 to db do sz:=sz+k; sok:=sz; end; Function Part:Boolean; begin if kep[25,cs].alak=chr(219) then part:=true else part:=false; end; Procedure FolyoSzelet(f:byte); begin gotoxy(1,1); insline; write(sok(f,chr(219))+sok(20,' ')+sok(60 -f,chr(219))); end; Procedure KezdoKep; begin TextColor(2); TextBackground(1); f:=30; cs:=40; utkozes:=false; for i:=1 to 25 do FolyoSzelet(f); end; Procedure Csonak; begin ch:=' '; while KeyPressed do ch:=ReadKey; if ch=#75 then cs:=cs-1; if ch=#77 then cs:=cs+1; utkozes:=Part; gotoxy(cs,25); write('A'); gotoxy(cs,25); end; Procedure Folyo; begin repeat m:=Random(2); if (m=0) and (f>2) then f:=f-1; if (m=1) and (f<58) then f:=f+1; FolyoSzelet(f); Csonak; Delay(2000); until utkozes or (ch=#27); end; begin ClrScr; Randomize; KezdoKep; Folyo; end.
38
Programozs-elmlet K.L.
Grafikus utastsok: pont megjelentse vonalrajzols putpixel(x,y,szin); line(x1,y1,x2,y2); lineto(x2,y2); linerel(x2,y2); setlinestyle(stlus,minta,vastagsg); moveto(x,y); moverel(x,y); setcolor(szn); setbkcolor(szn); rectangle(x1,y1,x2,y2); bar(x1,y1,x2,y2); circle(x,y,r); arc(x,y,k_szgfok,v_szgfok,r); ellipse(x,y,k_szgfok,v_szgfok,r1,r2); pieslice(x,y,k_szgfok,v_szgfok,r); setfillstyle(minta,szn); floodfill(x,y,hatrszn); outtext(szveg); outtextxy(x,y,szveg); settextstyle(bet#tipus,irny,mret); settextjustify(vzszintes, fgg leges);
vonaltipusllts graf. kurzor bellts sznllts tglalap tglalap kitltve kr krv elipszis krszelet kitltve kitltsllts zrt terlet kitltse szvegrs szvegformtumllts szvegigazts
Programozs-elmlet K.L.
39
var
t: uj: db: x:
begin writeln; writeln('Adj meg nhny poz. egsz szmot (vge:0)!'); db:=0; t.fej:=nil; t.akt:=nil; repeat db:=db+1; write(db); write('. '); readln(x); if x>0 then begin new(uj); if db=1 then t.fej:=uj else t.akt^.mut:=uj; uj^.adat:=x; uj^.mut:=nil; t.akt:=uj; end; until x=0; writeln; writeln('A megadott rtkek:'); t.akt:=t.fej; while t.akt<>nil do begin writeln(t.akt^.adat); t.akt:=t.akt^.mut; end; end.
40
Programozs-elmlet K.L.
Eljrs res(vlt v:verem) v.tet :=0 v.hiba:=hamis Eljrs vge Fggvny res-e?(v:verem):logikai res-e?:=(v.tet =0) Fggvny vge Fggvny Tele-e?(v:verem):logikai Tele-e?:=(v.tet =MaxHossz) Fggvny vge Fggvny Hibs-e?(vlt v:verem):logikai Hibs-e?:=(v.hiba) v.hiba:=hamis Fggvny vge Fggvny Tet#Elem(vlt v:verem):ElemTip Ha v.tet =0 akkor v.hiba:=igaz kl. Tet Elem:=v.adat[v.tet ] Fggvny vge Eljrs Verembe(vlt v:verem; konstans e:ElemTip) Ha Tele-e?(v) akkor v.hiba:=igaz kl. v.tet :=v.tet +1 v.adat[v.tet ]:=e Elgazs vge Eljrs vge Eljrs Veremb#l(vlt v:verem; e:ElemTip) Ha res-e?(v) akkor v.hiba:=igaz kl. e:=v.adat[v.tet ] v.tet :=v.tet -1 Elgazs vge Eljrs vge
Programozs-elmlet K.L.
41
Eljrs res(vlt v:verem) v.tet :=Nil v.hiba:=hamis Eljrs vge Fggvny res-e?(v:verem):logikai res-e?:=(v.tet =Nil) Fggvny vge Fggvny Tele-e?(v:verem):logikai Tele-e?:=(MaxSzabadBlokk<ElemMret(VElem)) Fggvny vge Fggvny Hibs-e?(vlt v:verem):logikai Hibs-e?:=(v.hiba) v.hiba:=hamis Fggvny vge Fggvny Tet#Elem(vlt v:verem):ElemTip Ha v.tet =Nil akkor v.hiba:=igaz kl. Tet Elem:=v.tet ^.adat Fggvny vge Eljrs Verembe(vlt v:verem; konstans e:ElemTip) vlt uj : MemCim Ha Tele-e?(v) akkor v.hiba:=igaz kl. Lefoglal(uj) uj^.adat:=e uj^.mut:=v.tet v.tet :=uj Elgazs vge Eljrs vge Eljrs Veremb#l(vlt v:verem; vlt e:ElemTip) vlt sv : MemCim Ha res-e?(v) akkor v.hiba:=igaz kl. e:=v.tet ^.adat sv:=v.tet v.tet :=v.tet ^.mut Felszabadt(sv) Elgazs vge Eljrs vge
42
Programozs-elmlet K.L.
Eljrs res(vlt s:sor) s.els :=1 s.hossz:=0 s.hiba:=hamis Eljrs vge Fggvny res-e?(s:sor):logikai res-e?:=(s.hossz=0) Fggvny vge Fggvny Tele-e?(s:sor):logikai Tele-e?:=(s.hossz=MaxHossz) Fggvny vge Fggvny Hibs-e?(vlt s:sor):logikai Hibs-e?:=s.hiba s.hiba:=hamis Fggvny vge Fggvny Els#Elem(vlt s:sor):ElemTip Ha res-e?(s) akkor s.hiba:=igaz kl. Els :=s.adat[s.els ] Fggvny vge Eljrs Sorbl(vlt s:sor; e:ElemTip) Ha res-e?(s) akkor s.hiba:=igaz kl. e:=s.adat[s.els ] s.els :=(s.els mod MaxHossz)+1 s.hossz:=s.hossz-1 Elgazs vge Eljrs vge Eljrs Sorba(vlt s:sor; konstans e:ElemTip) vlt j:Index Ha Tele-e?(s) akkor s.hiba:=igaz kl. j:=els +hossz Ha j>MaxHossz akkor j:=j-MaxHossz s.adat[j]:=e s.hossz:=s.hossz+1 Elgazs vge Eljrs vge
Programozs-elmlet K.L.
43
{kvetkez re mutat}
Eljrs res(vlt s:sor) s.els :=Nil s.utols:=Nil s.hiba:=hamis Eljrs vge Fggvny res-e?(s:sor):logikai res-e?:=(s.els =Nil) Fggvny vge Fggvny Tele-e?(s:sor):logikai Tele-e?:=(MaxSzabadBlokk<ElemMret(SElem)) Fggvny vge Fggvny Hibs-e?(vlt s:sor):logikai Hibs-e?:=s.hiba s.hiba:=hamis Fggvny vge Fggvny Els#Elem(vlt s:sor):ElemTip Ha res-e?(s) akkor s.hiba:=igaz kl. Els :=s.els ^.adat Fggvny vge Eljrs Sorbl(vlt s:sor; e:ElemTip) vlt smut: MemCim Ha res-e?(s) akkor s.hiba:=igaz kl. e:=s.els ^.adat smut:=s.els s.els :=s.els ^.mut Felszabadt(smut) Ha s.els =Nil akkor s.utols:=Nil Elgazs vge Eljrs vge Eljrs Sorba(vlt s:sor; konstans e:ElemTip) vlt j: MemCim Ha Tele-e?(s) akkor s.hiba:=igaz kl. Lefoglal(j) j^.adat:=e j^.mut:=Nil Ha s.els =Nil akkor s.els :=j kl. s.utols^.mut:=j s.utols:=j Elgazs vge Eljrs vge
44
Programozs-elmlet K.L.
Lista
Eljrs res(vlt l:lista) l.fej:=0 : l.hiba:=hamis : l.szfej:=1 : l.akt:=0 Ciklus i:=1-t l MaxHossz-1-ig l.elem[i].mut:=i+1 Ciklus vge l.elem[MaxHossz].mut:=0 Eljrs vge Fggvny res-e?(l:lista):logikai res-e?:=(l.fej=0) Fggvny vge Fggvny Tele-e?(l:lista):logikai Tele-e?:=(l.szfej=0) Fggvny vge Fggvny Hibs-e?(l:lista):logikai Hibs-e?:=(l.hiba=igaz) l.hiba:=hamis Fggvny vge Fggvny Elemrtk(vlt l:lista):ElemTip Ha l.akt=0 akkor l.hiba:=igaz kl. Elemrtk:=l.elem[l.akt].adat Fggvny vge Fggvny Vgn-e?(vlt l:lista):logikai Ha l.akt=0 akkor l.hiba:=igaz kl. Vgn-e?:=(l.elem[l.akt].mut=0) Fggvny vge
Programozs-elmlet K.L.
45
Eljrs Els#re(vlt l:lista) l.akt:=l.fej Eljrs vge Eljrs Kvetkez#re(vlt l:lista) Ha l.akt=0 akkor l.hiba:=igaz kl. l.akt:=l.elem[l.akt].mut Eljrs vge Eljrs ElemMdosit(vlt l:lista; konstans e:ElemTip) Ha l.akt=0 akkor l.hiba:=0 kl. l.elem[l.akt].adat:=e Eljrs vge Eljrs BeszrEls#nek(vlt l:lista; konstans e:ElemTip) Ha tele-e?(L) akkor l.hiba:=igaz kl. l.elem[l.szfej].adat:=e sv:=l.szfej l.szfej:=l.elem[sv].mut l.elem[sv].mut:=ol.akt l.fej:=sv l.akt:=sv Elgazs vge Eljrs vge Eljrs BeszrMg(vlt l:lista; konstans e:ElemTip) Ha tele-e?(L) akkor l.hiba:=igaz kl. Ha res-e? akkor BeszrEls nek(l,e) kl. Ha l.akt=0 akkor l.hiba:=igaz kl. l.elem[l.szfej].adat:=e sv:=l.szfej l.szfej:=l.elem[l.szfej].mut sv2:=l.elem[l.akt].mut l.elem[l.akt].mut:=sv l.elem[sv].mut:=sv2 l.akt:=sv Elgazs vge Elgazs vge Elgazs vge Eljrs vge
46
Programozs-elmlet K.L.
Eljrs BeszrEl(vlt l:lista; konstans e:ElemTip) Ha tele-e?(L) akkor l.hiba:=igaz kl. Ha l.akt=l.fej akkor BeszrEls nek(l,e) kl. Ha l.akt=0 akkor l.hiba:=igaz kl. l.elem[l.szfej].adat:=e sv:=l.szfej l.szfej:=l.elem[l.szfej].mut l.elem[sv].mut:=l.akt el z :=l.fej Ciklus amig l.elem[el z ].mut<>l.akt el z :=l.elem[el z ].mut Ciklus vge l.elem[el z ].mut:=sv l.akt:=sv Elgazs vge Elgazs vge Elgazs vge Eljrs vge Eljrs El#z#re(vlt l:lista) Ha l.akt=0 akkor l.hiba:=igaz kl. sv:=l.akt l.akt:=l.fej Ciklus amig l.elem[l.akt].mut<>sv l.akt:=l.elem[l.akt].mut Ciklus vge Elgazs vge Eljrs vge Eljrs BeszrElV(vlt l:lista, konstans e:ElemTip) Ha l.akt=l.fej akkor BeszrEls nek(l,e) kl. El z re(l) BeszrMg(l,e) Elgazs vge Eljrs vge Eljrs Trl(vlt l:lista) Ha l.akt=0 akkor l.hiba:=igaz kl. Ha l.akt=l.fej akkor l.elem[l.fej].mut:=l.szfej l.szfej:=l.fej l.fej:=l.elem[l.fej].mut l.akt:=l.fej Elgazs vge Eljrs vge
Programozs-elmlet K.L.
47
{kvetkez re mutat}
Lista
Eljrs res(vlt l:lista) l.fej:=Nil l.akt:=Nil l.hiba:=hamis Eljrs vge Fggvny res-e?(l:lista):logikai res-e?:=(l.fej=Nil) Fggvny vge Fggvny Tele-e?(l:lista):logikai Ha MaxSzabadBlokk<ElemMret(LElem) akkor Tele-e?:=igaz kl. Tele-e?:=hamis Fggvny vge Fggvny Hibs-e?(vlt l:lista):logikai Hibs-e?:=(l.hiba=igaz) l.hiba:=hamis Fggvny vge Fggvny Elemrtk(vlt l:lista):ElemTip Ha l.akt=Nil akkor l.hiba:=igaz kl. Elemrtk:=l.akt^.adat Fggvny vge Fggvny Vgn-e?(vlt l:lista):logikai Vgn-e?:=(l.akt=Nil) Fggvny vge
48
Programozs-elmlet K.L.
Eljrs Els#re(vlt l:lista) l.akt:=l.fej Eljrs vge Eljrs Kvetkez#re(vlt l:lista) Ha l.akt=Nil akkor l.hiba:=igaz kl. l.akt:=l.akt^.mut Eljrs vge Eljrs ElemMdosit(vlt l:lista; konstans e: ElemTip) Ha l.akt=Nil akkor l.hiba:=igaz kl. l.akt^.adat:=e Eljrs vge Eljrs BeszrMg(vlt l:lista; konstans e: ElemTip) vlt uj : MemCim Ha Tele-e?(l) vagy l.akt=Nil akkor l.hiba:=igaz kl. Lefoglal(uj) uj^.adat:=e Ha res-e?(l) akkor uj^.mut:=Nil l.fej:=uj kl. uj^.mut:=l.akt^.mut l.akt^.mut:=uj Elgazs vge l.akt:=uj Elgazs vge Eljrs vge Eljrs BeszrEls#nek(vlt l:lista; konstans e: ElemTip) vlt uj: MemCim Ha Tele-e?(l) akkor l.hiba:=igaz kl. Lefoglal(uj) uj^.adat:=e uj^.mut :=l.fej l.fej:=uj l.akt:=uj Elgazs vge Eljrs vge
Programozs-elmlet K.L.
49
Eljrs BeszrEl(vlt l:lista; konstans e: ElemTip) {brhov} vlt uj: MemCim Ha Tele-e?(l) akkor l.hiba:=igaz kl. Lefoglal(uj) Ha res-e?(l) vagy Vgn-e?(l) akkor uj^.adat:=e uj^.mut :=Nil Ha res-e(l) akkor l.fej:=uj kl. l.akt:=l.fej Ciklus amig l.akt^.mut<>Nil l.akt:=l.akt^.mut Ciklus vge l.akt^.mut:=uj Elgazs vge l.akt:=uj kl. uj^.adat:=l.akt^.adat l.akt^.adat:=e uj^.mut:=l.akt^.mut l.akt^.mut:=uj Elgazs vge Elgazs vge Eljrs vge Eljrs Trl(vlt l:lista) vlt smut: MemCim Ha l.akt=Nil akkor l.hiba:=igaz kl. Ha l.akt=l.fej akkor l.fej:=l.akt^.mut Felszabadit(l.akt) l.akt:=l.fej kl. smut:=l.fej Ciklus amig smut^.mut<>l.akt smut:=smut^.mut Ciklus vge smut^.mut:=l.akt^.mut Felszabadit(l.akt) l.akt:=smut^.mut Elgazs vge Elgazs vge Eljrs vge
50
Programozs-elmlet K.L.
Binris fa
Binris fa: specilis grf, mely - irnytott - sszefgg# - krmentes - minden pontjba pontosan egy l fut be (kivve gykrelem, ahol nulla) - minden pontjbl max. kett# l indul ki (kt rkvetkezs) - levlelem: nem indul bel#le l Statikus binris fa
Konstans Tipus MaxHossz = X ElemTip Index BinFaElem : Y : 0..MaxHossz : Rekord bal : Index adat : ElemTip jobb : Index Vge : Rekord fa fej szh hiba Vge : : : : tmbje[1..MaxHossz] BinFaElemnek Index Index logikai
BinFa
Dinamikus binris fa
Tipus ElemTip MemCim BinFaElem : Y : ^BinFaElem : Rekord bal : MemCim adat : ElemTip jobb : MemCim Vge : Rekord fej, akt : MemCim hiba : logikai Vge
BinFa
Programozs-elmlet K.L.
51
Eljrs res(vlt f:BinFa) f=Nil Eljrs vge Fggvny res-e?(f:BinFa):logikai res-e?:=(f=Nil) Fggvny vge Fggvny EgyelemFa(e:ElemTip):BinFa vlt f:BinFa Ha MaxSzabadBlokk<ElemMret(BinFaElem) akkor EgyelemFa:=Nil klnben Lefoglal(f) f^.adat:=e f^.bal:=Nil f^.jobb:=Nil EgyelemFa:=f Elgazs vge Fggvny vge Eljrs BalraIlleszt(vlt mihez:BinFa; konst mit:BinFa) Ha mihez^.bal=Nil akkor mihez^.bal:=mit Eljrs vge Fggvny BalGyerek(f:BinFa):BinFa Ha f<>Nil akkor BalGyerek:=f^.bal kl. BalGyerek:=Nil Fggvny vge Fggvny GykrElem(f:BinFa):ElemTip Ha f<>Nil akkor GykrElem:=f^.adat kl. GykrElem:=Y0 Fggvny vge Eljrs GykrMdosit(vlt f:BinFa; konst e:ElemTip) Ha f<>Nil akkor f^.adat:=e Eljrs vge Eljrs FaTrls(vlt f:BinFa) Ha nem res-e?(f) akkor FaTrls(BalGyerek(f)) FaTrls(JobbGyerek(f)) Felszabadit(f) f:=Nil Elgazs vge Eljrs vge
52
Programozs-elmlet K.L.
Fabejrsok
Eljrs BKJ(f:BinFa) Ha nem res-e?(f) akkor BKJ(BalGyerek(f)) Feldolgoz(GykrElem(f)) BKJ(JobbGyerek(f)) Elgazs vge Eljrs vge Eljrs BJK(f:BinFa) Ha nem res-e?(f) akkor BJK(BalGyerek(f)) BJK(JobbGyerek(f)) Feldolgoz(GykrElem(f)) Elgazs vge Eljrs vge Eljrs KBJ(f:BinFa) Ha nem res-e?(f) akkor Feldolgoz(GykrElem(f)) KBJ(BalGyerek(f)) KBJ(JobbGyerek(f)) Elgazs vge Eljrs vge
Programozs-elmlet K.L.
53
54
Programozs-elmlet K.L.
Vltoz
Eljrs PostFixKszt res(v) : res(PostFix) Ciklus amig nem res-e?(InFix) Sorbl(InFix,le) Elgazs le.fajta = OPERANDUS esetn Sorba(PostFix,le) le.adat = '(' esetn Verembe(v,le) le.adat = ')' esetn NyitigKivesz egybknt NemKisebbeketKiveszsEztBerak Elgazs vge Ciklus vge Veremrit Eljrs vge Eljrs NyitigKivesz Ciklus amig Tet(v)<>'(' Veremb l(v,le) Sorba(PostFix,le) Ciklus vge Verembl(v,le) Eljrs vge Eljrs NemKisebbeketKiveszsEztBerak vlt s: LexEgys Ciklus amig nem res-e?(v) s Prec(Tet(v))>=Prec(le.fajta) Verembl(v,s) Sorba(PostFix,s) Ciklus vge Verembe(v,le) Eljrs vge Fggvny Prec(jel: LexEgys):szm Elgazs jel.adat='+' vagy jel.adat ='-' esetn Prec:=1 jel.adat='*' vagy jel.adat ='/' esetn Prec:=2 jel.adat ='^' esetn Prec:=3 jel.adat ='(' esetn Prec:=4 Elgazs vge Fggvny vge
Programozs-elmlet K.L.
55
Eljrs Veremrit Ciklus amig nem res-e?(v) Verembl(v,le) Sorba(PostFix,le) Ciklus vge Eljrs vge
Vltoz
Eljrs Postfixrtk res(v) Ciklus amig nem res-e?(PostFix) Sorbl(PostFix,le) Ha le.fajta=OPERANDUS akkor Verembe(v,rtk(le.adat) kl. Verembl(v,op2) Verembl(v,op1) Verembe(v,KiSzmol(le.adat,op1,op2) Elgazs vge Ciklus vge Verembl(v,Eredm) Eljrs vge Fggvny Kiszmol(muv:szveg; op1,op2:vals): vals Elgazs muv='+' esetn KiSzmol:=op1+op2 muv='-' esetn KiSzmol:=op1-op2 muv='*' esetn KiSzmol:=op1*op2 muv='/' esetn KiSzmol:=op1/op2 muv='^' esetn KiSzmol:=op1^op2 Elgazs vge Eljrs vge
56
Programozs-elmlet K.L.
Grf
Grf: pontok (n) s lek (e) halmaza, ahol az lek ponttl pontig tartanak. Kapcsold fogalmak: t, kr, hurokl, prhuzamos lek, leveg#ben lg l, irnytott l, slyozott l, fokszm, izollt pont, sszefgg# grf, irnytott/irnytatlan grf. brzols: 1., Cscs- (szomszdsgi) mtrix: nn-es logikai tmb htrny: statikus 2., llista [+cscslista]: Tipus Grf: Rekord l: lista ^l [Cscs: lista ^pont] [hiba: logikai] Rekord vge
M veletei: Eljrs res(vlt g:grf) Fggvny res-e?(g:grf):logikai Fggvny Tele-e?(g:grf):logikai Fggvny Hibs-e?(vlt g:grf):logikai Fggvny Pontszm?(g:grf):egsz Fggvny lszm?(g:grf):egsz Eljrs PontBeilleszt(vlt g:grf; p:pont) Eljrs lBeilleszt(vlt g:grf; e:l) Eljrs PontTrl(vlt g:grf; pp:^pont) Eljrs lTrl(vlt g:grf; pe:^l) Fggvny Vanel?(g:grf; pp1,pp2:^pont):logikai Fggvny FokSzm(g:grf; pp:^pont):egsz Fggvny Kvetkez Pont(g:grf; pp:^pont; e:lsorszm):^pont
Kapcsold feladat: - Van-e t p1 s p2 kztt? - Melyik a legrvidebb t p1 s p2 kztt?
Programozs-elmlet K.L.
57
Grfbejrsok
Eljrs SzlessgiBejrs(g:grf; x:^pont) vlt s: sor ^pont h: halmaz ^pont p,sp: ^pont l: lsorszm resSor(s) resHalmaz(h) Sorba(s,x) Halmazba(h,x) Feldolgoz(g,x) Ciklus amig nem res-e?(s) Sorbl(s,p) Ciklus l:=1-t l FokSzm(g,p)-ig sp:=Kvetkez Pont(g,p,l) Ha nem Eleme(h,sp) akkor Sorba(s,sp) Halmazba(h,sp) Feldolgoz(g,sp) Elgazs vge Ciklus vge Ciklus vge Eljrs vge Eljrs MlysgiBejrs(g:grf; x:^pont) vlt v: verem (^pont,lsorszm) h: halmaz ^pont p,sp: ^pont l: lsorszm resVerem(v) resHalmaz(h) p:=x : l:=1 Halmazba(h,p) Feldolgoz(g,p) Ciklus Ciklus amig l<=FokSzm(g,p) sp:=Kvetkez pont(g,p,l) Ha nem Eleme(h,sp) akkor Verembe(v,(p,l)) p:=sp : l:=1 Halmazba(h,p) Feldolgoz(g,p) klnben l:=l+1 Elgazs vge Ciklus vge Veremb l(v,(p,l)) l:=l+1 Mgnem res-e?(v) s l>FokSzm(g,x) Ciklus vge Eljrs vge
58
Programozs-elmlet K.L.
Objektumorientlt programozs
Az objektum-orientlt programozs (rviden OOP) a termszetes gondolkodst, cselekvst kzelt# programozsi md, amely a programozsi nyelvek tervezsnek termszetes fejl#dse kvetkeztben alakult ki. Az gy ltrejtt nyelv sokkal strukturltabb, sokkal modulrisabb s absztraktabb, mint egy hagyomnyos nyelv. Egy OOP nyelvet hrom fontos dolog jellemez. Ezek a kvetkez#k: Az egysgbezrs (encapsulation) azt takarja, hogy az adatstruktrkat s az adott struktrj adatokat kezel# fggvnyeket (Smalltalk, illetve a TURBO Pascal terminolgival lve metdusokat) kombinljuk; azokat egy egysgknt kezeljk, s elzrjuk #ket a klvilg el#l. Az gy kapott egysgeket objektumoknak nevezzk. Az objektumoknak megfelel# trolsi egysgek tpust a C++-ban osztlynak (class) nevezzk. Az rkls (inheritance) azt jelenti, hogy adott, meglv# osztlyokbl levezetett jabb osztlyok rklik a definilsukhoz hasznlt alaposztlyok mr ltez# adatstruktrit s fggvnyeit. Ugyanakkor jabb tulajdonsgokat is definilhatnak, vagy rgieket jrartelmezhetnek. gy egy osztlyhierarchihoz jutunk. A tbbrt#sg (polymorphism) alatt azt rtjk, hogy egy adott tevkenysg (metdus) azonostja kzs lehet egy adott osztlyhierarchin bell, ugyanakkor a hierarchia minden egyes osztlyban a tevkenysget vgrehajt fggvny megvalstsa az adott osztlyra nzve specifikus lehet. Az n. virtulis fggvnyek lehet#v teszik, hogy egy adott metdus konkrt vgrehajtsi mdja csak a program futsa sorn derljn ki. Ugyancsak a tbbrt sg fogalomkrbe tartozik az n. overloading, aminek egy sajtsgos esete a C nyelv standard opertorainak tdefinilsa (operator overloading). Ezek a tulajdonsgok egytt azt eredmnyezik, hogy programkdjaink sokkal struktrltabb, knnyebben b#vthet#v, knnyebben karbantarthatv vlnak, mintha hagyomnyos, nem OOP-technikval rnnk #ket.
Programozs-elmlet K.L.
59
tipus tglalap = objektum a,b: vals; fggvny kerlet: vals; fggvny terlet: vals; objektum vge fggvny tglalap.kerlet: vals; kerlet:=2*(a+b); fggvny vge; fggvny tglalap.terlet: vals; terlet:=a*b; fggvny vge; tipus tglatest = objektum t: tglalap; m: vals; fggvny trfogat: vals; objektum vge; fggvny tglatest.trfogat: vals; trfogat:=t.terlet*m; fggvny vge; vlt. t1, t2: tglalap; tt: tglatest; Eljrs demo t1.a:= 5; t1.b:= 2; t2.a:=10; t2.b:=25; ki(t1.kerulet); ki(t1.terulet); ki(t2.kerulet); ki(t2.terulet); tt.t.a:=3; tt.t.b:=5; tt.m:=4; ki(tt.terfogat); Eljrs vge
60
Programozs-elmlet K.L.
program oop_teglalap;
type teglalap = object a,b: real; function kerulet: real; function terulet: real; end; function teglalap.kerulet: real; begin kerulet:=2*(a+b); end; function teglalap.terulet: real; begin terulet:=a*b; end; type teglatest = object t: teglalap; m: real; function terfogat: real; end; function teglatest.terfogat: real; begin terfogat:=t.terulet*m; end; var t1, t2: teglalap; tt: teglatest; begin t1.a:= 5; t1.b:= 2; t2.a:=10; t2.b:=25; writeln(t1.kerulet); writeln(t1.terulet); writeln(t2.kerulet); writeln(t2.terulet); tt.t.a:=3; tt.t.b:=5; tt.m:=4; writeln(tt.terfogat); end.
Programozs-elmlet K.L.
61
#include <stdio.h> typedef class { public: float a,b; float kerulet(); float terulet(); } teglalap; float teglalap::kerulet() { return 2*(a+b); }; float teglalap::terulet() { return a*b; } typedef class { public: teglalap t; float m; float terfogat(); } teglatest; float teglatest::terfogat() { return t.terulet()*m; } teglalap teglatest t1, t2; tt;
void main() { t1.a= 5; t1.b= 2; t2.a=10; t2.b=25; printf("%f\n",t1.kerulet()); printf("%f\n",t1.terulet()); printf("%f\n",t2.kerulet()); printf("%f\n\n",t2.terulet()); tt.t.a=3; tt.t.b=5; tt.m=4; printf("%f\n\n\n",tt.terfogat()); }
62
Programozs-elmlet K.L.
Egyb tmk
Algoritmusok
- Shell rendezs - tmrtsi eljrsok
Eljrsok, fggvnyek
- paramterezs sszetett adatokkal
Grafika
- kpformtumok
Interrupt
- fogalma, szerepe - hasznlata - DOS interrupt - plda: hanggenerls