Programozási tételek. Elemi programozási tételek. (Sorozathoz érték rendelése)

Hasonló dokumentumok
Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Összetett programozási tételek

Feladatok és megoldások a 11. heti gyakorlathoz

Közismereti informatika I. 4. előadás

Informatikai tehetséggondozás:

Algoritmizálás, adatmodellezés tanítása 2. előadás

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Algoritmizálás, adatmodellezés tanítása 2. előadás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Mérési adatok feldolgozása Méréselmélet PE_MIK MI_BSc, VI_BSc 1

Előző óra összefoglalása. Programozás alapjai C nyelv 3. gyakorlat. Karakter típus (char) Karakter konstansok. Karaktersorozatot lezáró nulla

PROGRAMOZÁSI TÉTELEK

Egyszerű programozási tételek

Egyszerű programozási tételek

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Méréselmélet PE_MIK MI_BSc, VI_BSc 1

V. GYAKORLATOK ÉS FELADATOK ALGEBRÁBÓL

Az összetett programozási tételek is egy tőről fakadnak

Tartalom. Programozási alapismeretek. 11. előadás

Tartalomjegyzék. 4.3 Alkalmazás: sorozatgyártású tűgörgő átmérőjének jellemzése

Programozási tételek. Dr. Iványi Péter

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Objektum Orientált Programozás VII.

Egyszerű programozási tételek

Statisztika. Eloszlásjellemzők

Informatikai tehetséggondozás:

Elsőbbségi (prioritásos) sor

Összetett programozási tételek 2.

Másolásra épülő algoritmusok

Egyszerű algoritmusok

Algoritmizálás és adatmodellezés 2. előadás

Programozási tételek. PPT 2007/2008 tavasz.

Matematika B4 I. gyakorlat

KOMBINATORIKA ELŐADÁS osztatlan matematikatanár hallgatók számára. Szita formula J = S \R,

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

Algoritmizálás, adatmodellezés tanítása 1. előadás

Algoritmizálás, adatmodellezés tanítása 1. előadás

? közgazdasági statisztika

Informatikai tehetséggondozás:

Programozási alapismeretek 11. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

Azonos névleges értékű, hitelesített súlyokból alkotott csoportok együttes mérési bizonytalansága

Matematika I. 9. előadás

Adatszerkezetek II. 10. előadás

Statisztika I. 4. előadás. Előadó: Dr. Ertsey Imre

Haladó rendezések. PPT 2007/2008 tavasz.

Számsorozatok. 1. Alapfeladatok december 22. sorozat határértékét, ha. 1. Feladat: Határozzuk meg az a n = 3n2 + 7n 5n létezik.

ALGEBRA. egyenlet megoldásait, ha tudjuk, hogy egész számok, továbbá p + q = 198.

Tulajdonságok. Teljes eseményrendszer. Valószínőségi változók függetlensége. Példák, szimulációk

Matematikai statisztika

Diszkrét Matematika 1. óra Fokszámsorozatok

Informatikai tehetséggondozás:

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

MATEMATIKA I. KATEGÓRIA (SZAKKÖZÉPISKOLA)

Algoritmizálás, adatmodellezés tanítása 7. előadás

ELEMI PROGRAMOZÁSI TÉTELEK

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Algoritmusok és adatszerkezetek I. 10. előadás

Járattípusok. Kapcsolatok szerint: Sugaras, ingajárat: Vonaljárat: Körjárat:

? közgazdasági statisztika

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Matematikai statisztika

Információs rendszerek elméleti alapjai. Információelmélet

Példák 2. Teljes eseményrendszer. Tulajdonságok. Példák diszkrét valószínőségi változókra

MINTAVÉTEL A MARKETINGKUTATÁSBAN, KÜLÖNÖS TEKINTETTEL A DIVIZÍV ÉS AZ AGGLOMERATÍV RÉTEGZÉSRE

8. Programozási tételek felsoroló típusokra

Algoritmizálás és adatmodellezés tanítása 3. előadás

24. tétel A valószínűségszámítás elemei. A valószínűség kiszámításának kombinatorikus modellje.

Rendező algoritmusok. Tartalomjegyzék. Készítette: Gál Tamás

ORVOSI STATISZTIKA. Az orvosi statisztika helye. Egyéb példák. Példa: test hőmérséklet. Lehet kérdés? Statisztika. Élettan Anatómia Kémia. Kérdések!

SZÁMELMÉLET. Vasile Berinde, Filippo Spagnolo

Visszalépéses keresés korlátozással

Hiba! Nincs ilyen stílusú szöveg a dokumentumban.-86. ábra: A példa-feladat kódolási változatai

Valószínűségszámítás. Ketskeméty László

6. Elsőbbségi (prioritásos) sor

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Matematikai játékok. Svetoslav Bilchev, Emiliya Velikova

1 k < n(1 + log n) C 1n log n, d n. (1 1 r k + 1 ) = 1. = 0 és lim. lim n. f(n) < C 3

Backtrack módszer (1.49)

Komplex számok. d) Re(z 4 ) = 0, Im(z 4 ) = 1 e) Re(z 5 ) = 0, Im(z 5 ) = 2 f) Re(z 6 ) = 1, Im(z 6 ) = 0

Multihalmaz, intervallumhalmaz

Algebrai egyenlőtlenségek versenyeken Dr. Kiss Géza, Budapest

AZ OPTIMÁLIS MINTANAGYSÁG A KAPCSOLÓDÓ KÖLTSÉGEK ÉS BEVÉTELEK RELÁCIÓJÁBAN

FELADATOK A KALKULUS C. TÁRGYHOZ

PROGRAMOZÁSMÓDSZERTAN

Populáció. Történet. Adatok. Minta. A matematikai statisztika tárgya. Valószínűségszámítás és statisztika előadás info. BSC/B-C szakosoknak

2. fejezet. Számsorozatok, számsorok

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Közismereti informatika 2.zh T-M szakirány

Kombinatorika. Variáció, permutáció, kombináció. Binomiális tétel, szita formula.

Általános taggal megadott sorozatok összegzési képletei

Programozási tételek felsorolókra

Rendezések. Összehasonlító rendezések

Ismérvek közötti kapcsolatok szorosságának vizsgálata. 1. Egy kis ismétlés: mérési skálák (Hunyadi-Vita: Statisztika I o)

Feladatok megoldása. Diszkrét matematika I. Beadandó feladatok. Bujtás Ferenc (CZU7KZ) December 14, feladat: (A B A A \ C = B)

VII. A határozatlan esetek kiküszöbölése

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Átírás:

Programozás tételek I. Elem programozás tételek (Sorozathoz érték redelése)

Olya algortmusokat tárgyaluk meg, amelyek a programozás sorá redszerese előforduló feladatok megoldására kész választ adak. Ezeket az algortmusokat programozás tételekek hívják. A programozás tételek azok az építőkövek, amelyek egy program létrehozása sorá mdutala előfordulak. I / 1. Eldötés Általáos feladat: Adott egy elemű sorozat. Állapítsuk meg, va-e bee T tulajdoságú elem! T függvéy a H halmazbél elemekhez redel logka gaz, vagy hams értéket. A sorozatot az elemű X vektorba tároljuk, mely elemek H halmazba tartozak. Bemeet N, X H, T : H L előfeltétel cs Voltlye= (1 ) : T ( X ( )) Kmeet Voltlye L Eljárás Eldötés :=1 Cklus amíg és em T(X()) :=+1 voltlye:=( ) Eljárás vége. Példa: Egy hóapo keresztül mde ap délbe megmértük egy folyó vízállását. Ha 200cm-él magasabb a vízállás, akkor a folyó árad. Állapítsuk meg, volt-e áradás a hóapba! Bemeet előfeltétel cs N, X R, gaz hax ( ) > 200 T : hams külöbe Voltlye= (1 ) : X ( ) > 200 Eljárás Eldötés :=1 Cklus amíg és em (X()>200) :=+1 voltlye:=( ) Eljárás vége. Kmeet Voltlye L

program magasvz; type valostomb=array[1..35]of real; var, :teger; Voltlye:Boolea; X:valostomb; procedure be; repeat wrtel('kerem a meresek szamat!'); readl(); utl ( (<=35) ad (>0) ); for :=1 to do ; wrtel('kerem az',,'. ap vzallasat'); readl(x[] ); procedure utofeltetel; :=1; whle ((<=) ad (ot (X[]>200))) do c(); procedure k; voltlye:=(<=); f voltlye the wrtel('aradt') else wrtel('em aradt'); be; utofeltetel; k; ed.

I / 2. Kválasztás Általáos feladat: Adott egy elemű sorozat. Állapítsuk meg, melyk sorszámú elem T tulajdoságú! T függvéy a H halmazbél elemekhez redel logka gaz, vagy hams értéket. Bemeet N, X H, T : H L előfeltétel (1 ) : T( X ( )) sorsz= (1 sorsz ) ést ( X ( sorsz)) Eljárás kválasztás :=1 Cklus amíg ( és em T(X()) ) :=+1 sorsz:= Eljárás vége. Kmeet sorsz N Példa A maxmum 35 fős testvérosztály láya között va kékszemű. Azt szereték megtud, melyk láy az. A láyok szeme szíét egy olya tömbbe tároljuk, amek mde eleme egy karakter. Ez a karakter a szemszí kezdőbetűje. Bemeet N, X karakter, gaz hax ( ) = ' k ' T : hams külöbe előfeltétel (1 ) : ( X ( ) = ' k ') sorsz= (1 sorsz ) és X ( sorsz) = ' k ' Eljárás kválasztás :=1 Cklus amíg ( és em (X()= k ) :=+1 sorsz:= Eljárás vége. Kmeet sorsz N

program kek_a_szeme; uses crt; type karaktertomb=array[1..35]of char; var,, sorsz:teger; X:karaktertomb; procedure be; repeat wrtel('kerem a testverosztaly letszamat!'); readl(); utl ( (<=35) ad (>0) ); for :=1 to do ; wrtel('kerem az',,'. lay szeme szet'); (X[]):=readkey; wrtel(x[]); procedure utofeltetel; :=1; whle ((<=) ad (ot (X[]='k'))) do c(); sorsz:=; procedure k; wrtel(sorsz, '. lay kekszemu'); be; utofeltetel; k; ed.

I / 3. Keresés I / 3.1. Leárs keresés (keresés redezetle sorozatba) Általáos feladat: Adott egy elemű sorozat. Állapítsuk meg, va-e bee T tulajdoságú, és ha va, akkor melyk elem az! Bemeet N, X H, T : H L előfeltétel cs Kmeet Példa Voltlye= (1 ) : T ( X ( )) sorsz= (1 sorsz ) ést ( X ( sorsz)) Voltlye L sorsz N Eljárás keresés :=1 Cklus amíg és em T(X()) :=+1 voltlye:=( ) Ha voltlye akkor sorsz:= Eljárás vége. A maxmum 35 fős testvérosztály láya között em tudjuk va-e kékszemű. Azt szereték megtud, hogy va-e és ha va, akkor melyk láy az. A láyok szeme szíét egy olya tömbbe tároljuk, amek mde eleme egy karakter. Ez a karakter a szemszí kezdőbetűje. Bemeet előfeltétel cs N, X karakter, gaz hax ( ) = ' k ' T : hams külöbe Voltlye= (1 ) : X ( ) = ' k ' sorsz= (1 sorsz ) és X ( sorsz) = ' k ' Eljárás keresés :=1 Cklus amíg ( és em (X()= k ) :=+1 voltlye:=( ) Ha voltlye akkor sorsz:= Eljárás vége. Kmeet sorsz N

program kek_e_a_szeme; uses crt; type karaktertomb=array[1..35]of char; var,, sorsz:teger; Voltlye:Boolea; X:karaktertomb; procedure be; repeat wrtel('kerem a testverosztaly letszamat!'); readl(); utl ( (<=35) ad (>0) ); for :=1 to do ; wrtel('kerem az',,'. lay szeme szet'); (X[]):=readkey; wrtel(x[]); procedure utofeltetel; :=1; whle ((<=) ad (ot (X[]='k'))) do c(); voltlye:=(<=); procedure k; f voltlye the sorsz:=; wrtel(sorsz, '. lay kekszemu'); ed else wrtel('ncs kekszemu'); be; utofeltetel; k; ed.

I / 3.2. Logartmkus keresés (keresés redezett sorozatba) Általáos feladat: Adott egy elemű redezett X() sorozat és egy keresett eleme (Y). Keressük a sorozatba az adott Y elemet. Vzsgáljuk meg első lépésbe a sorozat középső elemét! ha ez a keresett elem, akkor késze vagyuk. Ha a keresett elem ksebb, akkor csak a megelőzőek között lehet, tehát a továbbakba a sorozatak arra a részére kell alkalmaz. Ha a keresett elem eél agyobb, akkor pedg ugyaeze elv alapjá a sorozat ezt követő részére. Ez a megoldás az utófeltételt s szgorítja. Bemeet előfeltétel Kmeet N, X H : H L Y H : keresettelem X ( ) X ( + 1) (1 ) Voltlye= (1 ) : X ( ) = Yés voltlye (1 sorsz ) ésx ( sorsz) = Y (1 sorsz) : X ( ) Yés ( sorsz ) : X ( ) Y Voltlye L sorsz N eljárás keresés E:=1; U:=N Cklus k:=t((e+u)/2) { (E+U)/2 egészrésze } elágazás Y<X(k) eseté: U:=k-1 Y>X(k) eseté: E:=k+1 elágazás vége amíg E U és X(k) Y voltlye:=e u Ha voltlye akkor sorsz:=k Eljárás vége. program logartmkus_kereses; {most éppe a 10-es számot keressük} uses crt; cost maxn=35; Ttulajdosagu='A 10-es szám'; type elemtpus=teger; TombTpus=array[1..maxN]of elemtpus; var,, sorsz:teger; E,K,U:teger; Voltlye:Boolea; X:TombTpus; procedure be; repeat wrtel('háy adatot dolgozuk fel? '); readl(); utl [1..maxN] ;

:=1; wrte('kerem a(z) ',,'. számot '); Read(X[]); for :=2 to do ; repeat {előfeltétel: redezett sorozat!!!} wrte('kerem a(z) ',,'. számot '); Read(X[]); f X[]<X[-1] the wrtel('az előzőél agyobbat!') utl X[]>=X[-1] procedure utofeltetel; E:=1;U:=N; K:=truc((E+U)/2); repeat K:=truc((E+U)/2); wrtel(' K= ',K,' E= ',E,' U= ',U); f 10 < X[K] the U:=K-1; wrtel('közepétől balra lehet U:=K-1 [(E+U)/2]'); f 10 > X[K] the E:=K+1; wrtel('közepétől jobbra lehet E:=K+1 [(E+U)/2]' ); utl ot (((E<=U) ad ((X[k]) <>10))); voltlye:=(e<=u); procedure k; f voltlye the sorsz:=k; wrtel(k, '. ',Ttulajdosagu); ed else wrtel('ncs ',Ttulajdosagu); clrscr; be; utofeltetel; k; readkey; ed.

I / 3.3. Vsszalépéses keresés A vsszalépéses keresés ( backtrack ) a problémamegoldás ge széles területé alkalmazható algortmus, amelyek léyege a feladat megoldásáak megközelítése redszeres próbálgatással. Néha ez a legjobb megoldás! Adott N sorozat, amelyek redre M(1), M(2),...M(N) elemszámúak. K kell választa mdegykből egy-egy elemet úgy, hogy az egyes sorozatokból való választások másokat befolyásolak. Ez egy boyolult keresés feladat, amelybe egy adott tulajdosággal redelkező szám N-est kell megad úgy, hogy e kellje az összes lehetőséget véggéz. Először megpróbáluk az első sorozatból kválaszta egy elemet, ezutá a következőből, ezt addg csáljuk, amíg választás lehetséges. X() jelölje az. sorozatból kválasztott elem sorszámát! Ha még em választottuk, akkor értéke 0 lesz. Ha cs jó választás, akkor vsszalépük az előző sorozathoz, s megpróbáluk abból egy másk elemet választa. Vsszalépésél természetese töröl kell a választást abból a sorozatból, amelykből vsszalépük. Az eljárás akkor ér véget, ha mde sorozatból skerült választa, vagy pedg a vsszalépések sokasága utá már az első sorozatból sem lehet újabb elemet választa (ekkor a feladatak cs megoldása). Eljárás: :=1 : X():=0 Cklus amíg >= 1 és <= N Ha VAN JÓ ESET() akkor :=+1 külöbe X():=0 : :=-1 VAN:=(>N) Eljárás vége. VAN JÓ ESET(): Cklus X():=X()+1 amíg X()<=M() és ROSSZ ESET(,X() ) VAN JÓ ESET:=(X()<=M()) Eljárás vége. ROSSZ ESET(,X() ): j:=1 Cklus amíg j < és (j,x(j)) em zárja k (,X())-t j:=j+1 ROSSZ ESET:=(j < ) Eljárás vége.

I / 4. Sorozatszámítás (kevésbé általáosa csak az összegzésre szűkítve) Feladat: Adott egy elemű számsorozat. Számoljuk k az elemek összegét! A sorozatot az elemű X vektorba tároljuk, melyek eleme H halmazba tartozak. Bemeet N, előfeltétel cs Kmeet X H összeg = = 1 Összeg H X ( ) Eljárás Sorozatszámítás összeg:=0 Cklus =1-től -g Összeg:=Összeg+X() Eljárás vége. Példa: Egy héte keresztül feljegyeztük egy tömbbe, egy vrágkertészetbe az egy ap kyílt vrágok számát. Adjuk meg, a vzsgált dőszak alatt összese mey vrág yílt k Bemeet, előfeltétel cs Kmeet N X N összeg = Összeg N = 1 X ( ) Eljárás Sorozatszámítás összeg:=0 Cklus =1-től -g Összeg:=Összeg+X() Eljárás vége.

program osszegzes; uses crt; type egesztomb=array[1..7]of teger; var,, osszeg:teger; X:egesztomb; procedure be; repeat wrtel('kerem a vzsgalt apok szamat'); readl(); utl ( (<=7) ad (>0) ); for :=1 to do ; wrtel('kerem az',,'.apo ylt vragok szamat'); read(x[]); procedure utofeltetel; osszeg:=0; for :=1 to do osszeg:=osszeg+x[]; procedure k; wrtel(osszeg, ' db vrag ylt osszese.'); be; utofeltetel; k; ed.

I / 5. Megszámlálás Feladat: Adott egy elemű számsorozat. Számoljuk meg, háy darab T tulajdoságú elem va a sorozat eleme között. A sorozatot az elemű X vektorba tároljuk, melyek eleme H halmazba tartozak. Bemeet N, X H, T : H L előfeltétel cs Kmeet DB= = 1 χ ( X( ) ) 1, hattulajdoságúx ( ) χ 0, külöbe DB N Eljárás Megszámlálás DB:=0 Cklus =1-től -g Ha T(X()) akkor DB:=DB+1 Eljárás vége. Példa: Adott db egész szám (1< 10). Számoljuk meg, háy darab páros szám va köztük Bemeet előfeltétel cs Kmeet N, X N, gaz hax ( ) mod 2= 0 T : hams külöbe DB= = 1 χ ( X( ) ) 1, hattulajdoságúx ( ) χ 0, külöbe DB N Eljárás Megszámlálás DB:=0 Cklus =1-től -g Ha X ( ) mod 2= 0 akkor DB:=DB+1 Eljárás vége.

program megszamlalas; uses crt; type egesztomb=array[1..10]of teger; var,, db:teger; X:egesztomb; procedure be; repeat wrtel('kerem a sorozat elemszamat'); readl(); utl ( (<=10) ad (>0) ); for :=1 to do ; wrtel('kerem az',,'.szamot'); read(x[]); procedure utofeltetel; DB:=0; for :=1 to do f ((X[]) mod 2)=0 the DB:=DB+1; procedure k; wrtel(db, ' db Paros szam va a sorozatba.'); be; utofeltetel; k; ed.

I / 6. Maxmumkválasztás Feladat: Adott egy elemű számsorozat. Állapítsuk meg a legagyobb elem dexéek a számát! A sorozatot az elemű X vektorba tároljuk, melyek eleme H halmazba tartozak. Bemeet N, előfeltétel 1 X H 1 MAX és (1 ) : XMAX X Eljárás Maxmumkválasztás MAX:=1 Cklus =2-től -g Ha X(MAX) < X() akkor MAX:= Eljárás vége. Kmeet MAX N Példa: Egy dyeföld dyéek tömegét mértük meg. Adjuk meg melyk dye volt a legehezebb! Bemeet N, előfeltétel 1 X R 1 MAX és (1 ) : XMAX X Eljárás Maxmumkválasztás MAX:=1 Cklus =2-től -g Ha X(MAX) < X() akkor MAX:= Eljárás vége. Kmeet MAX N program max; uses crt; type valostomb=array[1..1000]of real; var,, MAX:teger; X:valostomb; procedure be; repeat wrtel('hay dyet mertuk meg'); readl(); utl ( (<=1000) ad (>0) ); for :=1 to do

; wrtel('kerem az',,'.dye tomeget!'); read(x[]); procedure utofeltetel; MAX:=1; for :=2 to do f (X[] > X[MAX]) the MAX:=; procedure k; wrtel(max, '.dye volt a legehezebb'); be; utofeltetel; k; ed.

II. Összetett programozás tételek (Sorozathoz sorozat redelése)

II / 1. Másolás Feladat: Adott egy elemű X sorozat. Másoljuk le X sorozatot Y-ba úgy, hogy X, elemszáma és Y elemszáma egyezze meg! A másolás közbe az adott elemre voatkozó átalakítást végezhetük. Bemeet előfeltétel - N X H f : H G Y = f ( X ) (1 ) : Eljárás Másolás Cklus :=1-től N-g Y():=f(X()) Eljárás vége Kmeet Y G Példa: Adott egy 12 elemű számsorozat X tömbbe. Képezzük X elemeek égyzetét Y-ba! Bemeet N X H f : H G f(a) f(a):=a*a függvéy vége előfeltétel - Y = f ( X ) Kmeet (1 ) : Y G Eljárás Másolás Cklus :=1-től N-g Y():=f(X()) Eljárás vége program masol; uses crt; cost Nmax=12; type EgesztombTpus=array[1..Nmax]of teger; var :teger; X,Y:EgesztombTpus; fucto szamolas(elem:teger):teger; szamolas:=elem*elem;

procedure be; radomze; for :=1 to Nmax do X[]:=radom(50); procedure utofeltetel; for :=1 to Nmax do ; Y[]:=szamolas(X[]); procedure k; clrscr; wrtel('az X tömb eleme: '); for :=1 to Nmax do wrte(x[]:5,' '); wrtel; wrtel('az Y tömb eleme: '); for :=1 to Nmax do wrte(y[]:5,' '); readl; clrscr; be; utofeltetel; k; ed.

II / 2. Kválogatás Feladat: Adott egy elemű X sorozat. Másoljuk le X sorozatot Y-ba úgy, hogy X, elemszáma és Y elemszáma em kell, hogy megegyezze! Tehát, csak X tömb adott tulajdoságú elemet másoljuk át Y tömbbe. A másolás közbe az adott elemre voatkozó átalakítást végezhetük. Bemeet N, X H f : H G T : H L előfeltétel - DBY = = 1 χ ( X ) ( ) 1, hat X χ = 0, külöbe (1 ) : Y = f X ( ) Eljárás kválogatás Cklus :=1-től N-g ha T(X()) akkor Y():=f(X()) Eljárás vége Kmeet DBY N, Y G DBY

Példa: Adott egy 10 elemű számsorozat X tömbbe. Képezzük X páros elemeek égyzetét Y-ba! Bemeet előfeltétel - Kmeet N, X H f : H G T : H L DBY = = 1 χ ( X ) ( ) 1, hat X χ = 0, külöbe (1 ) : Y = f X N, X H f : H G T : H L ( ) f(a) f(a):=a*a függvéy vége Eljárás kválogatás Cklus :=1-től N-g ha Páros (X()) akkor DBY:=DBY+1 Y(DBY):=f(X()) Eljárás vége program kválogatás; uses crt; cost Nmax=10; type EgesztombTpus=array[1..Nmax]of teger; var,dby:teger; X,Y,Z:EgesztombTpus; fucto Ttulajdosagu(elem:teger):boolea; Ttulajdosagu:=(elem mod 2) = 0; procedure be; radomze; for :=1 to Nmax do X[]:=radom(100); procedure utofeltetel; dby:=0; for :=1 to Nmax do ; f Ttulajdosagu(x[]) the dby:=dby+1; Y[dbY]:=X[] ed procedure k; clrscr; wrtel('az X tömb eleme: ');for :=1 to Nmax do wrte(x[]:3,' '); wrtel('az Y tömb eleme: ');for :=1 to dby do wrte(y[]:3,' '); clrscr; be; utofeltetel; k; ed.

II / 3. Szétválogatás Feladat: Adott egy elemű X sorozat. T tulajdoságú elemet másoljuk át Y, lletve em tulajdoságú elemet másoljuk át Z tömbbe. A másolás közbe az adott elemre voatkozó átalakítást végezhetük. Bemeet N, X H f : H G T : H L előfeltétel - DBY = = 1 ( X ) ( ) 1, hat X χ = 0, külöbe DBZ = N DBY Y H DBY, ( ) (1 N) : Y = T Y Z H DBZ χ ( ) (1 N) : Y = T Z Y X Z X Eljárás szétválogatás dby:=0 dbz:=0 Cklus :=1-től N-g ha T(X()) akkor dby:=dby+1 Y(dby):=X() külöbe dbz:=dbz+1 Z():=X() Eljárás vége Kmeet DBY N, DBZ N, Y H Y H DBY DBY

Példa: Adott egy 10 elemű számsorozat X tömbbe. Képezzük X páros elemeek égyzetét Y-ba, Z-be pedg másoljuk át X páratla elemeek 5-tel övelt értékét. Bemeet N, X H f : H G T : H L előfeltétel - DBY = = 1 ( X ) ( ) 1, hat X χ = 0, külöbe DBZ = N DBY Y H DBY, ( ) (1 N) : Y = T Y Z H DBZ χ ( ) (1 N) : Y = T Z Y X Z X Eljárás szétválogatás dby:=0 dbz:=0 Cklus :=1-től N-g ha (X() mod 2) = 0 akkor dby:=dby+1 Y(dby):=(X()) 2 külöbe dbz:=dbz+1 Z():=X()+5 Eljárás vége Kmeet DBY N, DBZ N, program szetvalogat; uses crt; cost Nmax=10; Y H Y H DBY DBY type EgesztombTpus=array[1..Nmax]of teger; var,dby,dbz:teger; X,Y,Z:EgesztombTpus; fucto Ttulajdosagu(elem:teger):boolea; Ttulajdosagu:=(elem mod 2) = 0; procedure be; radomze; for :=1 to Nmax do X[]:=radom(100);

procedure utofeltetel; dby:=0;dbz:=0; for :=1 to Nmax do ; f Ttulajdosagu(x[]) the dby:=dby+1; Y[dbY]:=X[]*X[] ed else dbz:=dbz+1; Z[dbZ]:=X[]+5 procedure k; clrscr; wrtel('az X tömb eleme: '); for :=1 to Nmax do wrte(x[]:3,' '); wrtel; wrtel('az Y tömb eleme: '); for :=1 to dby do wrte(y[]:3,' '); wrtel; wrtel('a Z tömb eleme: '); for :=1 to dbz do wrte(z[]:3,' '); readl; clrscr; be; utofeltetel; k; ed.

II / 4. Metszet Feladat: Adott két sorozat: X és Y. Képezzük Z-be X és Y metszetét. Válogassuk k, tehát Z-be azo elemeket, melyek mdkét tömbbe, X-be és Y-ba s megtalálhatóak. Bemeet N, X H m N, Y H előfeltétel X,Y halmazfelsorolás = 1 (1 DB) m ( X Y) DB= χ Z X Z Y Z : halmazfelsorolás Eljárás metszet db:=0 Cklus :=1-től N-g j:=1 Cklus amíg J M és X() Y(j) J:=J+1 ha J M akkor db:=db+1 Z(db):=X() Eljárás vége Kmeet DB N, Z H DB Példa: Adott két 10 elemű számsorozat X, Y tömbbe. Képezzük metszetüket! Bemeet N, X H m N, Y H előfeltétel X,Y halmazfelsorolás = 1 (1 DB) m ( X Y) DB= χ Z X Z Y Z : halmazfelsorolás Eljárás metszet db:=0 Cklus :=1-től N-g j:=1 Cklus amíg J M és X() Y(j) J:=J+1 ha J M akkor db:=db+1 Z(db):=X() Eljárás vége Kmeet DB N, Z H DB

program metszet; uses crt; cost Nmax=10; type EgesztombTpus=array[1..Nmax]of teger; var,j,db,,m:teger; X,Y,Z:EgesztombTpus; procedure be; :=Nmax;m:=Nmax-2; radomze; X[1]:=radom(5);Y[1]:=radom(5); for :=2 to N do repeat X[]:=radom(*5) utl X[-1]<X[]; radomze; for :=2 to M do repeat Y[]:=radom(*5) utl Y[-1]<Y[]; procedure utofeltetel; db:=0; For :=1 to N do ; j:=1; Whle ((j<=m) ad (X[]<>Y[j])) do c(j); f j<=m the c(db); Z[db]:=X[]; procedure k; clrscr; wrtel('az X tömb eleme: '); for :=1 to N do wrte(x[]:3,' '); wrtel; wrtel('az Y tömb eleme: '); for :=1 to M do wrte(y[]:3,' '); wrtel; wrtel('a Z tömb eleme: '); for :=1 to db do wrte(z[]:3,' '); f db=0 the wrte('z üres halmaz'); readkey; clrscr; be; utofeltetel; k; ed.

II / 5. Uó Feladat: Adott két sorozat: X és Y. Képezzük Z-be X és Y uóját. képezzük tehát Z-be halmazfelsorolást, melybe X és Y mde eleme egyszer szerepel. Bemeet N, X H m N, Y H előfeltétel X,Y halmazfelsorolás m = 1 (1 DB) m ( Y( ) X) DB= + χ Z X Z Y Kmeet DB N, Z : halmazfelsorolás Z H DB Eljárás Uo Cklus :=1-től -g Z():=X() DB:= Cklus j:=1-től m-g :=1 Cklus amíg és X() Y(j) :=+1 ha > akkor db:=db+1 Z(db):=Y(j) Eljárás vége Példa: Adott két 10 elemű számsorozat X, Y tömbbe. Képezzük uójukat! Bemeet N, X H m N, Y H előfeltétel X,Y halmazfelsorolás m = 1 (1 DB) m ( Y( ) X) DB= + χ Z X Z Y Kmeet DB N, Z : halmazfelsorolás Z H DB Eljárás Uo Cklus :=1-től -g Z():=X() DB:= Cklus j:=1-től m-g :=1 Cklus amíg és X() Y(j) :=+1 ha > akkor db:=db+1 Z(db):=Y(j) Eljárás vége

program uo; uses crt; cost Nmax=10; type EgesztombTpus=array[1..1+Nmax+Nmax] of teger; var,j,db,,m:teger; X,Y,Z:EgesztombTpus; procedure be; :=Nmax;m:=Nmax-2; radomze; X[1]:=radom(5);Y[1]:=radom(5); for :=2 to N do repeat X[]:=radom(*5) utl X[-1]<X[]; radomze; for :=2 to M do repeat Y[]:=radom(*5) utl Y[-1]<Y[]; procedure utofeltetel; db:=0; for :=1 to do Z[]:=X[] db:=n; For j:=1 to M do :=1; Whle ((<=) ad (X[]<>Y[j])) do c(); f >N the ; c(db); Z[db]:=Y[j]; procedure k; clrscr; wrtel('az X tömb eleme: '); for :=1 to N do wrte(x[]:3,';'); wrtel; wrtel('az Y tömb eleme: '); for :=1 to M do wrte(y[]:3,';'); wrtel; wrtel('a Z tömb eleme: '); for :=1 to db do wrte(z[]:3,';'); readkey; clrscr; be; utofeltetel; k; ed.

III / 1. Egyszerű cserés redezés Feladat: N elemű sorozat agyság szert redezése Hasolítsuk össze az első elemet a sorozat összes több mögötte lévő elemével, és ha valamelyk ksebb ála, akkor cseréljük meg azzal! Ezzel elérhetjük, hogy a sorozat első helyére a legksebb elem kerül. Folytassuk ugyaeze az elve a sorozat másodk elemével, utoljára pedg az utolsó előttvel. Redezés cklus :=1 től N-1 g cklus j=+1 től N-g Ha X()>X(j) akkor csere(x(),x(j)) cklus vége cklus vége Eljárás vége Helyfoglalás: N+1 Hasolítások száma: N*(N-1)/2 Mozgatások száma: 0..3**(-1)/2 III / 2. Mmumkválasztásos redezés Feladat: N elemű sorozat agyság szert redezése Az előző módszer hbája a sok felesleges csere. Célszerűbb lee az aktuáls első elemet a mögötte lévők közül a legksebbel cserél. Ehhez a redező cklus belsejébe cserék helyett egy mmumkválasztást kell elvégez. Redezés cklus :=1 től N-1 g m:= cklus j=+1 től N-g Ha X(m)>X(j) akkor m:=j cklus vége csere(x(),x(j)) cklus vége Eljárás vége Helyfoglalás: N+1 Hasolítások száma: N*(N-1)/2 Mozgatások száma: 3*(-1)

III / 3. Buborékos redezés Feladat: N elemű sorozat agyság szert redezése Hasolítsuk a szomszédokat egymással. Ha rossz a sorredjük, akkor cseréljük meg őket. Egy ckluslépés alatt lefutása alatt bztosa a sorozat végére kerül a legagyobb elem. Redezés cklus :=N től 2 g cklus j=1 től -1-g Ha X(j)>X(j+1) akkor csere(x(j),x(j+1)) cklus vége cklus vége Eljárás vége Helyfoglalás: N+1 Hasolítások száma: N*(N-1)/2 Mozgatások száma: 0..3*N*(N-1)/2 III / 4. Javított buborékos redezés Feladat: N elemű sorozat agyság szert redezése Az előző módszer azért em váltotta be reméyeket, mert em haszáltuk k, hogy az elemek a helyük felé mozogak. A legegyszerűbb esetbe például, ha a belső cklus lefutása alatt egyáltalá em volt csere, akkor felesleges mde tovább hasolítás, a redezéssel késze vagyuk. Ha volt csere, de például a legutolsó sorozat közepé volt, akkor ebből tudjuk, hogy a sorozat közepe utá bztosa kész, redezett, csak az előtte lévő résszel kell foglalkoz. Fgyeljük tehát mde meetbe a legutolsó csere helyét, s a következő meetbe csak addg redezzük. Redezés := cklus amíg 2 cs:=0; cklus j=1 től -1g ha X(j)>X(j+1) akkor csere (X(j),X(j+1)) cs:=j cklus vége :=cs cklus vége Eljárás vége Helyfoglalás: N+1 Hasolítások száma: N-1..N*(N-1)/2 Mozgatások száma: 0..3*N*(N-1)/2

III / 5. Bellesztéses redezés Feladat: N elemű sorozat agyság szert redezése Az előző redezések mdegyke olya volt, hogy a sorozatot felosztotta egy redezett (kész), és egy redezetle szakaszra, és a redezést a redezetle része folytatta. Másk közös voásuk, hogy a redezés elkezdéséhez már az összes redezedő elem smeretére szükségük volt. Most a kártyakeveréshez hasoló elvből duluk k: egyetle elem mdg redezett; ha va egy redezett részsorozatuk, akkor abba a agyság szert helyére llesszük be a soro következő elemet! eljárás utofeltetel; cklus :=2 -tól N g j:=-1; cklus amíg ((j>0) és (X[j]>X[j+1])) csere(x[j],x[j+1]);j:=j-1; cklus vége; cklus vége; eljárás vége; Helyfoglalás: N+1 Hasolítások száma: N-1 N*(N-1)/2 Mozgatások száma: 0..3*N*(N-1)/2 III / 6. Javított bellesztéses redezés Feladat: N elemű sorozat agyság szert redezése Az előző módszerél a bellesztedő cklusba legtöbb elem egyszer mozdul el, a bellesztedő pedg sokszor. Ezt a sok mozgást s csökkethetjük egyetleegyre úgy, hogy a bellesztedőt em tesszük be azoal a sorozatba, haem csak a többeket tologatjuk hátra, s a bellesztedőt csak a végé tesszük a helyére. eljárás redezés; cklus :=2 -tól Nmax-g j:=-1; y:=x[]; cklus amíg ((j>0) és (X[j]>y)) X[j+1]:=X[j];j:=j-1; cklus vége; X[j+1]:=y; cklus vége; Helyfoglalás: N+1 Hasolítások száma: N-1 N*(N-1)/2 Mozgatások száma: 2*(N-1)..2*(N-1)+N*(N-1)/2

III / 7. Szétosztó redezés Feladat: N elemű sorozat agyság szert redezése Eddg az alapredezéseket, lletve javításakat tárgyaltuk. Az elkövetkezedőkbe specáls redezésekkel foglalkozuk. A szétosztó redezés esetébe feltesszük, hogy a redezedő elemek olya rekordok, melyek kulcsmezője (vagy az abból kszámolt számérték) 1..N közt természetes szám lehet és cs két azoos kulcsú rekord. A kulcsmező tt egyértelműe megadja azt a helyet, ahová a az elemet te kell, így semm hasolításra cs szükség. A módszerhez azoba egy újabb tömbre va szükség, ahová az eredméyt elhelyezzük. eljárás redezés; cklus :=1 -tól Nmax g Y[X[].dex]:=X[]; cklus vége; eljárás vége Helyfoglalás: 2*N Hasolítások száma: 0 Mozgatások száma: N Kulcsmeződexelés: N

III / 8. Számláló redezés Az egyszerű cserés módszer mozgatásaak számát s javíthatjuk az egyk újabb módszer a szétosztó redezés segítségével. A csrés redezésél e cserélgessük az elemeket, haem számoljuk meg háy mdegykre, hogy háy ála ksebb, lletve az őt megelőzők között háy vele egyelő va (ömagát s beleértve). Ezzel a redezedő adatsorhoz a [0, N-1] tervallum egész számaak egy permutácóját redeltük. Ez a permutácó lehet bemeete a szétosztó redezések. eljárás redezés cklus :=1 -tól Nmax DB[]:=1; cklus vége; cklus :=1 -tól Nmax-1 g cklus j:=+1 -tól Nmax g ha X[]>X[j] akkor c(db[]) külöbe c(db[j]) elágazás vége cklus vége; cklus vége; cklus :=1 -tól Nmax g Y[DB[]]:=X[] cklus vége; Szétosztó redezés eljárás vége; Helyfoglalás: 2*N+N*ε Hasolítások száma: N*(N-1)/2 Mozgatások száma: N Kulcsmeződexelés: N Forrás: Iteret µlóga 19 Szláv Péter, Zsakó László Módszeres programozás: Programozás tételek