algoritmusok_es_adatstrukturak.pdf

Upload: ujova

Post on 02-Mar-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    1/358

    Pusztai Pl

    ALGORITMUSOK S

    ADATSTRUKTRK

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    2/358

    Kszlt a HEFOP 3.3.1-P.-2004-09-0102/1.0 plyzat tmogatsval.

    Szerz: Pusztai Plegyetemi adjunktus

    Lektor: Pukler Antalegyetemi adjunktus

    Varjasi Norbertegyetemi adjunktus

    Pusztai Pl, 2006

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    3/358

    Marton Lszl emlkre

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    4/358

    Algoritmusok s adatstruktrk A dokumentum hasznlata

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 4

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 4

    A dokumentum hasznlata

    Mozgs a dokumentumbanA dokumentumban val mozgshoz a Windows s az Adobe Reader meg-szokott elemeit s mdszereit hasznlhatjuk.

    Minden lap tetejn s aljn egy navigcis sor tallhat, itt a megfelelhivatkozsra kattintva ugorhatunk a hasznlati tmutatra, a tartalomjegy-zkre, valamint a trgymutatra. A s anyilakkal az elzs a kvet-kezoldalra lphetnk t, mg a Vissza mezaz utoljra megnzett oldalravisz vissza bennnket.

    Pozcionls a knyvjelzablak segtsgvel

    A bal oldali knyvjelz ablakban tartalomjegyzkfa tallhat, amelynekbejegyzseire kattintva az adott fejezet/alfejezet els oldalra jutunk. Azaktulis pozcinkat a tartalomjegyzkfban kiemelt bejegyzs mutatja.

    A tartalomjegyzk s a trgymutat hasznlata

    Ugrs megadott helyre a tartalomjegyzk segtsgvel

    Kattintsunk a tartalomjegyzk megfelel pontjra, ezzel az adott fejezetelsoldalra jutunk.

    Keress a szvegben

    A dokumentumban val keresshez hasznljuk megszokott mdon aSzerkeszts men Keress parancst. Az Adobe Reader az adott pozci-tl kezdve keres a szvegben.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    5/358

    Algoritmusok s adatstruktrk Tartalomjegyzk

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 5

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 5

    Tartalomjegyzk

    1. Elsz ............................................................................................. 8

    2. Bevezets...................................................................................... 10

    3. Egyszeradattpusok................................................................... 16

    3.1. Egsz tpus..................................................................................................163.2. Karakter tpus.............................................................................................163.3. Logikai tpus ...............................................................................................173.4. Vals tpus ..................................................................................................17

    4. Adatok trolsa............................................................................. 194.1. Vltoz ........................................................................................................194.2. Kifejezs ......................................................................................................194.3. Fggvnyek.................................................................................................204.4. Az rtkad utasts...................................................................................214.5. Beolvas utasts ........................................................................................224.6. Kir utasts...............................................................................................23

    5. Adatszerkezeti tblzat ................................................................ 24

    6. Algoritmusok megadsa............................................................... 26

    7. Strukturlt algoritmusok tervezse .............................................. 32

    7.1. Szekvencia...................................................................................................327.2. Szelekci......................................................................................................337.3. Iterci.........................................................................................................37

    8. Elemi feladatok ............................................................................ 44

    8.1. Prmfelbonts .............................................................................................44

    8.2. Monoton nvsorozat.............................................................................458.3. Pozitv adatok maximuma, tlaga............................................................468.4. exhatvnysora.............................................................................................478.5. Gykkeress intervallumfelezssel ..........................................................498.6. Integrlrtk meghatrozsa kzeltssel................................................508.7. Feladatok.....................................................................................................52

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    6/358

    Algoritmusok s adatstruktrk Tartalomjegyzk

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 6

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 6

    9. sszetett adattpusok................................................................... 55

    9.1. Tmbk.......................................................................................................55

    9.2. Sztringek......................................................................................................709.3. Halmazok....................................................................................................799.4. Rekordok.....................................................................................................89

    10. Szubrutinok................................................................................. 94

    11. Algoritmusok............................................................................... 99

    11.1. Algoritmusok hatkonysga ...................................................................9911.2. Elemi statisztikk .....................................................................................9911.3. Rendezs s keress...............................................................................105

    11.4. Ellenrztt input....................................................................................11611.5. Rekurzv algoritmusok ..........................................................................12411.6. Visszalpses algoritmusok ..................................................................13011.7. Feladatok.................................................................................................138

    12. Verem......................................................................................... 143

    12.1. ltalnos jellemzs ................................................................................14312.2. Gyorsrendezs sajt veremmel ............................................................14412.3. Feladatok.................................................................................................148

    13. Dinamikus adatstruktrk......................................................... 149

    13.1. Dinamikus tmbk................................................................................14913.2. Mutatk s dinamikus vltozk...........................................................14913.3. Kollekcik...............................................................................................15313.4. Lncolt listk ..........................................................................................15913.5. sszetett listk .......................................................................................16613.6. Feladatok.................................................................................................170

    14. Fjlok ......................................................................................... 174

    14.1. Fjlok kezelse........................................................................................17514.2. Szekvencilis fjlok................................................................................17814.3. Vletlen elrsfjlok ...........................................................................17914.4. Feladatok.................................................................................................193

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    7/358

    Algoritmusok s adatstruktrk Tartalomjegyzk

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 7

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 7

    15. Grfok......................................................................................... 194

    15.1. Alapfogalmak..........................................................................................194

    15.2. Trols .....................................................................................................19615.3. Fk ...........................................................................................................20115.4. tkeress.................................................................................................21415.5. Feladatok.................................................................................................227

    16. Irodalomjegyzk ....................................................................... 228

    17. Fggelk ................................................................................... 229

    17.1. C programok ..........................................................................................23217.2. Pascal programok...................................................................................296

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    8/358

    Algoritmusok s adatstruktrk Elsz

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 8

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 8

    1.

    Elsz

    Az algoritmusokat az emberisg mr jval azeltt ismerte s hasznlta,mieltt az ket vgrehajtani tud szmtgpeket megptette.

    Noha az algoritmus sz eredete egy IX. szzadi perzsa matematikus(Al-Hvrizmi) nevhez ktdik [Knu 87] [Sai 86], az algoritmusokat mint egy feladat megoldshoz vezetlpsek sorozatt mr idszmt-sunk eltt is hasznltk.

    Sokig csak papron, kzzel volt lehetsg az algoritmusok vgre-hajtsra, ma mr szmtgpek vgzik ezt helyettnk.

    Az univerzlis, magasszintprogramozsi nyelvek [Ny 03] megjelen-se ta olyan eszkzrendszert hasznlhatunk algoritmusaink lersra, afeladatunkat megold program megrsra, amelyek kzel llnak az emberigondolkods-, s jellsmdhoz.

    Termszetesen ezeket a programokat kzvetlenl nem rtik meg aszmtgpek, le kell ket fordtani az adott szmtgp utastskszlet-re, s csak ezutn hajthatk vgre, futtathatk le.

    Knyvnkben bevezetett adatstruktrk s algoritmus megadsi md-szerek nem egy konkrt programozsi nyelvhez ktdnek, tbb nyelvbl(C, Pascal, Basic) lettek sszegyrva, kiemelve a kzs, ltalnos rsze-ket, gy lehetsgnk van az algoritmusok nyelv-fggetlen lnyegrekoncentrlni.

    Algoritmusainkat strukturlt mdon ksztjk, azaz csak a szekvencia,szelekci, iterci vezrlelemekbl ptkeznk, ugr utastsok nlkl, gymegoldsaink ttekinthetk s knnyen programozhatk lesznek.

    Amellett, hogy bemutatjuk s elemezzk a kivlasztott algoritmusokat,elsdleges clunk az algoritmikus feladatmegold kszsg kialaktsa, fej-lesztse, a logikus gondolkodsra val nevels.

    Ha egy algoritmushoz olyan adatszerkezetet hasznlunk, amelyet aprogramrsra sznt nyelv nem tmogat (pl. a C nyelvben nincsenek hal-mazok), akkor kitrnk a megvalsts lehetsgeire.

    A megoldsok, noha nem gy terveztk ket, akr objektumorientl-tan is programozhatk, kihasznlva ezzel az egysgbezrs elnyeit. Fel-adataink azonban tbbnyire kevs kzs rszt tartalmaznak, ezrt az ob-jektumorientlt programozs igazi erejt ad rkls, gy annak elnyeinem rvnyesthetk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    9/358

    Algoritmusok s adatstruktrk Elsz

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 9

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 9

    Egy univerzlis programozsi nyelv ismeretben algoritmusaink prog-ramm rhatk, kiprblhatk, hiszen a visszacsatols, a megolds he-

    lyessgnek szmtgppel trtnellenrzse a tanulsi folyamat szervesrsze. Ezt a tantrgyunktl fggetlen, nll programozst megknnyten-d, a jegyzetben szereplmegoldsokat C s Pascal nyelven programoz-tuk, amelyekhez a Borland cg Turbo C s Turbo Pascal fejlesztrendsze-rt hasznltuk. A forrsprogramok a fggelkben megtallhatk.

    Ismerve az egyedl elvgzett, nll munka hasznossgt s maradan-dsgt, fejezeteink vgn egy csokor, az adott tmhoz kapcsold fel-adatot tznk ki, amelybl kedvre vlogathat a gyakorlsra vgy, tudstlemrni kvn hallgat, olvas.

    Jegyzetnk a BSc kpzs, mszaki informatika szakos hallgatkAlgo-ritmusok s adatstruktrk cm tantrgyhoz kszlt, amelyet a msodikflvben, heti kt rban tanulnak a nappali tagozaton. Pldinkat ennekmegfelelen vlogattuk, szem eltt tartva az sszelltott tananyag 30 r-ban trtntanthatsgt.

    Hallgatink az els flvtl kezdden hrom flven keresztl (heti3-5 rban) tanuljk a Programozs cm tantrgyat, amely kt flv C segy flv objektumorientlt Java programozst tartalmaz.Tantrgyunk tfed teht a C programozs msodik flvvel, gy

    Knnyebb a bevezetfejezetek tantsa. Megoldsainkat a hallgatk C nyelven programozni tudjk, gy nem-

    csak kiprblhatjk, ellenrizhetik azokat, hanem egyben anyagot iskapnak a C nyelvprogramozs gyakorlshoz.

    A nehezebb rszeket (pl. mutatk, dinamikus adatstruktrk) kzel egyidben trgyalja a kt tantrgy, megknnytve ezzel a megrtsket.

    Tudjuk, hogy a rendelkezsre ll idkeret nem engedi meg az sszes fel-adat rszletes trgyalst, de bzunk benne, hogy a jegyzet anyaga tanri

    segdlet nlkl, nllan is feldolgozhat, megrthets elsajtthat.

    Gyr, 2006. mjus A szerz

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    10/358

    Algoritmusok s adatstruktrk Bevezets

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 10

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 10

    2.

    Bevezets

    Ha egy feladat megoldsra szmtgpes programot ksztnk, akkorltalban az albbi lpseket, tevkenysgeket kell elvgeznnk:

    1.

    A feladat megfogalmazsa, pontosts, ltalnosts.2. Matematikai (vagy egyb) modell kivlasztsa, megadsa (ha szksges,

    ill. lehetsges).3.

    Az adatszerkezet definilsa, az input-output specifiklsa.4.

    A megoldst megvalst algoritmus megtervezse, elksztse.5. Programrs, kdols (az adatszerkezet s az algoritmus alapjn).

    6.

    Tesztels, hibakeress.7. Dokumentls (felhasznlknak, fejlesztknek).

    Termszetesen az adott munka, ill. feladat jellegbl addan bizonyoslpsek el is maradhatnak (pl. 2., 7.), ill. javts, mdosts esetn szksglehet egy korbbi szintre val visszalpsre is.

    Jegyzetnkben elssorban a megoldsok rdemi rszt jelent3. s 4.lpsekre fkuszlunk az

    Algoritmusok + Adatstruktrk = Programok

    kplet alapjn [Wir 82], de mint ahogy a puding prbja az evs, itt az5., 6. lpsek igazoljk vissza megoldsunk helyessgt, helytelensgt.

    Az 1-5. megoldsi lpseket az albbi feladat megoldsn keresztlszemlltetjk, de az alkalmazott adattpusokat, az adatszerkezeti tblzatot,az algoritmus megadsi mdszereket, azaz a megolds eszkzeit a ksbbifejezetekben rszletesen trgyaljuk.

    Feladat: Alaktsunk t egy pozitv egsz szmot egy adott (2-16) szm-rendszerbe!

    1.

    ltalnosts: A megoldst nem kt konkrt adatra, hanem megadha-t, input adatokra ksztjk el, gy tetszlegesen konvertlhatunk.

    2. Matematikai modell: Ez maga az algoritmus, miszerint elszr a

    megadott szmot, utna a keletkezhnyadosokat mindaddig osszukel az adott szmrendszer alapszmval, amg a hnyados nulla nemlesz. Minden osztsnl jegyezzk fel az oszts maradkt. Ezekbl,mint szmjegyekbl, a feljegyzsk fordtott sorrendjben szmot k-pezve, a megoldst kapjuk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    11/358

    Algoritmusok s adatstruktrk Bevezets

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 11

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 11

    Pl: 40-et 2-s szmrendszerbe Pl: 40-et 16-s szmrendszerbe

    40

    20105210

    0

    00101

    Eredmny: 101000 Eredmny: 28

    3. Adatszerkezet: Tekintettel a hexadecimlis szmrendszer betvel

    jellt szmjegyeire, ill. a nagy egsz szmok (4 bjt) esetn a kettesszmrendszerbeli, esetlegesen 32 szmjegyes eredmnyre, az eredmnytpusa csak sztring lehet.

    Funkci Azonost Tpus Jelleg

    Az talaktand szm A Egsz I

    A szmrendszer alapszma B Egsz I

    Az eredmny szm ER Sztring M, O

    Az ER vltoz munka jelleg is, mert rtke az algoritmus sorn alakul,vltozik, ahogyan a maradkokat egy sztringg fzzk.

    4. Algoritmus:A lehetsges szmjegyeket egy sztringkonstansban dekla-rljuk:

    KonstansSZAMJEGYEK 0123456789ABCDEF

    A megolds pszeudokdja:

    /* Szmrendszer konverzi */KONVERTAL(A,B)

    ER repeat

    ER SZAMJEGYEK[A MOD B+1]+ERA A DIV B

    untilA=0returnER

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    12/358

    Algoritmusok s adatstruktrk Bevezets

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 12

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 12

    5. Programrs: Az albbiakban, az sszehasonlts vgett hrom

    magasszints egy gpkzeli nyelven is programm rtuk a megold-

    sunkat.C program/* SZRKONV.C : Szmrendszer konverzi */#include #include #define MaxHossz 32+1 /* +1: a vgjelnek */#define SzamJegyek "0123456789ABCDEF"

    void Konvertal(int a, int b, char *er){ int i,j; char cs;

    /* Osztogats */

    i=0;do {er[i++]=SzamJegyek[a%b];a=a/b;

    } while (a>0);/* Vgjel */er[i]='\0';/* Megfordts */for (j=0,i--; j

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    13/358

    Algoritmusok s adatstruktrk Bevezets

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 13

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 13

    Pascal program{ Szmrendszer konverzi }program SZRKONV;

    uses crt;const SzamJegyek:string='0123456789ABCDEF';

    function Konvertal(a,b:integer):string;var er:string;begin

    er:='';repeat

    er:=SzamJegyek[a mod b+1]+er;a:=a div b;

    until a=0;Konvertal:=er;

    end;

    var a,b:integer;begin

    clrscr;write('A konvertland pozitv egsz szm:'); readln(a);write('A szmrendszer alapszma (2-16):'); readln(b);writeln(Konvertal(a,b));

    end.

    Basic program' Szmrendszer konverzi

    Option ExplicitConst SzamJegyek = "0123456789ABCDEF"

    Function Konvertal(a As Integer, b As Integer) As StringDim er As Stringer = ""Do

    er = Mid(SzamJegyek, a Mod b + 1, 1) + era = a / b

    Loop Until a = 0Konvertal = er

    End Function

    Sub Hivo()Dim a As IntegerDim b As Integera = InputBox("A konvertland pozitv egsz szm:")b = InputBox("A szmrendszer alapszma (2-16):")MsgBox (Konvertal(a, b))

    End Sub

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    14/358

    Algoritmusok s adatstruktrk Bevezets

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 14

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 14

    Megjegyzs: Ebben a Visual Basic megoldsban a Hivoszubrutin vgzi el aC s Pascal megoldsok fprogramjnak szerept, azaz az adatbekrst, a

    konvertlst elvgz Konvertal szubrutin meghvst, majd a kapott ered-mny kirst.

    Assembly program; Szmrendszer konverzi

    .MODEL SMALL

    .STACK 100h

    .DATASzJ DB "0123456789ABCDEF"Er DB 32 dup (?)

    .CODEmov ax,@DATA ;DS-be az adatszegmensmov ds,ax ;szegmenscmtmov ax,40 ;A konvertland szmmov bx,2 ;A cl szr. alapszmamov di,Offset Er ;Az eredmnyterlet

    ;offset cmecall Konv ;CX-ben az Er sztring hossza

    mov ah,2 ;Kirsmov si,0

    Kiir: mov dl,Er[si]int 21h

    inc siloop Kiir

    mov ah,4ch ;Befejezsint 21h

    ; Input: AX = a konvertland pozitv egsz szm; BX = a cl szmrendszer alapszma; DI = az eredmnyterlet offset cme; Output: DS:DI = az eredmnysztring kezdcme; CX = az eredmnysztring hossza; Elroml regiszterek: AX,DX,DI,SI

    Konv PROCmov cx,0

    Oszt: mov dx,0 ;Az elzmaradk trlsediv bx ;Osztsinc cxpush dx ;Maradkot a verembecmp ax,0jne Osztmov dx,cx ;CX megjegyzse

    Cikl: pop si ;Az eredmny ellltsamov al,SzJ[si] ;AL-be a megfelelkaraktert

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    15/358

    Algoritmusok s adatstruktrk Bevezets

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 15

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 15

    mov [di],al ;A clterletre rjukinc diloop Cikl

    mov cx,dx ;CX belltsaret ;Visszatrs a hvhozKonv ENDP

    END

    Megjegyzs: Ezen Turbo Assembly megolds fprogramja fix adatokkalhvja meg a megoldst elvgzKonvszubrutint, gy elkerltk az adatbek-rs programozst.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    16/358

    Algoritmusok s adatstruktrk Egyszeradattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 16

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 16

    3.

    Egyszeradattpusok

    Minden programfejleszt rendszer meghatrozza, definilja az adatokazon krt, amelyet kezelni tud. Azt, hogy milyen fajta adatokat hasznl-hatunk, ezekkel milyen mveleteket vgezhetnk, ezek hogyan troldnak,az adattpusok definiljk. Attl fggen, hogy az adattpus egy, ill. tbbadat egyidejhasznlatt engedi meg, megklnbztetnk egyszers ssze-tettadattpusokat. Ebben a fejezetben az egyszeradattpusokrl lesz sz,amelyekbl ksbb, sszetett adattpusokat ptnk (lsd 9.).

    3.1.Egsz tpus

    Egsz szmok hasznlatt megengedadattpus.Konstans: pl. 326Mveletek:

    Eljel (+, ) Multiplikatv: Szorzs (*), Egsz oszts hnyadosa (/, DIV), Egsz

    oszts maradka (%, MOD) Additv: sszeads (+), Kivons () Hasonltsok: Egyenl(=), Nem egyenl(), Kisebb (), Kisebb vagy egyenl(=)

    A hasonltsok eredmnyeknt logikai, a tbbi mvelet eredmnyekntegsz rtket kapunk.Pl. 5/3 1, 5 DIV 3 1, 5 MOD 3=5 % 3 igaz

    3.2.Karakter tpus

    Karakterek hasznlatt megengedadattpus.Konstans: pl. A, #27Mveletek:

    sszefzs (+) Hasonltsok: mint az egszeknl, csak itt nem a szmok rtke, ha-

    nem a karakterek ASCII kdja szerint trtnik a hasonlts.

    A hasonltsok eredmnyeknt logikai rtket, az sszefzs eredmnye-knt egy kt karakterbl ll sztringet (lsd 9.2.) kapunk.Pl. A

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    17/358

    Algoritmusok s adatstruktrk Egyszeradattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 17

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 17

    Megjegyzs Szimpla aposztrfot hasznlunk, mg a sztringeknl (lsd 9.2.) duplt.

    Egy karakterkonstanst a karakter ASCII kdjnak segtsgvel is meg-adhatunk (gondoljunk csak a nem begpelhetkarakterekre), ekkor akarakter kdja el a # karaktert tesszk (pl. #65 a 65-s kd A karak-tert, a #27 az Esc billentyhz tartoz karaktert definilja).

    3.3.Logikai tpus

    Konstans: igaz, hamisMveletek:

    Tagads (NOT), s (AND), Vagy (OR) Hasonltsok: mint az egszeknl.

    Hogy valamennyi hasonlts rtelmezett legyen, a kt logikai rtk kzttis definilunk sorrendisget, a hamis megelzi az igaz rtket.A hasonltsok s a mveletek eredmnyeknt logikai rtket kapunk.Pl. hamis < igaz igaz

    A B NOT A A AND B A OR B

    igaz igaz hamis igaz igaz

    igaz hamis hamis hamis igaz

    hamis igaz igaz hamis igaz

    hamis hamis igaz hamis hamis

    3.1. tblzat.A logikai mveletek.

    3.4.Vals tpus

    Vals szmok hasznlatt megengedadattpus.Konstans: pl. 3.14Mveletek: mint az egszeknl, csak itt egyetlen oszts megengedett (/), atbbi (DIV, MOD, %) nem rtelmezett.A hasonltsok eredmnyeknt logikai, a tbbi mvelet eredmnyekntvals rtket kapunk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    18/358

    Algoritmusok s adatstruktrk Egyszeradattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 18

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 18

    Megjegyzs: A programfejleszt rendszerek ltalban tbbfle egsz, ill.vals tpus hasznlatt engedik meg, ezekkel kln nem foglalkozunk, azalgoritmus programm rsakor a megfelel, az adatok pontos trolshozmr elegendtpust clszervlasztani. Felesleges pldul 4 bjtos egsztpust hasznlni akkor, amikor az egsz adataink elfrnek 1 bjton is. Azegyszersg kedvrt pldaprogramjainkban egsz tpusknt ltalban azint,ill. integer,vals tpusknt afloat,ill. realtpusokat hasznljuk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    19/358

    Algoritmusok s adatstruktrk Adatok trolsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 19

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 19

    4.Adatok trolsa

    Ahhoz, hogy adatainkat a szmtgp kezelni tudja, trolnia kell. A trolsmikntje, konkrt megvalstsa egyrszt az adatok tpustl, msrszt azalkalmazott fejlesztkrnyezettl s az opercis rendszertl is fgg, ezrtezt nem rszletezzk (lsd [Ny 03]). Az adatok memriban trtnegysze-rtrolsrl ebben a fejezetben, a dinamikus trkezelsrl a 13., mg a klsadathordozn, fjlokban trtnadattrolsrl a 14. fejezetben lesz sz.

    4.1.Vltoz

    Vltozn olyan azonostval elltott memriaterletet rtnk, ahol a vl-toz tpusnak megfeleladatot trolhatunk.A vltoz rtkn az ppen benne trolt adatot rtjk. Ez az rtk az

    algoritmus, ill. a program vgrehajtsa sorn megvltozhat innen ered azelnevezse , ilyenkor a vltozba kerlj adat fellrja a rgit.

    4.2.Kifejezs

    Kifejezsen olyan szmtsi mveletsort rtnk, amellyel megmondjuk,hogy milyen adatokkal, milyen mveleteket, milyen sorrendben kvnunk

    elvgezni. A kifejezs kirtkelse, kiszmtsa utn egy j rtk a kifeje-zs rtke keletkezik.A kifejezsben szerepelhetnek:

    Konstansok, vltozk, fggvnyhvsok Mveletek Zrjelek (csak kerek zrjelek hasznlhatk)

    A kifejezsben szerepladatokat (konstansok, vltozk) operandusoknak,a mveleteket opertoroknak is szoktk nevezni.Pl. (B+SQRT(B*B4*A*C))/(2*A)A 4 s a 2 konstansok, az A, B, C vltozk, az SQRT pedig a ngyzet-gykvonst elvgzfggvny neve.A mveletek ersorrendje (prioritsa) cskkenersorrendben:

    Egyoperandus: Eljel (+,), Tagads (NOT) Multiplikatv (*, /, DIV, MOD, %, AND) Additv (+,, OR) Hasonltsok (=, , , =, IN)

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    20/358

    Algoritmusok s adatstruktrk Adatok trolsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 20

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 20

    Megjegyzs A hasonltsokat relcis mveleteknek is nevezik.

    A sztring- s halmazmveleteket (pl. a tartalmazs IN mvelett) amegfelelfejezetekben trgyaljuk.

    A kifejezsek kirtkelsnek szablyai:

    1.

    A zrjelbe tett kifejezsek s fggvnyhvsok operandus szintreemelkednek.

    2. A magasabb priorits mveletek vgrehajtsa megelzi az alacso-nyabb priorits mveletek vgrehajtst.

    3.

    Az azonos priorits mveleteknl a balrl-jobbra szably rvnyes,miszerint a vgrehajts balrl jobbra haladva trtnik.

    4. A logikai kifejezsek kirtkelse befejezdik, amint az eredmny rt-ke mr nem vltozhat.

    5.

    A numerikus mveleteknl az eredmny egsz, ha az operandusokegszek s vals, ha valamelyik operandus vals.

    A szablyok alapjn egyrtelmen meghatrozhat a kifejezsben szereplmveletek vgrehajtsi sorrendje, gy a kifejezs rtke mindig egyrtelm-en kiszmthat.

    4.3.Fggvnyek

    Munknk sorn, az algoritmusok ksztse kzben feltesszk, hogy bizo-nyos szmolsokat, talaktsokat elvgezhetnk, azaz lteznek az albbitevkenysgeket elvgzfggvnyek.

    4.3.1.Matematikai fggvnyek

    ABS(X) X abszolt rtke.EXP(X) Az exponencilis fggvny (ex) rtke az X helyen.

    LOG(X) A termszetes alap logaritmus fggvny rtke az Xhelyen.SIN(X) X szinusza (X radinban adott).COS(X) X koszinusza (X radinban adott).SQR(X) X ngyzete.SQRT(X) X ngyzetgyke.RANDOM(X) Egy vletlen egsz szm 0-tl X1-ig (X egsz rtk).

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    21/358

    Algoritmusok s adatstruktrk Adatok trolsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 21

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 21

    4.3.2.Konverzis fggvnyek

    ASC(X) Az X karakter ASCII kdja (pl. ASC(A)65).

    CHR(X) Az X ASCII kd karakter (pl. CHR(65)A).Megjegyzs A C nyelvben nincs szksg ezekre a konverzikra, mert egy karakter

    s kdjnak hasznlata ekvivalens. A sztringkezel fggvnyeket valamint a dinamikus trkezelshez,

    fjlkezelshez kapcsold fggvnyeket a megfelel fejezetekben tr-gyaljuk.

    4.4.

    Az rtkad utastsEgy vagy tbb azonos tpus vltoznak rtket adhatunk, bennk adatottrolhatunk.Jells:

    vltozkifejezsvagy

    vltoz vltoz kifejezsVgrehajts:

    Kirtkels: a kifejezs rtknek kiszmtsa. Trols: ha az rtk trolhat, akkor troldik a vltoz(k)ban, kln-

    ben hiba lp fel.

    Egy rtk akkor trolhat egy adott vltozban, ha

    a tpusuk megegyezik, vals tpus vltozhoz egsz rtket rendelnk, egsz tpus vltozhoz vals rtket rendelnk,

    sztring tpus vltozhoz karaktert rendelnk.Az esetleges tlcsordulstl (amikor egy rtk a nagysga miatt nem trol-hat), valamint a tpuseltrsek esetn szksges (a trolsi md klnb-zsgbl fakad) konverziktl eltekintnk, feltesszk, hogy a konverzi-k automatikusan vgrehajtdnak. Vals rtkek egsz vltozkhoz rende-lst megengedjk, ekkor a szm egsz rsze konvertldik, a trtrszfigyelmen kvl marad.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    22/358

    Algoritmusok s adatstruktrk Adatok trolsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 22

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 22

    Megjegyzs: A C nyelvben megengedett egszek s karakterek kzttiautomatikus oda-vissza konverzit nem engedjk meg, mg ott kt karak-

    ter sszege a kdok sszegt adja, addig a mi jellsmdunk szerint egy,ktkarakteres sztringet.

    Pl. II+1 /* I rtkhez hozzad 1-et s az eredmnyt I-be teszi. */IJK0 /* Az I, J, K vltozkba nullt tesz. */

    Az elsplda rtkadsa normlis esetben megnveli eggyel az I vltozrtkt, szlssges esetben (ha pl. I-ben, a tpusnak megfelel legna-gyobb szm van ppen) azonban nem. A szmtgp vges memrijbanugyanis nem trolhatunk vgtelen nagy szmokat, a szmtgp szmbr-

    zolsa csak bizonyos korltok kztt (rtelmezsi tartomny, pontossg)engedi meg a szmok hasznlatt.

    4.5.Beolvas utasts

    Egy vagy tbb vltoznak rtket adhat a felhasznl a standard inputeszkz, a billentyzet segtsgvel.Jells:

    Be: vltozlista

    A vltozlista vltozk vesszvel elvlasztott sorozata.Pl. Be: A, B, CVgrehajts: a felhasznl ltal megadott adatok troldnak a felsoroltvltozkban.

    Megjegyzs Adatok bekrsekor ltalban valamilyen informcit (pl. tjkoztat

    zenetet) kell adni arrl, hogy milyen adatot vrunk. Az egyszersgkedvrt ettl eltekintnk, a megoldsok programm rsakor viszontclszerezeket megtenni.

    Feltesszk, hogy a felhasznl j adatot ad meg, az adatok ellenrz-svel (ha csak a feladat jellege nem kifejezetten ilyen, lsd 11.4.) nemfoglalkozunk.

    Csak az egsz, karakter, vals s sztring tpus adatok beolvassa meg-engedett. Nem krhetnk be teht logikai rtkeket, halmazokat, tm-bket, rekordokat. Az sszetett adatok (lsd 9.) bekrse elemenknt,ill. meznknt trtnhet, ha azok bekrse megengedett.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    23/358

    Algoritmusok s adatstruktrk Adatok trolsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 23

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 23

    4.6.Kir utasts

    Egy vagy tbb kifejezs rtke kirathat a standard output eszkzre, a

    kpernyre.Jells:

    Ki: kifejezslistaA kifejezslista kifejezsek vesszvel elvlasztott sorozata.Pl. Ki: A kr sugara:, R, terlete:, R*R*3.14Vgrehajts: a kifejezsek rtke kirtkeldik, majd sorban kirdik a kp-ernyre.

    A pldban szerepl els s harmadik kifejezs rtkei maguk a(sztring) konstansok, a msodik az Rvltoz tartalma, a negyedik pedig,

    az R aktulis rtkbl kiszmolt rtk lesz, ezek rdnak ki.

    Megjegyzs

    Az egyszersg kedvrt a kirs esetleges pozcionlsval, tagolssal,soremelssel itt nem foglalkozunk, ezeket a megoldsok programmrsakor kell megtennnk (a feladathoz illeszkeden, vagy ha ez nemkttt, akkor tetszs szerint).

    Csak az egsz, karakter, vals s sztring tpus adatok kirsa megen-gedett. Nem rhatunk ki teht logikai rtkeket, halmazokat, tmbket,rekordokat. Az sszetett adatok (lsd 9.) kirsa elemenknt, ill. me-znknt trtnhet, ha azok kirsa megengedett.

    Az rtkad, beolvas s kir utastsokat alaptevkenysgekneknevezzk.Azt, hogy egy feladat megoldshoz szksges alaptevkenysgeket milyensorrendben kell vgrehajtani, a vezrlszerkezetekkel szablyozhatjuk, ame-lyeket a ksbbiekben (lsd 7.) ismertetnk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    24/358

    Algoritmusok s adatstruktrk Adatszerkezeti tblzat

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 24

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 24

    5.

    Adatszerkezeti tblzat

    Egy feladat megoldshoz szksges adatokat s a trolsukra hasznltvltozkat egy olyan tblzatban adjuk meg, amelyben egy-egy adatot az tkezel vltoz tulajdonsgainak megadsval jellemznk. Ngy tulajdon-sgot tartunk fontosnak:

    Funkci: ez a tulajdonsg mutatja meg, hogy a vltozba milyen adatkerl, mire hasznljuk a vltozt.

    Azonost: a vltoz azonostja (neve), ezzel hivatkozunk az adatra. Tpus: a vltoz, s ezen keresztl az adat tpusa, trolsi mdja. Itt ad-

    juk meg az sszetett vltozt jellemzinformcikat is (pl. tmbdimen-zik).

    Jelleg: a vltozban kiindulsi (input), vgeredmny (output), ill. rsz-eredmny (munka) adatot trolunk-e.

    A vltozk azonostinak (csakgy, mint a feladat megoldshoz deklarltkonstansok, tpusok, szubrutinok azonostinak) egyedieknek kell lennik.Clszerrvid, de kifejezneveket vlasztani. A megoldsok programmrst megknnytend, az azonostkban csak az angol betket, a szmje-

    gyeket s az alhzs karaktert hasznljuk. Az olvashatsg s a knnyebbttekinthetsg rdekben ezeket nagybetvel rjuk, csakgy, mint a mve-letek s fggvnyek neveit.

    A munka jelleg vltozkban rszeredmnyeket, ill. az algoritmusmegadshoz, vezrlshez szksges adatokat troljuk.

    Egy vltoz, a benne trolt adattl fggen tbbfle jelleggel is ren-delkezhet. A jellegeket a kezdbetikkel rvidtjk.

    Pl: Egy rendezalgoritmushoz az albbi adatszerkezeti tblzat defini-lhat:

    Funkci Azonost Tpus Jelleg

    A rendezendelemek A Egydimenzis, tetsz-leges elemtpus tmb

    I, M, O

    A rendezendelemek szma N Egsz I

    Kt elem cserjhez CS Az A tmb elemeivelmegegyeztpus

    M

    Segdvltozk I, J, K Egsz M

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    25/358

    Algoritmusok s adatstruktrk Adatszerkezeti tblzat

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 25

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 25

    A tetszleges elemtpus jelen esetben azt jelenti, hogy az algoritmus m-kdik az sszes olyan adatsorra, amelynek elemeire rtelmezettek a hason-

    lts mveletek. A konkrt elemtpust a rendezend adatsor elemeinektpusa hatrozza meg.Az A tmbben kapjuk (input) a rendezend elemeket, az algoritmus

    sorn itt rendezzk ket (munka), s a legvgn itt lesznek sorba rendezveis (output). A tmbk mrett (mreteit) is itt tntetjk fel, ha ez a feladatszempontjbl lnyeges (lsd 9.1.).

    Ha egy feladat megoldsa sorn egy adott konstans rtketvagy egy j,ltalunk definilt tpusttbb helyen is hasznlni szeretnnk, akkor clszerket egyszer deklarlni, s utna csak az azonostjukat hasznlni. Az

    albbi egyszerformalizmust fogjuk hasznlni:Konstans

    Azonost AdatTpus

    Azonost Tpuslers

    Pl.

    KonstansSORMAX 10

    OSZLMAX 20Tpus

    ELEM EgszMATRIX Ktdimenzis ELEM tmb[SORMAX, OSZLMAX]

    A fenti pldban kt konstanst s kt tpust deklarlunk gy, hogy aMATRIX tmbtpus deklarlsban mr hasznljuk is az eltte deklarltELEM tpust s mretkonstansokat.

    Megjegyzs: A feladatok kitzsekor gyakran hasznlunk szimblumokat(azonostkat) az adatok jellsre (pl. N), amelyek trolsra felhasznltvltozknak clszeren, de nem szksgszeren, ugyanazokat az azonos-tkat, neveket adjuk (pl. N). Azrt, hogy ez ne okozzon flrertst (azazne keverjk az adatokat az ket trol vltozkkal), az adatok azonostjtdlt kiemelssel rjuk, a vltozk azonostit (csakgy, mint a feladat meg-oldshoz deklarlt konstansok, tpusok, szubrutinok azonostit) nem.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    26/358

    Algoritmusok s adatstruktrk Algoritmusok megadsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 26

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 26

    6.

    Algoritmusok megadsa

    Az algoritmusok megadsra, lersra tbbfle eszkz ll rendelkezsnkre.

    Szveges lersAz algoritmust szavakkal, mondatokkal rjuk le. Szksg esetn az egyeslpseket sorszmokkal ltjuk el, amelyek a megolds menett, a lpsekvgrehajtsi sorrendjt fejezik ki. Minden megoldsnl hasznlni fogjuk.

    FolyamatbraAz algoritmus folyamatt kifejez jellsmd, amelyen jl kvethet azalgoritmus lpseinek sorrendje, a megolds menete. Csak ebben a feje-zetben hasznljuk.

    D-diagramOlyan strukturlt folyamatbra, amely csak a szekvencia, szelekci, itercivezrlszerkezeteket engedi meg, csak ezekbl ptkezik. Csak ebben afejezetben hasznljuk, ahol a mintafeladat megoldsban szerepl folya-matbra egyben D-diagram is.

    Megjegyzs: A nvben szerepl D bet a D-diagramot definil E. W.

    Dijkstra nevbl ered, aki gy prblt rendet tenni a folyamatbra felt-teles s felttel nlkli vezrlstadsaival okozhat kuszasgban.

    StruktradiagramAz algoritmusok fellrl-lefel trtn tervezst tmogat eszkz. El-szr csak a fbb lpseket definiljuk, majd azokat hasonl mdon kifejt-ve, fokozatosan jutunk el a teljes megolds lersig. Az algoritmusok ter-vezsnl ezt fogjuk hasznlni.

    Megjegyzs: Szerkezeti brnak is nevezik [Mar 93].

    StruktogramAz algoritmusok vezrlszerkezeteit dobozokkal kifejez mdszer.Csak ebben a fejezetben hasznljuk.

    PszeudokdOlyan utastsszint ler eszkz, amelynek vezrlszerkezeteit a

    magasszint

    programozsi nyelvekben megszokott mdon, vagy ahhoz

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    27/358

    Algoritmusok s adatstruktrk Algoritmusok megadsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 27

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 27

    nagyon hasonlan rjuk le. Mivel az alapul vett hrom programozsi nyelv(C, Pascal, Basic) kicsit eltr szintaktikval hasznlja ezeket a vezrl-

    szerkezeteket, ezrt egy ltalnos, egyszerstett, a kzs lnyeget kifejezjellsmdot definilunk. Az elbb felsorolt nyelvek ismeretben taln eza lers olvashat, ill. programozhat a legknnyebben, ezrt valamennyimegoldsnl hasznlni fogjuk.

    Az egyszersg s rvidsg rdekben bizonyos feladatok megolds-nl (mint az albbi pldban is) feltesszk, hogy az input adatok mr ren-delkezsre llnak, ezeket megkapjuk, mg az output eredmnyeket vissza-adjuk. Ilyenkor a megoldst egy szubrutin (lsd 10.) vgzi, amelynek nevemgtt zrjelben felsoroljuk a kommunikcit vgz, input ill. output

    adatokat tartalmaz vltozk azonostit (mint a szubrutin paramtereit),jelezve ezzel azt, hogy a megolds csak az rdemi rszt tartalmazza, azesetleges adatbekrs s eredmnykirs, a szubrutint hv programrsz(pl. a fprogram) feladata.

    Az algoritmus megadsi mdszerek hasonlsgt, klnbzsgt azalbbi feladat megoldsn szeretnnk szemlltetni.

    Feladat: Hatrozzuk meg kt egsz szm legnagyobb kzs osztjt!

    Megolds: A feladatra Euklidesz (kb. 2300 vvel ezeltt) egy, a marad-

    kos osztson alapul megoldst adott, amelynek lnyege a kvetkez:Az as b0szmokra vgezzk el a maradkos osztst, azaz

    a = bq1+ r1 (0 |r1| < |b|).

    Ezutn b s r1kztt is,

    b = r1q2+ r2 (0 |r2| < |r1|)

    s gy tovbb. Mivel a maradkok (r1, r2, ) abszolt rtkben monotoncskkennek, gy vges szm lpsben bekvetkezik az

    rn1= rnqn+1+ rn+1 (0 < |rn+1| < |rn|)rn= rn+1qn+2

    llapot, azaz a maradk (rn+2) nulla lesz. Az utols nem nulla maradk (rn+1)az as bszmok abszolt rtkben legnagyobb kzs osztjt adja.

    Az algoritmus lnyege abban ll, hogy abszolt rtkben egyre kisebbszmokra (as bhelyett bs a mod brtkekre) vgzi el sorban ugyanazt(egy maradkos osztst), egszen addig, amg az oszts maradka nullanem lesz.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    28/358

    Algoritmusok s adatstruktrk Algoritmusok megadsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 28

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 28

    Szveges lersHogy a nullval val osztst elkerljk, a b=0felttelt vizsgljuk meg el-

    szr.1.

    Ha brtke 0, akkor artke a megolds s kszen vagyunk.2. Ha brtke nem 0, akkor osszuk el artkt brtkvel maradkosan

    s jellje az oszts maradkt r.3. Legyen aj rtke b, bj rtke rs folytassuk a vgrehajtst az 1. l-

    pssel.

    A vgrehajtsi lpseket egyszeren megsorszmoztuk.Az algoritmusok kzzel, papron trtnlejtszsa nemcsak az al-

    goritmus elksztst, de a mr ksz algoritmusok megrtst is segtheti.Az albbi tblzat az algoritmus egyes lpseihez tartoz a, bs rrt-keket tartalmazza, ami jl tkrzi az algoritmus mkdst.

    a b r a b r a b r a b r a b r a b r a b r

    1. 40 18 4 6 9 6 -5 3 -2 2 -5 2 -10 -8 -2 0 21 0 0 0

    2. 18 4 2 9 6 3 3 -2 1 -5 2 -1 -8 -2 0 21 0

    3. 4 2 0 6 3 0 -2 1 0 2 -1 0 -2 0

    4. 2 0 3 0 1 0 -1 0

    6.1. tblzat.rtkek alakulsa osztssal.

    Megjegyzs

    Az algoritmusnak csak abban az esetben van rtelme, ha a bszm nemnulla (ekkor aakr 0 is lehet).

    Az algoritmus az a=0s b=0extrm esetben a 0 eredmnyt adja.

    Ha a szmok csak termszetes szmok lehetnek (1, 2,), akkor a marad-kos oszts helyett kivonson alapul algoritmus is adhat, amely lnyeg-ben ugyanazt vgzi, csak a maradkos oszts ismtelt kivonsokkal he-lyettestdik.

    1. Ha artke megegyezik brtkvel, akkor ez az rtk a megolds skszen vagyunk.

    2.

    Ha artke nem egyezik megbrtkvel, akkor a nagyobb szm rt-kt cskkentsk a kisebb szm rtkvel s folytassuk a vgrehajtst az1. lpssel.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    29/358

    Algoritmusok s adatstruktrk Algoritmusok megadsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 29

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 29

    a b a b

    1. 40 18 6 9

    2. 22 18 6 3

    3. 4 18 3 3

    4. 4 14

    5. 4 10

    6. 4 6

    7. 4 2

    8. 2 2

    6.2. tblzat. rtkek alakulsa kivonssal.

    A tovbbi megoldsok egzaktabb jellsmdot hasznlnak, ezrt elttemegadjuk a feladathoz tartoz adatszerkezeti tblzatot is.

    Adatszerkezeti tblzat

    Funkci Azonost Tpus Jelleg

    Egyik szm A Egsz I, M, O

    Msik szm B Egsz I, MAz osztsos algoritmusban az osztsmaradka

    R Egsz M

    A rekurzv fggvnyek eredmnye ER Egsz O

    Az A s B vltozk munka jellegt az indokolja, hogy rtkk megvltozikaz algoritmus sorn, A output jellegt pedig az, hogy itt keletkezik azeredmny.

    Mind a maradkos osztson, mind a kivonson alapul algoritmust

    bemutatjuk az albbiakban, de az R vltoz csak az osztson alapul algo-ritmushoz, mg az ER vltoz csak a rekurzv megoldsokhoz szksges.

    A rekurzv fggvnyek ER vltozjt a megolds strukturltsgnakmegrzse rdekben hasznltuk (lsd 10.).

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    30/358

    Algoritmusok s adatstruktrk Algoritmusok megadsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 30

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 30

    Folyamatbra

    Struktradiagram

    Struktogram

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    31/358

    Algoritmusok s adatstruktrk Algoritmusok megadsa

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 31

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 31

    Pszeudokd

    LNKO_OSZTASSAL(A,B)

    whileB0R A MOD BA BB R

    LNKO_KIVONASSAL(A,B)

    whileABifA>B

    A A-Belse

    B B-A

    A feladatra rekurzv megoldsok is adhatk, ezek pszeudokdja a kvet-kez:

    LNKO_OSZTASSAL(A,B)

    ifB=0ER A

    else

    ER LNKO_OSZTASSAL(B,A MOD B)returnER

    LNKO_KIVONASSAL(A,B)

    ifA=BER A

    else

    ifA>BER LNKO_KIVONASSAL(A-B,B)

    else

    ER LNKO_KIVONASSAL(A,B-A)returnER

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    32/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 32

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 32

    7.

    Strukturlt algoritmusok tervezse

    Egy feladat megoldsa kzben, az egyes tevkenysgek vgrehajtsi sor-rendjt vezrlszerkezetekkel definiljuk. Az egyes vezrlszerkezeteket(szekvencia, szelekci, iterci), ezek jellst kln fejezetekben, kln-bzpldkon szemlltetve trgyaljuk.

    7.1.Szekvencia

    Olyan vezrlszerkezet, amelynek sorn az egyes rsztevkenysgeketsorban, egyms utn hajtjuk vgre.

    Struktradiagram-jellsT

    T1 T2 Tn...

    Jelents: A T tevkenysg vgrehajtsa a T1, T2, , Tnrsztevkenysgekegyms utni vgrehajtsbl ll.

    Megjegyzs: Ha tbb, egymst kvet rsztevkenysg alaptevkenysg,akkor azok egyetlen tglalapba sszevonva is megadhatk, elkerlve ezzelaz bra tl gyors szlesedst.

    Pszeudokd-jellsT1T2T

    n

    A T1, T2, , Tnrsztevkenysgeket egyszeren a T tevkenysg helyrerjuk, egyms al, egyvonalba.

    Feladat: Hatrozzuk meg egy adott sugar kr terlett s kerlett!

    Megolds: Egy kr terlett az r2, kerlett a 2rmatematikai kpletekdefiniljk, ezeket kell kiszmolnunk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    33/358

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    34/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 34

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 34

    Jelents: A T tevkenysg vgrehajtsa annak a Ti rsztevkenysgnek avgrehajtst jelenti, amelyhez tartoz fifelttel igaz. Ha egyik felttel sem

    teljesl, akkor a T tevkenysg res tevkenysg.Pszeudokd-jells

    iff1T1

    elseiff2T2

    ...elseiffn

    Tn

    A fentieket a T tevkenysg helyre rjuk gy, hogy a T1, T2, , Tnrsz-tevkenysgek beljebb, egyms al, egyvonalba kerljenek.

    Megjegyzs: Ha a szelekciban csak egy felttel szerepel (n=1), akkornincs elsersz.Pl.

    ifA>0

    DB DB+1

    Ha a szelekciban lvfelttelek kzl az egyik biztosan teljesl, akkor azutols felttel (if fn) elhagyhat.

    Pl.ifA>B

    Ki: A

    else

    Ki: B

    A szelekci ezen tagolsa amellett, hogy az ttekinthetsget nveli, els-sorban azrt szksges, mert gy jelezzk az egyes gakhoz tartoz rszte-vkenysgek elejt s vgt. Fokozottan gyeljnk erre tbb, egymsba

    gyazott szelekci esetn, mert csak a tagols jelzi azt, hogy az egyes te-vkenysgek melyik felttelhez tartoznak.

    Feladat: Oldjuk meg az ax2+bx+c=0msodfok egyenletet, ahol az a, b, cegytthatk vals szmok!

    Megolds: Minden esetet megvizsglunk, a megoldsokat ezek alapjnszmoljuk s rjuk ki.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    35/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 35

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 35

    Funkci Azonost Tpus Jelleg

    Az egytthatk A, B, C Vals I

    Az egyik vals gyk X1 Vals OA msik vals gyk X2 Vals O

    A komplex gykk vals rsze V Vals O

    A komplex gykk kpzetes rsze K Vals O

    A diszkriminns rtke D Vals M

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    36/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 36

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 36

    Kt vals gyk

    Kiszmols Kirs

    X1 (B+SQRT(D)/(2*A)X2 (BSQRT(D)/(2*A)

    Ki: Kt vals gyk:, X1, X2

    /* Msodfok egyenlet megoldsa */Be: A,B,CifA=0

    /* Nem msodfok eset */ifB=0

    /*Nem elsfok eset */ifC=0Ki: Minden vals szm megolds!

    else

    Ki: Nincs megolds!else

    Ki: Elsfok:,-C/Belse

    /* Msodfok eset */D B*B-4*A*CifD>0

    /* Kt vals gyk */X1 (-B+SQRT(D))/(2*A)X2 (-B-SQRT(D))/(2*A)Ki: Kt vals gyk:,X1,X2

    elseifD=0Ki: Msodfok:,-B/(2*A)

    else

    /* Komplex gykk */V -B/(2*A)K ABS(SQRT(-D)/(2*A))Ki: Egyik komplex gyk:,V,+,K,iKi: Msik komplex gyk:,V,-,K,i

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    37/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 37

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 37

    Megjegyzs: A diszkriminns kiszmtsnl a ngyzetre emelst egyszerszorzssal vgeztk (az SQR fggvny hasznlata helyett).

    7.3.Iterci

    Olyan vezrlszerkezet, amelyben egy tevkenysg ismtelten vgrehajthat.Azt a tevkenysget, amelyet az iterci vagy ms nven ciklus so-

    rn ismtelten vgrehajtunk, ciklusmagnak nevezzk.Hrom alapvetciklusszervezs ltezik, ezeket ismertetjk a tovbbi-

    akban.

    7.3.1.Ellteszteliterci

    Struktradiagram-jells

    f : a ciklust vezrl felttel (logikaikifejezs)

    T1 : a ciklus magja (az ismtelendtevkenysg)

    Jelents: A T tevkenysg vgrehajtsa a T1tevkenysg ismtelt vgrehaj-tst jelenti gy, hogy amg teljesl a ciklust vezrl felttel, addig vgre-hajtjuk a T1ciklusmagot. A felttel rtkt a ciklusmag vgrehajtsa elttvizsgljuk.

    Pszeudokd-jellswhilef

    T1

    Az elssort a Thelyre, mg a T1ciklusmag tevkenysgeit beljebb rjuk.

    Megjegyzs A T1ciklusmagnak olyan tevkenysget is tartalmaznia kell, amely hatssal

    van a ciklust vezrlfelttel rtkre (mert klnben vgtelen ismtlds,vgtelen ciklus keletkezhet ha a felttel rtke kezdetben igaz).

    Ha a felttel rtke kezdetben hamis, akkor a ciklusmag egyszer semkerl vgrehajtsra, ekkor a T tevkenysg res tevkenysg.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    38/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 38

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 38

    Feladat: Hatrozzuk meg egy 1-nl nagyobb egsz szm 1-tl klnbz,legkisebb osztjt!

    Megolds: Mivel ilyen oszt biztosan ltezik, ha ms nem, a szm nma-ga, ezrt 2-tl kezdve sorra vesszk az egsz szmokat s megnzzk,hogy osztja-e az adott szmot vagy sem. Ha osztja, azaz megvan bennemaradk nlkl, akkor ez a szm a megolds, klnben vesszk a kvetke-zszmot.

    Funkci Azonost Tpus Jelleg

    A vizsglt szm N Egsz I

    Az aktulis oszt O Egsz M, O

    /* Legkisebb oszt */Be: NO 2whileN MOD O0

    O O+1Ki: O

    7.3.2.Nvekmnyes iterci

    Gyakran a ciklusmagot adott szmban, ill. adott rtkeken vgiglpdelvekell vgrehajtani. Az ilyen feladatok megoldsa egy specilis elltesztelciklussal, a nvekmnyes ciklussal trtnhet.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    39/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 39

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 39

    Struktradiagram-jells

    T

    CV KE, VE, LE

    T1

    *

    CV: ciklusvltoz

    KE: kezdrtk

    VE: vgrtk

    LE: lpskz

    T1 : a ciklus magja (az ismtelendtevkenysg)

    Jelents: A T tevkenysg vgrehajtsa a T1tevkenysg ismtelt vgrehaj-tst jelenti gy, hogy a ciklusvltoz a kezdrtktl a vgrtkig lpdel, a

    megadott lpskzzel.Pontostva:

    1. Kiszmoldnak a kezdrtk, vgrtk s lpskz rtkek, amelyektetszleges vals kifejezssel megadhatk (de ltalban egsz szmok).

    2. A ciklusvltoz felveszi a kezdrtket.3.

    A lpskz eljeltl fggen kirtkeldik a CV=VE (negatv lpskz esetn) felttel.

    4.

    Ha a felttel igaz, akkor vgrehajtdik a T1ciklusmag, s a ciklusvlto-

    z rtke mdosul a lpskz rtkvel (CV CV+LE), majd a 3.ponttl folytatdik a vgrehajts.

    5. Ha a felttel hamis, kilpnk a ciklusbl.

    Pszeudokd-jellsforCV KE,VE,LE

    T1

    Az elssort a Thelyre, mg a T1ciklusmag tevkenysgeit beljebb rjuk.

    Megjegyzs

    Ha a lpskz 1, akkor azt elhagyhatjuk, azaz ha nem rjuk ki, akkor 1az alaprtelmezs.

    A nulla lpskz nem megengedett. Mivel a ciklus elltesztel, gy lehet, hogy a ciklusmag egyszer sem

    kerl vgrehajtsra (pl. pozitv lpskz esetn, ha a kezdrtk na-gyobb, mint a vgrtk). Ekkor a T tevkenysg res tevkenysg.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    40/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 40

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 40

    Feladat: Hatrozzuk meg egy pozitv egsz szm faktorilist!

    Megolds: Az n!=1*2*3*(n1)*n kplet nem hasznlhat kzvetlenl,

    ezrt a kpletet egy ciklus segtsgvel kell kiszmoltatnunk. Ha a kezdet-ben 1-re lltott eredmnyhez, sorba hozzszorozzuk a szmokat (2-tl n-ig), az eredmnyt mindig visszatve az eredmnyt trol vltozba, akkora vgre ppen a kvnt szorzat ll elebben a vltozban.

    Funkci Azonost Tpus Jelleg

    N rtke N Egsz I

    Az aktulis szorzat FAKT Egsz M, O

    Az aktulis szorz I Egsz M

    /* Faktorilis */Be: NFAKT 1for I 2,N

    FAKT FAKT*IKi: FAKT

    Megjegyzs: A faktorilis fggvny egy, az exponencilis fggvnynl isnagyobb mrtkben nvfggvny, gy csak kis nrtkekre szmolhat kipontosan n!rtke. A megolds programm rsakor ppen ezrt clszeraz eredmnyt trol (FAKT) vltozt a legnagyobb egsz tpusra vagyvals tpusra deklarlni.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    41/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 41

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 41

    7.3.3.Htulteszteliterci

    Struktradiagram-jells

    f : a ciklust vezrl felttel (logikaikifejezs)

    T1 : a ciklus magja (az ismtelendtevkenysg)

    Jelents: A T tevkenysg vgrehajtsa a T1tevkenysg ismtelt vgrehaj-

    tst jelenti gy, hogy amg a ciklust vezrlfelttel igazz nem vlik, ad-dig vgrehajtjuk a T1ciklusmagot. A felttel rtkt a ciklusmag vgrehaj-tsa utn vizsgljuk.

    Pszeudokd-jellsrepeat

    T1untilf

    Az els sort a T helyre, a T1 ciklusmag tevkenysgeit beljebb, mg azutols sort az elssorral egyvonalba rjuk.

    Megjegyzs A T1 ciklusmagnak olyan tevkenysget is tartalmaznia kell, amely

    hatssal van a ciklust vezrlfelttel rtkre (mert klnben vgtelenismtlds, vgtelen ciklus keletkezhet ha a felttel rtke kezdet-ben hamis).

    A T1ciklusmag legalbb egyszer vgrehajtdik.

    Feladat: Krjnk be karaktereket az Esc billenty (vgjel) letsig s

    rjuk ki minden egyes karakterre a karakter ASCII kdjt s azt, hogy an-gol bet, szmjegy vagy egyb karakter volt-e a megadott karakter!

    Megolds: Az ilyen jelleg feladatoknl, ahol az adatok szma nem is-mert, radsul tetszlegesen nagy lehet, az sszes adat nem trolhat egyidben a memriban (hiszen a memriakapacits is vges), kvetkezs-kppen az adatok bekrse s feldolgozsa nem klnlhet el egymstl.Egy adatot, a bekrse utn nyomban fel is dolgozzuk, gy a kvetkezadatot ugyanabba a vltozba bekrhetjk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    42/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 42

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 42

    Funkci Azonost Tpus Jelleg

    Az aktulis karakter CH Karakter M

    /* Karakterek vizsglata */Ki: Karakterek vizsglata (Kilps:Esc)repeat

    /* Bekrs */Be: CHifCH#27

    /* Kirs */Ki: CH,ASC(CH)/* Kirtkels */if(CH>='A') AND (CH='a') AND (CH='0') AND (CH

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    43/358

    Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 43

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 43

    Megjegyzs Az aktulis karaktert trol vltoz munka jelleg, annak ellenre,

    hogy rtkt bekrjk s kirjuk az algoritmus sorn, hiszen a feladategsze szempontjbl nem szmt sem kiindul (input), sem vgered-mny (output) adatnak a benne trolt adat.

    A felttelvizsglatok halmazok s az IN mvelet segtsgvel rvideb-ben is megadhatk (lsd 9.3.).

    A beolvasst clszerolyan utastssal programozni, amelyik nem jele-nti meg a lettt karaktert a kpernyn (klnben a kirs miatt kt-szer jelennek meg a karakterek).

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    44/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 44

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 44

    8.

    Elemi feladatok

    Ez a fejezet olyan feladatokat tartalmaz, amelyek megoldhatk egyszeradattpusok hasznlatval.

    8.1.Prmfelbonts

    Feladat: Adott egy N(>1) egsz szm, mint input adat. rjuk ki a szmprmtnyezs felbontst!Pl: 12 2*2*3

    Megolds: Felhasznlva a legkisebb osztt megad algoritmust (lsd7.3.1.), a prmtnyezket a kvetkezkppen kaphatjuk meg: megkeresska szm legkisebb osztjt, kirjuk, mint prmtnyezt, osztjuk vele a sz-mot, majd jra keressk az j szmra a legkisebb osztt, egszen addig,amg az osztsok eredmnyeknt a szm eggy nem vlik. A legkisebboszt keresst kezdetben 2-tl kezdjk, majd mindig az elzoszt rt-ktl folytatjuk (hiszen a kisebb osztkat mr megvizsgltuk), s csak ak-kor lpnk a kvetkez lehetsges osztra, ha az adott oszt (mr) nemosztja a szmot. Hogy a plda szerinti eredmnyt rjuk ki, az utols osztkivtelvel, az osztk utn egy szorzsjelet is kirunk. Azt, hogy egy osztaz utols volt-e vagy sem, a szm elfogysa, 1 rtke jelzi.

    Funkci Azonost Tpus Jelleg

    A felbontand szm N Egsz I, M

    Az aktulis oszt O Egsz M, O

    /* Prmfelbonts */Be: NO 2whileN>1

    ifN MOD O=0N N DIV OifN=1

    Ki: Oelse

    Ki: O,'*'else

    O O+1

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    45/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 45

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 45

    8.2.Monoton nvsorozat

    Feladat: AdottN(>1) darab szm, mint input adat, aholNis input adat.

    Krjk be ket s mondjuk meg, hogy az adatmegads sorrendjben mo-noton nvk-e vagy sem!

    Megolds: Az ilyen jellegfeladatoknl, ahol azt kell eldntennk, hogyegy adott felttel teljesl-e az sszes adatra vagy sem, a kvetkezkppenjrhatunk el. Egy logikai vltozban troljuk az eredmnyt, azaz azt, hogyteljesl-e az adott felttel az adatsorozat elemeire vagy sem. Kezdetben avltoz rtkt igazra lltjuk, majd sorban megvizsgljuk az egyes eleme-ket. Az elsolyan elemnl, amely megsrti az adott felttelt, az eredmnyt

    hamisra lltjuk, s a vizsglatot befejezhetjk, hiszen az eredmny eldlt.Ha a sorozat vizsglata utn igaz rtk marad az eredmnyvltozban,akkor a sorozat minden elemre teljeslt a megadott felttel.

    Most, az adatbekrs miatt, nem llunk meg a vizsglattal az elsnem meg-felel elemnl, az sszes adatot beolvassuk s feldolgozzuk, eredmnyt ateljes adatsor beolvassa utn kzlnk. A monoton nvst olyan elem srtimeg, amely kisebb, mint az t megelz elem. A vizsglatot a msodikelemtl kezdve vgezzk, hiszen az elselem rtke tetszleges lehet.

    Megjegyzs: Az adatsor elemei most ugyan vals szmok, de a monotonnvs rtelmezhetminden olyan adatra, amelyekre rtelmezettek a ha-sonltsok.

    Funkci Azonost Tpus Jelleg

    Az adatok szma N Egsz I

    Az aktulis adat A Vals I

    Az aktulis adatot megelzadat ELOZO Vals M

    Monoton nv-e a sorozat NOVO Logikai M, OCiklusvltoz I Egsz M

    /* Monoton nvsorozat */Be: N/* Elsadat */Be: A/* Kezdrtkek */NOVO igazELOZO A

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    46/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 46

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 46

    /* Tbbi adat */forI 2,N

    Be: A

    ifA

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    47/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 47

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 47

    kvnt tlag. Termszetesen, ha nem volt pozitv adat, akkor az tlaguksem rtelmezhet.

    Funkci Azonost Tpus JellegAz adatok szma N Egsz I

    Az aktulis adat AKT Vals I

    A pozitv adatok maximuma MAX Vals M, O

    A pozitv adatok tlaga ATL Vals O

    A pozitv adatok darabszma DB Egsz M

    A pozitv adatok sszege OSSZ Vals M

    Ciklusvltoz I Egsz M

    /* Pozitv adatok maximuma, tlaga */Be: N/* Kezdrtkek */DB OSSZ 0/* Adatbekrs, feldolgozs */forI 1,N

    Be: AKTifAKT>=0

    DB DB+1OSSZ OSSZ+AKT

    ifDB=1MAX AKT

    else ifAKT>MAXMAX AKT

    /* Eredmnykirs */ifDB=0

    Ki: Nem volt pozitv adat!else

    ATL OSSZ/DBKi: A pozitv adatok maximuma:,MAXKi: A pozitv adatok tlaga:,ATL

    8.4.exhatvnysora

    Feladat: Kzeltsk exrtkt a hatvnysornak felhasznlsval!

    Megolds: Mint ismeretes

    =

    =0 !n

    nx

    n

    xe . Ez az sszeg termszetesen nem

    szmolhat a vgtelensgig, valahol abba kell hagyni, tekintettel idnkvgessgre s a szmtgp trolsi pontossgra. Csak addig sszegznk,

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    48/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 48

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 48

    amg az ltalnos tag egy megadott (nullnl nagyobb) pontossgnl ab-szolt rtkben kisebb nem lesz. Ez elbb utbb bekvetkezik, mivel az

    ltalnos tag (xn

    /n!) abszolt rtke hatrrtkben a 0-hoz tart.Az ltalnos tag kiszmtsa nem trtnhet gy, hogy kiszmoljuk a szm-llt is, meg a nevezt is s elosszuk ket egymssal, hiszen mindkt rtkhamar kicsordulna a szmtgp brzolsi pontossgbl (nem is beszl-ve az ismtelt vgrehajtsokrl), ezrt az ltalnos tag rtkt lpsenknt,az elz tag rtkbl szmoljuk ki, egy egyszertrttel (x/n) val szor-zssal. Az sszegzst az els kt tag sszegvel kezdjk, hogy az ered-mnyben xis szerepeljen.

    Megjegyzs Az, hogy az ltalnos tag mr elrte a megadott pontossgot, mg nem

    felttlenl jelenti azt, hogy exrtkt is ilyen pontossggal kzeltjk. Az exponencilis fggvnnyel kiszmolt rtk sem abszolt pontos, az

    is csak egy kzeltrtk.

    Funkci Azonost Tpus Jelleg

    x, ahol a fggvnyrtket kzeltjk X Vals I

    A pontossg EPSZ Vals IA kzelts nlpsszma N Egsz M, O

    A kzeltrtk OSSZ Vals M, O

    Az aktulis tag rtke AKT Vals M

    /* Az exponencilis fggvny kzeltse */Be: X,EPSZ/* Kezdrtkek */N 1AKT XOSSZ 1+AKT/* Kzelts */whileABS(AKT)>=EPSZ

    N N+1AKT AKT*X/NOSSZ OSSZ+AKT

    /* Eredmnykirs */Ki: N rtke:,NKi: A kzeltrtk:,OSSZKi: A pontos rtk:,EXP(X)

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    49/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 49

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 49

    8.5.Gykkeress intervallumfelezssel

    Feladat: Hatrozzuk meg egyf(x)=0egyenlet egy gykt, egy adott [a, b]

    intervallumban, adott pontossggal!Megolds: Feltesszk, hogy az f(x)fggvny folytonos az [a, b]interval-lumban s az intervallum kt vgpontjban ellenttes eljel. Ebben azesetben ugyanis biztosan van legalbb egy gyk az [a, b]intervallumban saz intervallumfelezses megoldsi mdszer alkalmazhat. Felezzk meg azintervallumot! Ha a felezpontban felvett fggvnyrtk 0, akkor szeren-csnk van, megkaptuk a keresett gykt, ha nem, vizsgljuk meg, hogymelyik vgpontban felvett fggvnyrtkkel azonos eljel. Ha f(a)-val

    egyezeljel, akkor hagyjuk el az intervallum elsfelt, haf(b)-vel, akkora msodikat, ha 0, akkor mindkt felt, a felezpontot kivve. A gyk biz-tosan a megmarad intervallumban lesz. Az j intervallumra ismteljkmeg a fenti tevkenysgeket egszen addig, amg az intervallum hosszarvidebb nem lesz a megadott (nullnl nagyobb) pontossgnl. Ebben azesetben a maradk intervallum brmelyik pontjt elfogadhatjuk (pl. a fele-zpontot) az egyenlet gykeknt.

    Megjegyzs: A konkrtf(x)fggvny a forrsprogramba berand, a mell-

    kelt (lsd fggelk) megoldsban ez azf(x)=sin(x)fggvny.

    Funkci Azonost Tpus Jelleg

    Az intervallum kezdpontja A Vals I

    Az intervallum vgpontja B Vals I

    A kzelts pontossga EPSZ Vals I

    A kiszmtott kzeltrtk GYOK Vals O

    A vizsglt intervallum kezdpontja XK Vals M

    A vizsglt intervallum vgpontja XV Vals M

    A vizsglt intervallum felezpontja XF Vals M

    Fggvnyrtk a kezdpontban YK Vals M

    Fggvnyrtk a vgpontban YV Vals M

    Fggvnyrtk a felezpontban YF Vals M

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    50/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 50

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 50

    /* Gykkeress intervallumfelezssel *//* Adatbekrs */Be: A,B,EPSZ

    /* Kezdrtkek */XK AXV BYK f(A)YV f(B)/* Kzelts */whileXV-XK>EPSZ

    /* Felezpont */XF (XK+XV)/2YF f(XF)/* Cskkents */

    ifYK*YF

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    51/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 51

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 51

    Formalizlva, ha az intervallumot n egyenl rszre osztjuk, az i-edikosztspontban felvett fggvnyrtket yi -vel jelljk, akkor a trapzok

    sszege gy rhat fel:)

    2(

    1

    1

    0

    =

    ++

    =n

    i

    in y

    yyhT

    aholy0az a-ban,yna b-ben felvett fggvnyrtk s h=(ba)/n.

    8.1. bra.A trapz-mdszer.

    Megjegyzs: A konkrtf(x)fggvny a forrsprogramba berand, a mell-kelt (lsd fggelk) megoldsban ez azf(x)=3x2fggvny.

    Funkci Azonost Tpus Jelleg

    Az intervallum kezdpontja A Vals I

    Az intervallum vgpontja B Vals I

    A kzelts pontossga EPSZ Vals I

    A beoszts finomsga N Egsz MA rszintervallumok hossza H Vals M

    Az aktulis terletsszeg T Vals M, O

    Az elsill. az elzterletsszeg E Vals M

    Fggvnyrtk az ahelyen Y0 Vals M

    Fggvnyrtk a bhelyen YN Vals M

    Ciklusvltoz I Egsz M

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    52/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 52

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 52

    /* Hatrozott integrl kzeltse trapz-mdszerrel *//* Adatbekrs */Be: A,B,EPSZ

    /* Kezdrtkek */Y0 f(A)YN f(B)T (B-A)*(Y0+YN)/2/* Kvetkezbeoszts */N 2/* Kzelts */repeat

    /* Elzterletsszeg */E T/* Rszintervallumok hossza */

    H (B-A)/N/* Trapzok terletsszege */T (Y0+YN)/2forI 1,N-1

    T T+f(A+I*H)T T*H/* Kvetkezbeoszts */N 2*N

    untilABS(T-E)

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    53/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 53

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 53

    Az elzfeladat segtsgvel rjuk ki egy adott [a, b]intervallumba essszes relatv prm szmprokat!

    Adott npozitv egsz szmra rjuk ki a Fibonacci sorozatelsn elemt! Akpzs mdszere: az elskt elem rtke 1, ezutn minden kvetkezaz elzkettsszege (Pl. n=6: 1, 1, 2, 3, 5, 8).

    Oldjuk meg az ax+by=cs dx+ey=fegyenletekbl ll, ktismeretlenes,lineris egyenletrendszert, ahol a, b, c, d, e, frtkek vals szmok!

    AdottNdb szm, mint input adat, aholNis input adat. Krjk be azadatokat s mondjuk meg, hogy hny elembl ll a leghosszabb mono-ton nvelemsorozat!

    Pl.N=5 2, 1, 3, 2, 1 2

    AdottNdb szm, mint input adat, aholNis input adat. Krjk be azadatokat s hatrozzuk meg az albbiakat!

    Az adatok hny szzalka pozitv. Az adatok a beolvass sorrendjben szmtani sorozatot alkot-

    nak-e vagy sem. Az tlagukat gy, hogy a maximlis s minimlis rtk egy-egy

    elfordulst kihagyjuk az tlagszmtsbl.

    Adott valamennyi szmadat, mint input adat. Az adatok szmt nem

    ismerjk, az adatsor vgt a 0 vgjel (nem adat) jelzi. Krjk be az ada-tokat s hatrozzuk meg az albbiakat!

    Ngyzetes tlag (ngyzetsszegbl vont ngyzetgyk, osztva azadatok szmval).

    Az adatok a beolvass sorrendjben mrtani sorozatot alkot-nak-e vagy sem.

    AdottNdb pont a skon a koordintival, mint input adat, aholN isinput adat. Krjk be az adatokat s hatrozzuk meg az albbiakat!

    Az adatok slypontja (a pontokXkoordintinak tlaga adja aslypontXkoordintjt, az Ykoordintk tlaga pedig a sly-pont Ykoordintjt).

    Az origtl legtvolabb lv pont (feltesszk, hogy csak egyilyen pont van a pontok kztt).

    AdottNdb pont a skon a koordintival, mint egyNcscs konvexsokszg cscspontjai valamely krljrsi irny szerint, aholNis inputadat. Krjk be az adatokat s hatrozzuk meg a sokszg kerlett!

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    54/358

    Algoritmusok s adatstruktrk Elemi feladatok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 54

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 54

    Ksztsk el az y=sinx fggvny rtktblzatt adott [a, b] interval-lumban, adott lpskzzel a szmtgp monitorn gy, hogy minden

    telert kpernyutn vrjunk billentyletsre! Adott xpozitv szmhoz hatrozzuk meg azt a legkisebb negsz sz-

    mot, amelyre igaz, hogy 1+1/2+1/3++1/n>=x. (A sor monotonnvs nem korltos, teht elvileg van megolds.)

    Ksztsnk algoritmust egy f(x) fggvny, adott [a, b] intervallumonvett kzelt integrljnak meghatrozsra a tglalap-mdszerrel, azintervallum egyenletes beosztsnak fokozatos finomtsval, egszenaddig, amg az als s felskzeltsszeg eltrse kisebb nem lesz,mint egy adott >0 szm. Felttelezhetjk, hogy a fggvny az inter-

    vallumon monoton nv vagy cskken, gy rszintervallumonkntegyrtelmen (az intervallum vgpontjaiban vett fggvnyrtkekkel,mint magassgokkal) kpezhetnk kt, egy kisebb s egy nagyobb ter-lettglalapot. A kisebb tglalapok terletsszege az als, a nagyobba-k a felskzeltsszeget adjk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    55/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 55

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 55

    9.

    sszetett adattpusok

    Az eddig megismert adattpusokkal ellenttben, ahol egy vltozban csakegy adatot trolhatunk egy idben, az sszetett adattpusok segtsgveltbb adat egyttes kezelsre is lehetsgnk nylik. A kvetkez fejeze-tekben ezekkel az adattpusokkal ismerkednk meg.

    9.1.Tmbk

    A tmb egy ltalnosan s gyakran hasznlt eszkz a szoftverfejlesztk,programozk krben, mivel a tmbkkel knyelmesen kezelhetnk tbb,

    azonos tpus adatot. Az adatok elrsre, a tmbk egy elemnek kiv-lasztsra sorszmokat, ms nven indexeket hasznlunk.Ha ez elemeket egy sorszmmal azonostjuk, akkor egydimenzis

    tmbrl, ha kt sorszmmal, akkor ktdimenzis tmbrl s gy tovbb,ha ndb sorszmmal azonostjuk, akkor ndimenzis tmbrl beszlnk.Egy tmb egy elemnek kivlasztshoz teht pontosan annyi index szk-sges, ahny dimenzis az adott tmb.

    Ahogy az egyszeradattpusok esetn is megklnbztettk az adatot(pl. 3) az t trol vltoztl (pl. I) s annak tpustl (pl. egsz), itt is

    kitrnk ezek klnbzsgre. A tmb elnevezs ugyanis, a rvidsgemiatt, mind a hrom esetben hasznlatos, gy a tmb lehet: Tmbadat: amely egydimenzis tmb esetn egy adatsornak, vagy ma-

    tematikai fogalommal egy vektornak, ktdimenzis tmb esetn egyadattblzatnak vagy mtrixnak felel meg.

    Tmb adattpus: amely definilja a tmb dimenziit s a tmb elemeinektpust.

    Tmbvltoz: amelyben az adatok troldnak. Egy elem kivlasztsval,azaz a tmbvltoz indexelsvel egy, a tmb elemtpusval megegye-ztpus vltozt hivatkozunk.

    A tmbk indexelsre 1-tl kezddsorszmokat hasznlunk, azaz min-den dimenzi legkisebb indexe 1. Az egyes dimenzik legnagyobb indext(a tmb mrett ill. mreteit), ha ez a feladat szempontjbl lnyeges, dek-larlskor adjuk meg. Ha az egyszersg kedvrt ezt elhagyjuk, akkor amegolds programm rsakor olyan tmbt kell hasznlnunk, amelybenelfrnek az adataink.

    A programnyelvek ltalban nem korltozzk a dimenzik szmt, az-az hasznlhatunk hrom, ngy, stb. dimenzis tmbket is, a gyakor-

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    56/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 56

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 56

    latban (gondoljunk pldul a papron trtn informcicserre) azegydimenzis (adatsor) s ktdimenzis (adattblzat) tmbk a leggyako-

    ribbak, mi is ezeket trgyaljuk.

    9.1. bra.Tmbk s elemeik.

    DeklarlsA tmbvltozkat (csakgy, mint az egyszervltozkat) hasznlat elttdeklarlni kell, azaz definilnunk kell a tmb dimenzit (az indexek felshatrait) s a tmb elemeinek tpust.

    A fordtprogram ezek alapjn lefoglalja a szksges mret (elemek

    szma*egy elem mrete) memriaterletet a vltoz szmra.Az adatokat ltalban ellrl kezdve, folyamatosan troljuk a tmbben,az elsadatot az elselemben, a msodikat a msodikban s gy tovbb.

    Termszetesen azt, hogy hny adatot trolunk a tmbben, adminiszt-rlnunk kell.

    Megjegyzs A Pascal nyelv nemcsak az egsz szmokkal trtnindexelst engedi

    meg, hanem tetszleges, n. sorszmozott tpus adattal is indexelhe-

    tnk (pl. karakterrel). A karakterek indexknt val felhasznlst a Cnyelv is megengedi, ekkor a karakter ASCII kdja adja a megfelelin-dexet. Ezzel a lehetsggel bizonyos feladatok knnyebben, egysze-rbben programozhatk, de megoldsainkban az egyszersg kedvrtezeket nem hasznljuk (nem engedjk meg).

    A C nyelv a tmbket 0-tl kezdden indexeli, amit a megoldsokprogramm rsakor figyelembe kell vennnk.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    57/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 57

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 57

    Vannak olyan feladatok (lsd 9.1.2.), ahol egy bizonyos adat csak atmb egy bizonyos elemben trolhat, ekkor az ellrl feltlttt, fo-

    lyamatos adattrols s darabszm adminisztrls nem alkalmazhat. A tmbk elemei sszetett adattpusak is lehetnek (pl. halmazok,

    rekordok, sztringek). Ha egy egydimenzis tmb elemeinek tpusaszintn egy tmb, akkor ezt nem tmbkbl ll tmbknt, hanemegy ktdimenzis tmbknt fogjuk hasznlni.

    Egy tmb deklarlhat az adatszerkezeti tblzatban, de ha tbbszr isszksg van ugyanolyan tmbkre, clszereltte, kln tpusknt dekla-rlni. A kvetkezpldban mindkt deklarlst bemutatjuk.

    KonstansSORMAX 10OSZLMAX 20

    TpusMATRIX Ktdimenzis egsz tmb[SORMAX, OSZLMAX]

    Funkci Azonost Tpus Jelleg

    Egy adatsor A Egydimenzis

    vals tmb

    I

    Az adatsor adatainak szma N Egsz I

    Egy tslott szelvnye L Egydimenzisegsz tmb[5]

    M, O

    Egy mtrix B MATRIX I, M, O

    A mtrix sorainak szma S Egsz I

    A mtrix oszlopainak szma O Egsz I

    Az A vals tmb mrett nem definiltuk (ha a feladat szempontjbl amret nem fontos, akkor elhagyhat), az L tmbben t darab lottszmot,mg a B tmbben max. 10*20 db egsz szmot trolhatunk.

    A ktdimenzis tmbk els indext a sorindexnek, a msodikat azoszlopindexnek szoks hasznlni.

    HivatkozsA tmbk elemeire a tmbvltoz azonostja utn, szgletes zrjelbetett, egymstl vesszvel elvlasztott indexekkel hivatkozunk. Az indexektetszleges egsz kifejezsek lehetnek.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    58/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 58

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 58

    Pl. A[1] az A tmb elseleme,A[I+1] az A tmb I+1. eleme,

    B[S, 2] a B tmb S. sornak 2. eleme.Egy indexkifejezs eredmnynek kicsordulsa a hozz tartoz dimen-zi tartomnybl termszetesen hibnak szmt, hibs programot ered-mnyez s programlellst is kivlthat.

    KonstansTmbk esetn is megengedjk a konstansok hasznlatt, amellyel tbb,azonos tpus konstanst deklarlhatunk.Pl. SZINEK=(Treff, Kr, Kr, Pikk)

    MTX=((1,2,3),(4,5,6))A fenti pldkban egy ngyelem, sztringekbl ll, egydimenzis s egy23-as, egsz szmokbl ll, ktdimenzis tmbkonstanst deklarltunk.A tmbelemekre val hivatkozs ugyangy trtnik, mint tmbvltozk-nl, azaz pl. a SZINEK[1] hivatkozssal a Treff sztring, az MTX[2,3]hivatkozssal a 6 rhetel.

    MveletekA tmbkre nem rtelmeznk mveleteket, mg az egyes tmbelemekkelminden olyan mvelet megengedett, ami a tmb elemtpusra definilt.

    Megjegyzs A C nyelvben egy tbbdimenzis tmb egy elemre val hivatkozs-

    kor minden indexet kln szgletes zrjelbe kell tenni. Az ltalunkhasznlt, egyszerbb jells (az indexek vesszvel elvlasztva egy szg-letes zrjelben) a C nyelvben ms jelentssel br.

    A megoldsok programm rsra hasznlt, DOS platform fejleszt-rendszerek (a memriacmzsbl fakadan) korltozzk a vltozk, gya tmbvltozk maximlis mrett is. Ez a korlt 64 Kbjt, gy ezt fi-

    gyelembe kell vennnk a tmbk hasznlatnl.

    A pldinkban szerepl tmbk maximlis mrete fordtsi idbenmeghatrozdik, azaz a program futsakor ezek mr nem vltoztatha-tk. Az olyan tmbket, amelyek mrete futs kzben llthat, dinami-kus tmbkneknevezzk (lsd 13.1.). Az ilyen tmbk mgtt valj-ban a dinamikus adatstruktrk, ill. a dinamikus trkezels rejtzik.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    59/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 59

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 59

    9.1.1.tlagnl nagyobb elemek

    Feladat: AdottNdb szm, mint input adat. Krjk be ket s rjuk ki az

    tlagnl nagyobb adatokat! Az adatok szma is input adat, rtke legfeljebb100.

    Megolds: A feladat megoldshoz ktszer kell az adatsoron vgigmen-ni, egyszer, amikor az tlaghoz sszegezzk ket, majd amikor az tlagnlnagyobb elemeket kirjuk. Az adatokat ezrt egy tmbben troljuk, gy azadatok bekrse s feldolgozsa elklnlhet egymstl. Az adatok bek-rsekor elszr az adatok szmt krjk be, majd egy nvekmnyes ciklus-sal magukat az adatokat. Ezeket egy tmbben troljuk, ellrl kezdve fo-lyamatosan, az i. adatot a tmb i. elemben. A tmb deklarlt mrett azadatok maximlis szma adja.

    KonstansNMAX 100

    Funkci Azonost Tpus Jelleg

    Az adatok szma N Egsz I

    Az adatok A Egydimenzis valstmb[NMAX]

    I

    Az adatok sszege OSSZ Vals M

    Az adatok tlaga ATL Vals M

    Ciklusvltoz I Egsz M

    /* tlagnl nagyobb elemek *//* Adatbekrs */Be: NforI 1,N

    Be: A[I]

    /* tlagszmols */OSSZ 0forI 1,N

    OSSZ OSSZ+A[I]ATL OSSZ/N/* Eredmnykirs */forI 1,N

    ifA[I]>ATLKi: A[I]

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    60/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 60

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 60

    9.1.2.Kockadobsok gyakorisga

    Feladat: Input adatknt adott egy 6 oldal, szablyos dobkockval dobott

    szmsorozat. A dobsok szmt nem ismerjk, ez tetszlegesen nagy lehet, asorozat vgt a 0 szm (mint vgjel) jelzi. Krjk be az adatokat s ksztsnkgyakorisgi tblzatot az egyes dobsok elfordulsi darabszmrl!

    Megolds: Mivel az adatok szma tetszlegesen nagy lehet, magukat adobott szmokat nem tudjuk tmbben trolni (hiszen mekkorra deklarl-nnk), de erre nincs is szksg. Az eredmnyt fogjuk tmbben trolni,mgpedig egy olyan 6 elemtmbben, ahol az i. helyen az i, mint dobottszm darabszmt gyjtjk. A darabszmokat kezdetben nullra lltjuk,majd egy dobs bekrsekor a megfeleltmbelem rtkt, azaz a hozztartoz darabszmot megnveljk eggyel. A dobssorozat ill. adatmegadsvgn (a 0 vgjel berkezse utn) kirjuk az eredmnyeket. A bekrst egyhtultesztel ciklussal vgezzk, hiszen legalbb egy adatot be kell kr-nnk. A vgjelet nem dolgozzuk fel kockadobsknt, az adatbekrst adobs sorszmnak kirsval segtjk.

    KonstansN 6

    Funkci Azonost Tpus JellegAz egyes dobsok darabszma DB Egydimenzis egsz tmb[N] M, O

    Az aktulis dobs A Egsz I

    Segdvltoz I Egsz M

    /* Kockadobsok gyakorisga */Ki: Kockadobsok (1-,N,) gyakorisga (Kilps:0)/* Kezdrtkek */forI 1,N

    DB[I] 0

    I 0repeat/* Bekrs */I I+1Ki: I, . dobs:Be: AifA0

    DB[A] DB[A]+1untilA=0Ki: GyakorisgokforI 1,N

    Ki: I,DB[I]

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    61/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 61

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 61

    9.1.3.rtk trlse adatsorbl

    Feladat: Trljnk ki egy N elem adatsorbl egy adott rtket, ahny-

    szor csak elfordul!Megolds: Az adatsor trolsra tmbt hasznlunk. A vizsglatot atmb elselemnl kezdjk, s azN-ediknl fejezzk be. Ha az aktulisanvizsglt elem rtke megegyezik a trlendrtkkel, akkor azt egyszerentugorjuk, vesszk a kvetkez elemet, klnben elre msoljuk azrtket a tmbben. gy a tmb elejre kerl majd a kvnt (az adott rt-ket mr nem tartalmaz) adatsor, az adatok eredeti sorrendjben. Az el-remsolt rtkeket szmoljuk (ezzel a vgn az eredmnytmb elemeinekszmt kapjuk), gy a soronkvetkez, elremsoland elem j helyt isismerni fogjuk, hiszen az ppen eggyel nagyobb.

    Funkci Azonost Tpus Jelleg

    Az adatsor A Egydimenzis, tetsz-leges elemtpus tmb

    I, M, O

    Az adatok szma N Egsz I, O

    A trlendrtk X Az A tmb elemeivelmegegyeztpus

    I

    Az aktulisan vizsglt tmb-elem indexe I Egsz M

    Az elremsolt elemek szma J Egsz M

    /* rtk trlse adatsorbl */TOROL(A,N,X)

    /* Kezdrtk */J 0/* Elremsols */forI 1,N

    ifA[I]XJ J+1A[J] A[I]

    /* Darabszm */N J

    Megjegyzs: A tetszleges elemtpus jelen esetben azt jelenti, hogy azalgoritmus mkdik az sszes olyan adatsorra, amelynek elemeire rtelme-zettek a hasonlts mveletek. A konkrt elemtpust a feldolgozand adat-sor elemeinek tpusa hatrozza meg.

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    62/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 62

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 62

    9.1.4.Eratosztenesz szitja

    A most ismertetsre kerl, prmszmok ellltsra szolgl algoritmust

    Eratosztenesz idszmtsunk eltt kb. 200 vvel definilta:rjuk fel az 1-nl nagyobb termszetes szmokat egy tetszlegesennagy Kkorltig. A legkisebb szm 2, jelljk meg s trljk a 2-vel oszt-hatkat a 2 kivtelvel. A megmarad, jelletlen szmok kzl a legkisebb3, ezzel vgezzk el ugyanezt az eljrst: jelljk meg s trljk a 3-maloszthatkat a 3 kivtelvel. A megmarad, jelletlen szmok kzl a legki-sebbel mindig elvgezve az eljrst, elbb-utbb elfogynak a szmok,vagy trljk ket, vagy megjelljk. A megjellt, a szitn mintegy fenn-marad szmok ppen a K-nl nem nagyobb prmszmok.

    Feladat: Ksztsnk megoldst a fenti algoritmus megvalstsra tmbsegtsgvel!

    Megolds: Egy olyan logikai tmbt fogunk hasznlni a megolds sorn,amelyben a tmb i. eleme azt fejezi ki, hogy az imint szm mg fent van-ea szitn, vagy mr trltk. A szmok megjellse nem szksges, mertminden szmot csak egyszer vesznk figyelembe (lsd a szitls klscik-lust). Az egyszersg kedvrt a tmb K elemlesz, teht az elselemet(az 1-nek megfelelrtket) nem hasznljuk.

    Megjegyzs: A K korlt rtke termszetesen most nem lehet tetszlege-sen nagy, rtkt a tmb helyfoglalsra vonatkoz (64Kb-os) korlt limi-tlja.

    Konstans:K 1000 /* Eddig hatrozzuk meg a prmszmokat */

    Funkci Azonost Tpus JellegA felrt szmokat reprezentl tmb A Egydimenzislogikai tmb[K]

    M, O

    Az aktulisan vizsglt szm P Egsz M

    A tbbszrsk trlshez I Egsz M

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    63/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 63

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 63

    /* Eratosztenesz szitja tmbbel *//* Szmok felrsa */forI 2,K

    A[I] igaz/* Szitls */for P 2,K

    /* A P szm prmszm? */ifA[P]

    /* Igen, trljk a tbbszrseit */for I 2*P,K,P

    A[I] hamis/* Kirs */forI 2,K

    ifA[I]

    Ki: I

    9.1.5.Mtrixsszegek

    Feladat: Adott egyNM-es szmmtrix. Hatrozzuk meg a mtrix sorai-nak, oszlopainak, valamint az sszes elemnek az sszegt!

    Megolds: A mtrix elemein egyszer, sorfolytonosan (teht elszr azelssornak elemein nvekvoszlopindex szerint, azutn a msodik so-ron, s gy tovbb) vgighaladva gyjteni tudjuk mind a sorok, mind azoszlopok, mind a teljes mtrix sszegt. Mivel Ndb sor van, ezrt Ndb

    sorsszeg keletkezik, gy azokat egy egydimenzis tmbben troljuk. Azoszlopsszegekkel hasonl a helyzet, csak ottMdb oszlopsszeg keletke-zik. A teljes sszeg gyjtsre elegendegy egyszervltoz. Itt nem ma-gukat az elemeket fogjuk sszegezni, hanem a sorsszegeket, (lehetne azoszlopsszegeket is) hiszen gy cskkenthetjk az sszeadsok szmt.

    Megjegyzs: A mtrix maximlis mreteire konstansokat definilunk, meg-knnytve ezzel az eredmnytmbk deklarlst.

    KonstansNMAX 10 /* Sorok maximlis szma */MMAX 10 /* Oszlopok maximlis szma */

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    64/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 64

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 64

    Funkci Azonost Tpus Jelleg

    A feldolgozand mtrix A Ktdimenzis vals

    tmb[NMAX, MMAX]

    I

    A mtrix sorainak szma N Egsz I

    A mtrix oszlopainak szma M Egsz I

    A sorsszegek SOR Egydimenzis valstmb[NMAX]

    M, O

    Az oszlopsszegek OSZL Egydimenzis valstmb[MMAX]

    M, O

    A teljes mtrix sszeg OSSZ Vals M, O

    Segdvltozk I, J Egsz M/* Mtrixsszegek */OSSZEGEK(A,N,M,SOR,OSZL,OSSZ)

    /* Kezdrtkek */forJ 1,M

    OSZL[J] 0OSSZ 0/* sszegzs */forI 1,N

    SOR[I] 0

    forJ 1,MSOR[I] SOR[I]+A[I,J]OSZL[J] OSZL[J]+A[I,J]

    OSSZ OSSZ+SOR[I]

    9.1.6.Oszlopok trlse mtrixbl

    Feladat: Adott egy NM-es mtrix. Trljk ki a mtrix azon oszlopait,amelyekben minden elem azonos!

    Megolds: Sorban megvizsgljuk a mtrix oszlopait. Ha egy oszlop min-

    den eleme egyforma, akkor kitrljk a mtrixbl. A trls egyik lehets-ges mdja az, hogy az utols oszloppal fellrjuk a trlend oszlopot,majd cskkentjk az oszlopok szmt eggyel. Ez a trls azonban tren-dezi a mtrix oszlopait. Ahhoz, hogy a megmarad oszlopok sorrendjene vltozzon meg (amelyik elbb volt az eredeti mtrixban, az eredmnymtrixban is elrbb legyen), a trlst a trlendoszlop mgtti oszlopokelremsolsval vgezzk. Elszr a trlendoszlop mgtti oszlopotmsoljuk egy oszloppal elrbb, majd az azutnit, s gy tovbb, legvglaz utolst. Ezutn cskkentjk az oszlopok szmt eggyel. Mindkt trls-

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    65/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 65

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 65

    fajta esetn, ha ppen az utols oszlop a trlend, akkor termszetesenelegend az oszlopszm cskkentse (hiszen ekkor nem kell elemeket

    mozgatnunk a mtrixban). Annak eldntse, hogy egy oszlop csupa egy-forma elemeket tartalmaz-e vagy sem, szintn elvgezhet tbbflekp-pen. Hasonlthatjuk pldul a szomszdos elemeket, de hasonlthatjuk azelemeket az oszlop egy adott (pl. legels) elemhez (ahogy azt a megol-dsban tettk). Ha tallunk eltrelemprt, akkor az oszlopban nem lehetminden elem egyforma.

    Funkci Azonost Tpus Jelleg

    A feldolgozand mtrix A Ktdimenzis, tetsz-

    leges elemtpus tmb

    I, O

    A mtrix sorainak szma N Egsz I

    A mtrix oszlopainak szma M Egsz I, O

    Az aktulisan vizsglt oszlopindexe

    J Egsz M

    A vizsglt oszlop elemei egy-formk-e

    EGYF Logikai M

    Az aktulisan elremsolandoszlop indexe

    K Egsz M

    Segdvltoz I Egsz M

    /* Egyforma elemoszlopok trlse */TOROL(A,N,M)

    J 1whileJ

  • 7/26/2019 Algoritmusok_es_adatstrukturak.pdf

    66/358

    Algoritmusok s adatstruktrk sszetett adattpusok

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 66

    A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 66

    Megjegyzs A tetszleges elemtpus jelen esetben azt jelenti, hogy az algoritmus

    mkdik az sszes olyan mtrixra, amelynek elemeire rtelmezettek ahasonlts mveletek. A konkrt elemtpust a feldolgozand mtrixelemeinek tpusa hatrozza meg.

    Vegyk szre, hogy az oszlopokon halad klsciklus nem nvekm-nyes, gy mindig az aktulis oszlopszmhoz hasonltunk, hiszen egyoszlop trlsvel az oszlopok szma is megvltozik.

    Az adott oszlop (J) elemeinek egyezst vizsgl ciklusban az EGYFvltoznak egy hasonlts eredmnyt adtuk rtkl.

    Az utols oszlop (M.) trlsekor nem trtnik elemmozgats (a Kciklusvltozj nvekmnyes ciklus kezdrtke ekkor nagyobb, minta vgrtke).

    Ha egy oszlopot kitrlnk, akkor nem lpnk tovbb egy oszloppal,hiszen az elremsolssal helyre lp oszlopot is meg kell vizsgl-nunk.

    9.1.7.Feladatok

    Adott egy pozitv egsz szm, mint egy forintban kifizetendpnzsz-

    szeg. Fizessk ki a legkevesebb cmlet felhasznlsval!Pl. 204005 20000: 10db, 2000: 2db, 5: 1 db

    AdottNdb pozitv egsz szm, mint forintban kifizetendpnzssze-gek. Hatrozzuk meg, hogy a teljes kifizetskhz, az egyes cmletek-bl hny darab kell, ha a legke