Bevezetés a programozásba I. 3. gyakorlat Tömbök, programozási tételek Surányi Márton PPKE-ITK 2010.09.21.
ZH! PlanG-ból papír alapú zárthelyit írunk el reláthatólag október 5-én!
Tömbök Tömbök Eddig egy-egy adattal dolgoztunk (pl. egy EGÉSZ, VALÓS, SZÖVEG (bár ez már karakterek sorozata volt), stb.) A SZÖVEGhez hasonlóan most is adatok sorozatával fogunk dolgozni, de most az alaptípus bármilyen típus lehet lehet. Az indexelés (a SZÖVEGhez hasonlóan) nullával indul. tomb : így kérdezhetjük le a tömb hosszát.
Tömbök Tömbök, példa Feladat: Készíts egy három elem EGÉSZ alaptípus feletti tömböt, és töltsd föl 0-100 közötti véletlen számokkal, majd írd ki a tömb tartalmát! PROGRAM tomb1 VÁLTOZÓK: tomb: EGÉSZ[3] tomb[0] := RND 100 tomb[1] := RND 100 tomb[2] := RND 100 KI: tomb PROGRAM_VÉGE
Tömbök Tömbök, második példa Módosítjuk a feladatot: Készíts egy harminc elem EGÉSZ alaptípus feletti tömböt, és töltsd föl 0-100 közötti véletlen számokkal, majd írd ki a tömb tartalmát! PROGRAM tomb1b VÁLTOZÓK: tomb: EGÉSZ[30], i: EGÉSZ i := 0 CIKLUS AMÍG i < tomb tomb[i] := RND 100 i := i + 1 CIKLUS_VÉGE KI: tomb PROGRAM_VÉGE
A programozási tételek valamilyen sorozaton elvégzett m velet. (a sorozat nem feltétlenül számsorozat!) A mai órán ezekr l lesz szó: Összegzés tétele: a sorozat elemeit valamilyen m velettel összegezzük (általában összeadással) Számlálás tétele: a sorozat elemei közül bizonyos tulajdonságúakat összeszámolunk Lineáris keresés: a sorozat elemei között megkeressük, hogy van-e adott tulajdonságú elem Maximum keresés: a sorozat elemei közül melyik a legnagyobb (minimum keresésnél: melyik a legkisebb)
Összegzés Összegzés, alappélda Feladat: Adjuk össze a bemenetr l számokat! (Addig olvassunk be, amíg a bemeneten 0 nem lesz!) Specikáció: BE: egész számok, utolsó helyen nulla KI: a beolvasott számok összege Ehhez kell egy segédváltozó (sum), ami olyan típusú, mint amilyen típusú elemeket beolvasunk. Valamint kell egy olyan változó, amibe beolvasunk (in).
Összegzés Összegzés, alappélda (folyt.) PROGRAM osszeg1 VÁLTOZÓK: sum, in: EGÉSZ sum := 0 ** nulla a kezd. érték in := -1 CIKLUS AMÍG in /= 0 BE: in sum := sum + in CIKLUS_VÉGE KI: sum PROGRAM_VÉGE
Összegzés Összegzés, második példa Feladat: Szorozzunk össze a bemenetr l számokat! (Addig olvassunk be, amíg a bemeneten 0 nem lesz!) Specikáció: BE: egész számok, utolsó legyen nulla KI: a beolvasott számok szorzata A változók ugyanazok, csupán a '+' jelet kell '*'-ra cserélni, illetve a sum kezd értékét 1-re változtatni.
Összegzés Összegzés, második példa (folyt.) PROGRAM osszeg2 VÁLTOZÓK: sum, in: EGÉSZ sum := 1 in := -1 CIKLUS AMÍG in /= 0 BE: in sum := sum * in CIKLUS_VÉGE KI: sum PROGRAM_VÉGE Hibás a program! Az érték mindig nulla lesz, mert a legvégén beolvassuk a nullát, és azzal is megszorozzuk!
Összegzés El reolvasás A megoldást az el reolvasás jelenti. a beolvasás mindig a ciklusmag végére kerül, a ciklusmag elejére pedig a feldolgozás (ami most itt szorzás) mivel a ciklusmag elején dolgozzuk fel, így a ciklus el tt el re kell olvasnunk!
Összegzés El reolvasás (folyt.) PROGRAM osszeg2 VÁLTOZÓK: sum, in: EGÉSZ sum := 1 BE: in ** előreolvasás CIKLUS AMÍG in /= 0 sum := sum * in BE: in CIKLUS_VÉGE KI: sum PROGRAM_VÉGE Láthatjuk, hogy a ciklusmagban el ször elvégezzük a m veletet (szorzás), majd beolvasunk.
Számlálás Számlálás tétele Egy sorozatban valamilyen tulajdonságú elemeket számoljuk össze. Egy felhasználótól bekért szövegben számoljuk össze a nagybet ket! Specikáció: BE: szöveg KI: nemnegatív egész szám, hogy mennyi nagybet van a szövegben Szükség van egy segédváltozóra (c), ami kezd értékként a nullát kapja. A ciklus során ezt a változót fogjuk növelni, ha találunk nagybet t.
Számlálás PROGRAM szamlalas VÁLTOZÓK: i, c: EGÉSZ, s: SZÖVEG c := 0 BE: s i := 0 CIKLUS AMÍG i < s HA s[i] = NAGY s[i] AKKOR c := c + 1 HA_VÉGE i := i + 1 CIKLUS_VÉGE KI: c PROGRAM_VÉGE
Lineáris keresés Lineáris keresés Egy sorozatban megkeressük, hogy van-e egy adott tulajdonságú elem. Ha van, akkor visszaadjuk a helyét vagy magát az elemet. Ha több is van, akkor a legels helyét (vagy az elemet) adjuk vissza. Feladat: A bemenetr l olvassunk be egész számokat nulláig. Közben keressük meg a legels kétjegy számot! Használjunk el reolvasást! (ha nem találunk ilyen számot, azt jelezzük szövegesen!) Specikáció: BE: számok, a végén nulla KI: mi a legels kétjegy szám
Lineáris keresés Lineáris keresés PROGRAM linker1 VÁLTOZÓK: e, t: EGÉSZ, talalt: LOGIKAI t := 0 talalt := HAMIS BE: e...
Lineáris keresés Lineáris keresés (folyt.)... CIKLUS AMÍG e /= 0 ÉS NEM talalt HA e > 9 ÉS e < 100 AKKOR t := e talalt := IGAZ HA_VÉGE BE: e CIKLUS_VÉGE HA talalt AKKOR KI: t KÜLÖNBEN KI: "nincs köztük kétjegyű szám!" HA_VÉGE PROGRAM_VÉGE
Maximumkeresés Maximumkeresés Maximumkeresés során egy sorozat elemei között megkeressük a legnagyobb elemet, és visszaadjuk magát az elemet, vagy a helyét. A sorozat elemei között kell valamilyen összehasonlítási m velet. Például számoknál a kisebb/nagyobb, szövegnél lehet a hosszuk, de lehet ábécé-sorrend szerint is.
Maximumkeresés Maximumkeresés, példa Feladat: Olvassunk be számokat nulláig! Közben keressük meg a legnagyobbat! (el reolvasás!) Specikácó: BE: egész számok, a végén nulla KI: (egész) a legnagyobb szám Szükség lesz egy segédváltozóra (max), amiben tároljuk az addigi legnagyobb elemet.
Maximumkeresés Maximumkeresés, példa (folyt.) PROGRAM maxker VÁLTOZÓK: e, max: EGÉSZ BE: e max := e CIKLUS AMÍG e /= 0 HA max < e AKKOR max := e HA_VÉGE BE: e CIKLUS_VÉGE KI: max PROGRAM_VÉGE
Maximumkeresés Feladatok III-1. Számítsd ki egy szám faktoriálisát! (1 2 3... (n 1) n) III-22. Egy tetsz leges szövegr l add meg, hány számjegy, hány nagybet és hány kisbet van benne! III-27. Add meg egy tetsz leges szöveg leghosszabb szavát! Add meg egy tetsz leges szövegb l az els nagybet t, és a helyét!
Maximumkeresés Házi feladatok III-12.) Egy tetsz leges számsorban add meg a legkisebb és a legnagyobb számot. (a számsort vagy bemenetr l olvasd, vagy véletlen számokkal feltöltött tömbben tárold) III-11.) Egy pozitív egész számokból álló számsorban add meg, hogy hány páros szám van! III-19.) Egy egész számról döntsd el, hogy prímszám-e! V-2.) Számítsd ki egy vektor átlagát (vektor: egy dimenziós tömb)!
Maximumkeresés Szorgalmi feladatok III-20.a) Sorold fel az els N prímszámot! III-30.a) Egy tetsz leges szövegr l add meg, hány mondat található benne. Mondatnak tekintünk minden olyan sort, ami nagybet vel kezd dik, és ponttal, felkiáltójellel vagy kérd jellel végz dik!