Vous êtes sur la page 1sur 62

Programozs-elmlet

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}

M veletei: c., logikai: M veletei:

NOT; AND, OR, XOR, EQU, NAND, NOR, implikci. =, >, <, <>, >=, <=, IN.

Hasonlt opertorok:

Programozs-elmlet K.L.

2. Vals tpusosztly:

real single double extended comp

5+1 B 3+1 B 6+2 B 7+3 B

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))

II., sszetett tpusok


Egy vltoznv alatt tbb adat is eltrolhat. 1. Karaktersorozat: string M veletei: s = 'Szvegkonstans' Hossz (s) = n RszSztring (s,n,n) = sz Pozci (s1,s2) = n Konkaterci(s1,s2) = s12 array (azonos tpus elemek; hivatkozs sorszmmal) record (klnbz# tpus elemek; hivatkozs mez#nvvel)

2. Tmb: 3. Rekord:

Programozs-elmlet K.L.

III. Definilt tpusok


1. Tblzat: rekordok tmbje
tipus tblzat = tmbje[1..100] Rekord-nak mez 1: tipus1 mez 2: tipus2 mez 3: tipus3 Reko rd vge

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.

IV. Mutat tpus: pointer V. Konstansok: const


1. Definilt konstans 2. Tipizlt konstans

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.

Pldk: 1., Szmrendszervlts


Szam1 karaktersorozat SzR1, SzR2 [2..36] Szam2 karaktersorozat SzJ=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ Szam2: az SzR1 szmrendszerbeli Szam1 SzR2-ben

Be: Ki: Ef: Uf:

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

2., Fix idej programvrakoztats (max. ksleltets: 23 ra)


Eljrs Vrj(mp: vals) vlt t: Rekord ra,perc,mp,mp100: egsz Rekord vge p,v: vals RendszerId ?(t.ra,t.perc,t.mp,t.mp100) p:= 3600.0*t.ra + 60*t.perc + t.mp + t.mp100/100 v:= p+mp Ha v >= 86400 akkor Ciklus RendszerId ?(t.ra,t.perc,t.mp,t.mp100) Mgnem t.ra = 0 Ciklus vge v:= v-86400 Elgazs vge Ciklus RendszerId ?(t.ra,t.perc,t.mp,t.mp100) p:= 3600.0*t.ra + 60*t.perc + t.mp + t.mp100/100 Mgnem p >= v Ciklus vge Eljrs 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

Ki: Ef: Uf:

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 L Ha VAN, akkor --

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

Ltezik olyan 1<=i<=N, melyre T(X(i)) S : 1<=S<=N s T(X(S))

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

9., Sztvlogats a., Sztvlogats kt tmbbe


Be: Ki: X(N) T DB N Y(DB) Z(N-DB): -DB : Y(DB) : Z(N-DB) : 0<=DB<=N, X-beli T tulajdonsg elemek szma minden 1<=i<=DB esetn T(Y(i)) minden 1<=i<=N-DB esetn nemT(Z(i)) X nev#, N elem# tmb tulajdonsg darabszm Y nev#, DB elem# tmb Z nev#, N-DB elem# tmb

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

b., Sztvlogats egy tmbbe


Be: Ki: Ef: Uf: X(N) T DB N Y(N) -DB : Y(N) : 0<=DB<=N, X-beli T tulajdonsg elemek szma minden 1<=i<=DB esetn T(Y(i)) s minden DB+1<=i<=N esetn nemT(Y(i)) X nev#, N elem# tmb tulajdonsg darabszm Y nev#, N elem# tmb

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.

c., Sztvlogats helyben


Be: Ki: Ef: Uf: X(N) T DB N X(N) -DB : X(N) : 0<=DB<=N, X-beli T tulajdonsg elemek szma minden 1<=i<=DB esetn T(X(i)) s minden DB+1<=i<=N esetn nemT(X(i)) X nev#, N elem# tmb tulajdonsg darabszm X nev#, N elem# tmb

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.

12., sszefuttats, sszefsls


Be: Ki: Ef: Uf: X(N) Y(M) Z(K) X s Y Z(K) : X nev#, N elem# tmb Y nev#, M elem# tmb Z nev#, K elem# tmb

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.

14., Logaritmikus keress


Be: Ki: Ef: Uf: X(N) Y X nev#, N elem# tmb rtk S N logikai vltoz sorszm (rendezett)

VAN L Ha VAN, akkor

X elemeinek sorrendje rtk szeint nvekv

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

15., Visszalpses keress (BackTrack)


Be: Ki: Ef: Uf: N db sorozat T VAN L Ha VAN, akkor VAN=igaz, ha ltezik olyan S(N) sorozat, melyre T(S(N)) VAN=hamis egybknt. Ha VAN, akkor S(N) : az egyes sorozatok megfelel elemei sorszmnak tmbje M(1), M(2), ... M(N) elemszmmal tulajdonsg S(N) N logikai vltoz sorszmokat tartalmaz sorozat

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

msknt: (i,S(i)) nem zja ki (j,S(j))-t


pl: Sakktbla kirlyn i esetn S(i)<>S(j) s |i-j|<>|S(i)-S(j)|

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

Pldk: 1., Faktorilis szmtsa


Fggvny Fakt(n):szm Ha n<=1 akkor Fakt:=1 kl. Fakt:=nFakt(n-1) Fggvny vge Vgrehajts: Fakt(3) Ha 31 kl. Fakt:=3Fakt(3-1) Fakt(2) Ha 21 kl. Fakt:=2Fakt(2-1) Fakt(1) Ha 12 akkor Fakt:=1 Fggvny vge Fggvny vge Fggvny vge

Programozs-elmlet K.L.

21

2., Fibonacci sorozat


Fib(n)= 1 Fib(n-1)+Fib(n-2) ha ha n = 0 vagy n =1 n >1

Fggvny Fib(n):szm Ha n<=1 akkor Fib:=1 kl. Fib:=Fib(n-1)+Fib(n-2) Fggvny vge

3., Rendezs: QuickSort


Eljrs QuickSort(E,U) SztvlogatsHelyben(E,U, vlt K) Ha K-E>1 akkor QuickSort(E,K-1) Ha U-K>1 akkor QuickSort(K+1,U) Eljrs vge

4., Grafika: Terletfests


Eljrs Fests(X,Y) PontRajz(X,Y) Ha nem Festett(X-1,Y) Ha nem Festett(X,Y-1) Ha nem Festett(X+1,Y) Ha nem Festett(X,Y+1) Eljrs vge

akkor akkor akkor akkor

Fests(X-1,Y) Fests(X,Y-1) Fests(X+1,Y) Fests(X,Y+1)

5., Jtk: Hanoi tornyai


Eljrs Hanoi(N, vlt A, vlt B, vlt C) Ha N=1 akkor AB kl. Hanoi(N-1,A,C,B) A B Hanoi(N-1,C,B,A) Elgazs vge Eljrs vge

22

Programozs-elmlet K.L.

6., Fa adatszerkezet

7., Rajz: Fraktlok


Fraktl: minden olyan grbe vagy felszn, amely a felbontstl fggetlenl tbb-kevsb ugyangy nz ki

- 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

Pascalban: MoveTo Pascalban: LineRel

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

Pldaprogramok Pascalban: a., olvass fjlbl:


var f: text; s: string; begin assign(f,'c:\config.sys'); reset(f); while not eof(f) do begin readln(f,s); writeln(s); end; close(f); end.

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);

melyek definicija a Dos unitban tallhat.

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

Ezek utn futamok sszefuttatsa: 3. segdfjl:


1-2. futam rendezve 5-6. futam rendezve 9-10. futam rendezve

4. segdfjl:
3-4. futam rendezve 7-8. futam rendezve

1. segdfjl:

2. segdfjl:

1-4. futam rendezve

5-8. futam rendezve

9-12. futam rendezve

Vgl el#ll a rendezett fjl.

Programozs-elmlet K.L.

27

Programozsi nyelvek osztlyozsa


I. Felhasznl szerinti csoportosts
a., amat#r nyelv - prbeszdessg - gyors fejl#ds - sok nyelvi elem - egyszer programszerkezet - gpfgg#sg b., professzionlis nyelv - modularits - stabilits - kevs nyelvi elem - sszetett programszerkezet - gpfggetlensg

II. Emberkzelisg szerinti csoportosts


a., gpi nyelv: hexadecimlis kdok b., alacsonyszint : mnemonikok c., magasszint : sszetett utastsok, fggvnyek (pl. Pascal)
Plda: numerikus billenty zet (NumLock) kikapcsolsa programmal Mdostbillenty informcik a $0040:$0017 s a $0040:$0018 memriacmeken. A $0040:$0017 cm bitkiosztsa: 7. Insert 6. CapsLock 5. NumLock 4. ScrollLock 3. Alt keys (brmelyik) 2. Ctrl keys (brmelyik) 1. bal Shift 0. jobb Shift A $0040:$0018 cm bitkiosztsa: 7. Insert 6. CapsLock 5. NumLock 4. ScrollLock 3. Pause 2. PrintScreen 1. bal Alt 0. bal Ctrl

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

; Pascal/C asm bett esetn nem kell!

- gpnyelvi megvalsts: B8 40 00 8E C0 26 A0 17 00 24 DF 26 A2 17 00 CD 20

28

Programozs-elmlet K.L.

III. Szmtsi modell (m kds) szerinti csoportosts


a., Neumann-elv nyelvek (imperatv, utastsszerkezet ) - cmezhet# memria - adatok kezelse: vltozk, rtkads, beolvass, kirs - program: strukturlt felpts b., automata-elv nyelvek (pl. Logo) - llapotvltoztat m kds - llapottmenet-fggvny - llapotvltoztat s -lekrdez# utastsok - fix feloszts memria - nincsenek vltozk - bemenet: kiindulsi llapot + paramterezs - kimenet: llapotvltozs eredmnye (kimeneti llapot) - prhuzamossg - elgazs, ciklus + rekurzi c., logikai nyelvek (deklaratv; pl. Prolog - Programming in logic) - program: paramterezhet# logikai formula, logikai fggvny - f(x,y,z) {igaz, hamis} - f(?,?,3) megadja, mi lehet a ? helyn, hogy igaz legyen
Plda: csaldfa. Defincik: csaldtag(x) ha x=antal vagy x=bla vagy x=csaba vagy x=dezs vagy x=dnes vagy x=endre vagy x=erik vagy x=ern . apja(antal,bla ). apja(bla ,csaba). apja(csaba,dezs ). apja(csaba,dnes). apja(dezs ,endre). apja(dnes,erik ). apja(dnes,ern ). Szablyok: nagyapja(X,Y) ha apja(X,Z) s apja(Z,Y). se(X,Y) ha apja(X,Y) vagy apja(X,Z) s se(Z,Y). Krdsek: apja(antal,dezs ) hamis se(antal,dezs ) igaz apja(_,bla) antal nagyapja(bla,_) dezs , dnes se(_,endre) dezs , csaba, bla, antal

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

IV. Alkalmazs szerinti csoportosts


a., szmtsok - sok szmtpus, num. m veletek, jl kidolgozott tmbhasznlat - csekly rekord- s fjlkezels b., adatfeldolgozs (dBase) - adatstrukturls szles lehet#sge - formtumozs kperny#n, nyomtatn c., rendszerprogramozs (C) - hardverkihasznls - opercis rendszerrel kommunikls d., szvegfeldolgozs - sztringkezels, fjlkezels e., folyamatvezrls - prhuzamos m kds - portkezels f., szimulci - gyors - grafikus g., oktats (Basic, Pascal, Elan) - jl stukturlt, er#sen tpusos - szintaktikai ellen#rzs berskor h., ltalnos cl nyelvek

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

II. Taktikai elvek (a rszletekre vonatkozlag)


1. prhuzamos finomts 2. dntsek elhalasztsa (htha ks#bb egyrtelm sdik) 3. dntsek nyilvntartsa (folyamatos dokumentls) 4. vissza az #skhz (strukturban felette llk mdosthatk) 5. nylt rendszerfelpts (program ltalnostsa) 6. prhuzamos gak fggetlensge 7. strukturls (clszer mret rutinok hasznlata) 8. szintenknti teljes kifejts (elvileg nllan is m kd#kpes modulok) 9. adatok elszigetelse (loklis vltozk hasznlata)

III. Technolgiai elvek (forrskd formai kvetelmnyei)


1. strukturk zrjelezse (begin...end) 2. bekezdsek alkalmazsa 3. rtelmes azonostk hasznlata (konvencionlis s beszdes vltoznevek) 4. sorokra trdels rtelmesen (res sorok is) 5. kommentek alkalmazsa

IV. Eszttikai elvek (felhasznl eszttikai elvrsai)


1. lapkezels mdja - felhasznlra bzott megjelentsi id#tartam - clszer mennyisg s elhelyezs kitlts, ltvnyos adatcsoportosts - kiemelsek hasznlata (villogs kerlse) 2. menhasznlat - hierarchikus, szintenknt nhny menponttal - fajti: lland (fix) men, legrdl# men helyi men - vlaszts: aktulis jellsvel, kezd#bet vel, vagy egrrel 3. ikonok alkalmazsa 4. funkcibillenty k s forrbillenty k hasznlata 5. kvetkezetessg 6. hibakezels - jelzs azonnal (indoklssal) - hangjelzs kerlend# 7. help biztostsa 8. naplzs (fjlba rhat: ki, mikor, mit csinlt)

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).

b., Unknown identifier


A kurzor ltal mutatott kifejezs nem definilt azonost.

c., Error in statement


Pl. pontosvessz#vel lezrt IF utasts utn ELSE parancs, vagy eljrson bell a BEGIN utn vltozdefinils.

d., Duplicate definition


Kt klnbz# dolog ugyanolyan nven definilva (pl. a program neve megegyezik egy eljrs vagy vltoz nevvel).

e., Type mismatch


Tpushiba (pl. kt klnbz # tpus kifejezs egy m veletben).

f., String constant exceed line


Hinyzik a szvegkonstanst (string) lezr aposztrof.

g., Constant out of range Array out of range


A konstans vagy tmbindex a megengedett tartomnyon kivl esik.

h., Invalid for controll variable


rvnytelen FOR-ciklus vltoz (pl. a ciklusvltoz vals szm).

i., Invalid variable reference


rvnytelen vltoz hivatkozs (pl. egy fggvny vagy kifejezs utastsknt trtn# hasznlata esetn).

j., Line too long


A programsor hosszabb 127 karakternl.

k., Unexpexted end of line


Hinyzik a fjl-vge (end.) 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.)

b., File not found


A megadott fjl nem tallhat.

c., File access denied


A megadott fjl nem hozzfrhet# (pl. mert rsvdett, vagy mert ms alkalmazs hasznlja).

d., Invalid numeric format


rvnytelen szmformtum (pl. szmvltoz bekrse esetn a felhasznl bet ket ad meg).

e., Stack overflow error


Verem tlcsordulsi hiba (pl. tl sok rekurzv hvs esetn).

- 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 lehet sgek Pascalban


program Grafika; uses newdelay,graph; const path='c:\tp70\bgi'; var grDriver, grMode: integer; procedure Rajz; begin {Ez a grfikus utastsok helye.} end; begin grDriver := Detect; InitGraph(grDriver, grMode, path); Rajz; ReadLn; CloseGraph; end.

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

sszetett adatszerkezetek megvalstsa


Mutattpus hasznlata Pascalban: dinamikus memriakezels
program MutatoTipus_Demo; type MemCim=^LongInt; var Cim: MemCim; begin If MaxAvail>=SizeOf(LongInt) Then Begin New(Cim); WriteLn(Seg(Cim)); WriteLn(Ofs(Cim)); Dispose(Cim); End; end. program dinamikus_tomb; type MemCim elem = ^elem; = record adat: word; mut: MemCim; end; dintomb = record fej, akt: MemCim; end; dintomb; MemCim; byte; word;

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.

Statikus verem s m#veletei


Konstans Tipus MaxHossz = X ElemTip Index Verem : Y : 0..MaxHossz : Rekord tet : Index adat : [1..MaxHossz] tmbje ElemTipnek hiba : logikai Vge

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

Dinamikus verem s m#veletei


Tipus ElemTip : Y MemCim : ^VElem VElem : Rekord adat : ElemTip mut : MemCim Vge Verem : Rekord tet : MemCim hiba : logikai Vge

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.

Statikus sor s m#veletei


Konstans Tipus MaxHossz = X ElemTip : Y Index : 0..MaxHossz Sor : Rekord adat : [1..MaxHossz] tmbje ElemTipnek els : Index hossz : Index hiba : logikai Vge

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

Dinamikus sor s m#veletei


Tipus ElemTip : Y MemCim : ^SElem SElem : Rekord adat : ElemTip mut : MemCim Vge Sor : Rekord els : MemCim utols : MemCim hiba : logikai Vge

{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.

Statikus lista s m#veletei


Konstans Tipus MaxHossz = X ElemTip Index LElem : Y : 0..MaxHossz : Rekord adat : ElemTip mut : Index Vge : Rekord fej, szfej, akt : Index elem : [1..MaxHossz] tmbje LElemnek hiba : logikai Vge

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

Dinamikus lista s m#veletei


Tipus ElemTip MemCim LElem : Y : ^LElem : Rekord adat : ElemTip mut : MemCim Vge : Rekord fej, akt hiba Vge : MemCim : logikai

{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

vagy egyszer bben: BinFa : MemCim

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

Rendezs binris fval


Be: X(N) Ki: X(N) rendezve Eljrs Rendezs_BinFval res(f) f:=EgyelemFa(X(1)) Ciklus i:=2-tl N-ig HelyKeres(f,X(i)) Ciklus vge i:=1 BKJ(f) FaTrls(f) Eljrs vge Eljrs HelyKeres(vlt f:BinFa; e:ElemTip) Ha e<=GykrElem(f) akkor Ha res-e?(BalGyerek(f)) akkor BalraIlleszt(f,EgyelemFa(e)) kl. HelyKeres(BalGyerek(f),e) Elgazs vge kl. Ha res-e?(JobbGyerek(f)) akkor JobbraIlleszt(f,EgyelemFa(e)) kl. HelyKeres(JobbGyerek(f),e) Elgazs vge Elgazs vge Eljrs vge Eljrs BKJ(f:BinFa) Ha nem res-e?(f) akkor BKJ(BalGyerek(f)) Feldolgoz(GykrElem(f)) BKJ(JobbGyerek(f)) Elgazs vge Eljrs vge Eljrs Feldolgoz(e:ElemTip) X(i):=e i:=i+1 Eljrs vge

54

Programozs-elmlet K.L.

Postfix forma el lltsa Infix alakbl


Tipus LexEgys = Rekord fajta : (OPERANDUS,MUVJEL) adat : szveg Vge InFix PostFix v le : : : : Sor LexEgys Sor LexEgys verem LexEgys LexEgys bemenet kimenet

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

Postfix forma kirtkelse


Tipus LexEgys = Rekord fajta : (OPERANDUS,MUVJEL) adat : szveg Vge PostFix Eredm v le op1,op2 : : : : : Sor LexEgys vals verem vals LexEgys vals bemenet kimenet

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

Objektum = adattagok + metdusok

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

Vous aimerez peut-être aussi