nagy attila - objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_oop_segedlet.pdf ·...

23
OBJEKTUMORIENTÁLT-PROGRAMOZÁS SEGÉDLET ÍRTA: NAGY ATTILA 2009. szeptember 22.

Upload: others

Post on 10-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

OBJEKTUMORIENTÁLT-PROGRAMOZÁSSEGÉDLET

ÍRTA: NAGY ATTILA

2009. szeptember 22.

Page 2: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

2

TARTALOMJEGYZÉK

1 ELMÉLETI ÖSSZEFOGLALÓ ................................................................................................................ 3

1.1 ALGORITMUS ........................................................................................................................................ 31.1.1 Az algoritmusok fő jellemzői ........................................................................................................... 31.1.2 Az algoritmus elemei ....................................................................................................................... 3

1.2 ALGORITMUS LEÍRÓ MÓDSZEREK.......................................................................................................... 41.2.1 Folyamatábra.................................................................................................................................. 41.2.2 Példák folyamatábrákra.................................................................................................................. 51.2.3 Struktogram..................................................................................................................................... 71.2.4 Példák struktogramokra.................................................................................................................. 81.2.5 Szöveges leíró nyelv ........................................................................................................................ 9

1.3 A PROGRAMOZÁS FŐBB LÉPÉSEI ......................................................................................................... 101.4 A NEUMANN ELVŰ SZÁMÍTÓGÉP ARCHITEKTÚRA ............................................................................... 101.5 ADATTÍPUSOK..................................................................................................................................... 11

2 A C# PROGRAMOZÁSI NYELV ÁTTEKINTÉSE.............................................................................. 14

2.1 A NYELV SZINTAKTIKÁJÁNAK ALAPJAI ............................................................................................... 142.1.1 A „Hello World” program áttekintése .......................................................................................... 142.1.2 Azonosító elnevezési konvenciók ................................................................................................... 142.1.3 Adattípusok a C# nyelvben............................................................................................................ 142.1.4 Kifejezések..................................................................................................................................... 142.1.5 Utasítások...................................................................................................................................... 162.1.6 Vezérlési szerkezetek a C# nyelvben.............................................................................................. 16

2.2 FORRÁSKÓD FORDÍTÁSA PARANCSSORBÓL ......................................................................................... 162.2.1 Telepítés és beállítások.................................................................................................................. 162.2.2 A forráskód fordítása .................................................................................................................... 18

3 GYAKORLÓ FELADATOK ................................................................................................................... 20

3.1 ELSŐZH-RA ........................................................................................................................................ 203.2 MÁSODIK ZH-RA ................................................................................................................................ 21

4 HIVATKOZÁSOK.................................................................................................................................... 23

Page 3: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

3

1 Elméleti összefoglaló

1.1 Algoritmus

Bárki számára érthetően és követhetően egy folyamatot ír le. Programozási nyelvtől független (bármely nyelvben le lehet írni).

1.1.1 Az algoritmusok fő jellemzői

Elemi lépésekre bontják a problémát. Az algoritmusnak az összes lehetséges esetet le kell kezelni, ami bekövetkezhet. Pél-

dául előfordulhat, hogy egy program bekér egy számot, de a felhasználó szöveget írbe. Ilyen esetekre fel kell készülni.

Véges sok lépésben végre kell hajtódnia. Ha a program soha nem érne véget, akkorpéldául a program futásának eredményét soha nem tudnánk meg, tehát a program ha-szontalan lenne.

1.1.2 Az algoritmus elemei

Szekvencia (teendő, lépés): Az egymást követő utasításokat (vagy teendőket) nevez-zük szekvenciának.

Elágazások: A program szekvenciáját 2 vagy több irányba osztják meg egy logikai ki-fejezés1 értékétől függően.

Ciklus: Egy programrészlet többszöri végrehajtását teszi lehetővé. Azt a programrész-letet, ami többször hajtódik végre szokás a ciklus belsejének, vagy „ciklusmag”-naknevezni. A ciklusmag addig hajtódik végre ismételten, amíg a ciklushoz tartozó logi-kai kifejezés értéke megfelelő. Attól függően, hogy a feltétel (logikai kifejezésértéké-nek) a vizsgálata a ciklus előtt vagy után történik, megkülönböztetünk „elöl tesztelős”,illetve „hátul tesztelős” ciklust. Elöl tesztelős ciklusok esetében a feltételt belépésifeltételnek is nevezik, mivel, ha a feltétel nem teljesül, a ciklusmag soha nem kerülvégrehajtásra, mivel a ciklusba „nem is lép be” a program vezérlése. Ezzel szemben ahátul tesztelős ciklusok ciklusmagja legalább egyszer mindenképp végrehajtódik.Ilyen ciklusok esetében a feltételt kilépési feltételnek is nevezik. Megkülönböztetünkmég ún. számlálós ciklust is, ami az elöl tesztelős ciklus egy speciális megvalósítása.Az ilyen ciklusok jellemzője, hogy előre megadható, hányszor hajtódjon végre a cik-lusmag.

Speciális elemek:o A program kezdetét, illetve végét jelző szimbólumok (pl.: START, STOP).o Input („bemeneti”) utasítások: Ezek segítségével lehet adatokat bevinni az al-

kalmazásba. Például a felhasználó beírhat szöveget, megmozdíthatja az egeret,stb.

o Output („kimeneti”) utasítások: Ezekkel tud az algoritmus információt továbbí-tani a külvilág számára. Például ilyen lehet egy szöveg kiírása a képernyőre,vagy nyomtatás papírra.

o Alprogramok használata: Az algoritmus működése során az egyes lépéseket,teendőket alprogramok2 segítségével oldhatja meg

1 Egy logikai kifejezés értéke lehet IGAZ illetve HAMIS (Boole-algebra).2 Az alprogramok megfelelnek a programozási nyelvekben a függvényeknek, illetve eljárásoknak., eljárások,metódusok)

Page 4: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

4

1.2 Algoritmus leíró módszerekKülönféle algoritmus leíró módszerek („eszközök”) léteznek. Ezek közös jellemzője,

hogy ugyanaz az algoritmus bármelyik módszerrel leírható, mivel az alapvető algoritmuselemek, mindegyik jelölésmódban megtalálhatók, mindössze a jelölésmódban vannak kisebbnagyobb eltérések.

1.2.1 Folyamatábra

Lényege, hogy grafikus ábrák segítségével történik az algoritmus leírása, ezért azokszámára is könnyebben megérthető, akik kevésbé járatosak a programozásban. A folyamatáb-rák főbb részei az alábbiak.

A program kezdetének illetve végének jelzé-sére szolgáló szimbólum. Ezek elhagyásávalnem állapítható meg biztosan, hogy hol kez-dődik az algoritmus.

A szekvencia szimbóluma. A szekvenciátszokás még lépésnek, vagy utasításnak isnevezni. Az egymást követő szekvenciákvonallal, vagy nyíllal vannak összekötve.

Értékadó utasítás. Lényegében ez egy olyanszekvencia, ahol a K változó felveszi a„2 * r * PI” kifejezés értékét.

Az input utasítások megkülönböztetéséregyakran eltérő jelölést használnak. Ebben azesetben az A illetve a B segédváltozók értékétkéri be az algoritmus a felhasználótól.

Az output utasítások megkülönböztetésére isszokás a normál szekvencia jelöléstől eltérőthasználni. A példában az A, és a B változókértéke íródik ki a képernyőre.

Az elágazás (feltétel) jele. Ha a logikai kife-jezés IGAZ, akkor az „i” betűvel jelölt ágonfolytatja az algoritmus végrehajtását, ellen-kező esetben a „h” betűvel jelölt ágon. Ter-mészetesen az „i”, és „h” betűk elhelyezésefelcserélhető, mindig úgy kell ezeket elhe-lyezni, ahogy az algoritmus logikája megkí-vánja.

Page 5: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

5

A ciklusokat az alábbi módon lehet szimboli-zálni. Kell egy logikai feltételt vizsgálni, ésattól függően, hogy a logikai feltétel telje-sült-e vagy sem, az algoritmus egy korábbiutasítására ugrunk vissza. Így például amígegy adott feltétel nem teljesül, addig a prog-ram vezérlése mindig visszakerül a nyíllaljelzett utasításhoz. A „…” szekvencia helyéntovábbi utasítások állhatnak. Ez egy úgyne-vezett „hátul tesztelős ciklus”, mivel a logi-kai kifejezés vizsgálata a ciklus belseje (aciklusmag) után történik.

A ciklusok megvalósításának egy másik le-hetséges módja a folyamatábrák esetében azábrán létható. Ez az ún. „elöl tesztelős cik-lus”. Működésének a lényege, hogy a felté-telvizsgálat a ciklusmag végrehajtása előtttörténik.

1.2.2 Példák folyamatábrákra

Az oldalt látható folyamatábra a teafőzés„algoritmusát” mutatja be. Minden egyeslépés, amit a teafőzés során végzünk, egyszekvenciának fogható fel. Vannak olyanesetek, mikor várakozni kell ezek egy ciklus-sal megvalósíthatók.

Megjegyzés: Eddig nem szerepelt az ábránlátható kis karika szimbólum. Annak gyakor-lati feladata mindössze annyi, hogy a prog-ram vezérlését egy másik ágból az adotthelyre csatlakoztathassuk. Jelölése az átte-kinthetőség növelése végett ajánlott.

Page 6: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

6

A balra látható algoritmus felada-ta, hogy bekér a felhasználótólegy egész számot (N), majd utánaannyi további egész számot kérbe, amekkora az N értéke. A cél,a bekért számok összegzése, és azösszeg eredményének kiírása aképernyőre. Az összeg az S se-gédváltozóban jön létre. Az I(egész szám típusú) változó tárol-ja, hogy eddig mennyi szám be-olvasása történt meg.

N = egész szám

S = egész szám

I = egész szám

A = egész szám

Ez az algoritmus hasonló felada-tot old meg, mint az előző. Azeltérés annyi, hogy itt az első Ndarab szám összegzése történikmeg. A változók hasonló célok-kal jelennek meg, mint az előzőalgoritmusban láttuk.

N = egész szám

S = egész szám

I = egész szám

Page 7: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

7

1.2.3 Struktogram

Hasonló a folyamatábrához, azzal a különbséggel, hogy bizonyos algoritmus részek ki-csit más jelölésmóddal vannak feltüntetve (pl.: az elágazás, és a ciklus ábrázolása másképptörténik). Másik sajátossága a módszernek, hogy a folyamatábráktól eltérően itt nincseneknyilak, így egy átláthatóbb, „tömörebb” leíráshoz lehet jutni.

A szekvencia szibóluma. Először az első amásodik, stb. lépés hajtódik végre. Jelentésemegegyezik a folyamatábránál bemutatottmegszokott szekvencia jelentésével.

Az elágazás szimbóluma. Ha a logikai kife-jezés igaz, akkor az i betűvel jelölt három-szög alatti utasítások hajtódnak végre,egyébként a h betűvel jelölt téglalap alattiak.

Az elöl tesztelős ciklus jele. A ciklusmagotképző utasítások a kis téglalapokba vannakbeírva.

A „hátul tesztelős ciklus” ábrája. Hasonló-képp épül fel, mint az előzőleg bemutatott,de a logikai kifejezés a ciklusmag végrehaj-tása után vizsgálódik.

A struktorgram jelölésmódban az input- ésoutput utasításokra nem definiáltak különjelet (és természetesen az értékadásokrasem).

Az ilyen utasítás leírására a normál szekven-cia jelölés használható.

Page 8: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

8

1.2.4 Példák struktogramokra

A balra látható struktogram ugyanazt az al-goritmust írja le, mint második a folyamatáb-rás példa.

N = egész szám

S = egész szám

I = egész szám

A = egész szám

A harmadik folyamatábrás példa struktogrammegfelelője.

N = egész szám

S = egész szám

I = egész szám

A korábbi struktogramok kissé továbbfejlesz-tett változata. Ez annyit tesz, hogy csak ak-kor adja hozzá az S változóhoz a felhasználóáltal megadott A értékét, ha az nagyobb, mint5. Amennyiben ez a feltétel nem teljesül,nem tesz semmit.

N = egész szám

S = egész szám

I = egész szám

A = egész szám

Page 9: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

9

1.2.5 Szöveges leíró nyelv

Ezt az algoritmus leíró módszert gyakran használják az oktatásban, és a gyakorlatban is,mivel jól érthető, és programozási nyelvre nagyon könnyen átültethetők az így leírt algoritmu-sok. A fő jellemzője, hogy az egyes algoritmus részeket (pl.: szekvenciákat, elágazásokat, ésciklusokat) mondatszerű szintaktikával írják le.

A könnyebb átláthatóság érdekében a szöveges leíró nyelven leírt algoritmusokat szokásszóközökkel, és tabulátorokkal formázni. Ennek a lényege, hogy például egy ciklusmag belse-jében, vagy egy elágazáson belül lévő utasításokat egy bekezdéssel beljebb írjuk. Ez biztosít-ja, hogy a leírás átláthatóbb legyen. Ugyanezt a megfontolást később, a C# forráskód írásakoris erősen ajánlott betartani!

Utasítás1;Utasítás2;…UtasításN;

A szekvenciák leírhatók, ha egymás alá leír-juk őket. A szekvenciák után gyakran szokáspontosvesszőt tenni.

Be: A, BInput utasítások. Az A, és B változók értékeita felhasználónak kell megadnia.

Ki: A, B, COutput utasítások. A példában az A, B és Cváltozók értéke kiíródik a képernyőre.

Ha (logikai kifejezés)Akkor

Utasítás1A;Utasítás2A;…UtasításNA;

különbenUtasítás1B;Utasítás2B;…UtasításNB;

Elágazás vége;

Kétirányú elágazás. Abban az esetben, ha alogikai kifejezés értéke igaz, az „Akkor” szóutáni utasítások hajtódnak végre. Ha a felté-tel hamis volt, akkor a „Különben” szó utániutasítások hajtódnak végre. Az elágazás vé-gét külön jelölni kell.

ElágazásVáltozó

Érték1 esetén Utasítás1;Érték2 esetén Utasítás2;…Különben UtasításN;

Elágazás vége;

Többirányú elágazás. Eddig csak kétirányúelágazásra láttunk példát, de lehetőség vanarra is, hogy az algoritmus vezérlését többirányba ágaztassuk el egy adott változó érté-kétől függően. Abban az esetben, ha a válto-zó adott értéket vesz fel, megmondható, hogymilyen utasítás hajtódjon végre.

Ciklus amíg (logikai kifejezés)Utasítás1;Utasítás2;…UtasításN;

Ciklus vége;

Az elöl tesztelős ciklus.

Page 10: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

10

CiklusUtasítás1;Utasítás2;…UtasításN;

Ciklus amíg (logikai kifejezés);

A hátul tesztelős ciklus.

1.3 A programozás főbb lépései1. Probléma felvázolása, és megértése2. Elemekre, és lépésekre bontás.3. Algoritmizálás és tervkészítés.4. Kódolás.5. Teszt fázis, hibák és hibalehetőségek keresése illetve javítása.6. Dokumentáció készítése.

1.4 A Neumann elvű számítógép architektúra

1. ábra: A Neumann elvű számítógép működi ábrája

Ahogy azt az előző fejezetekben láthattuk, a különféle algoritmusok sokféleképpen leír-hatóak. Ezek az algoritmusok viszont nem érnének sokat, ha nem lenne semmilyen számító-gép, ami végre tudná őket hajtani. Ahhoz, hogy ez elképzelhető legyen, a ’40-es évek végefelé Neumann János kidolgozta a mai modern számítógépek alapvető elveit. Ezek az elvek azidők során ugyan kisebb-nagyobb mértékben változtak, de a fő jellemvonások továbbra ismegmaradtak a Neumann-féle architektúrából.

A Neumann által kidolgozott számítógép [1] működésének egyik legfőbb jellemzője,hogy megkülönböztet egy végrehajtó egységet (ALU), egy memória egységet, illetve bemene-ti/kimeneti eszközöket. Ezeket a főbb részeket egy vezérlő egység hangolja össze. Működéseúgy néz ki, hogy elsőként a központi végrehajtó egység (ALU) a memóriából lekérdez utasí-tásokat és adatokat. Az utasítások ebben az esetben olyan kódokat jelentenek, amit a feldolgo-zó egység értelmezni tud, és a kódnak megfelelően el tudja dönteni, hogy a betöltött adatokkalmit kell tennie. Ilyen utasítás lehet például, hogy a memóriából betöltött két adatot (számot)

Page 11: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

11

össze kell adni, és az eredményt egy újabb memóriaterületre írjuk vissza. A memóriából tör-ténő adat, és utasítás lehívás mellett az ALU végezhet még bemeneti eszközökről érkező adatbeolvasást, és küldhet adatokat egy kimeneti eszközre is. Az egyes részegységeket a vezérlőkoordinálja.

Tehát a Neumann-elvű architektúra legfőbb jellemzői:

Soros utasítás végrehajtás: az utasítások végrehajtása időben egymás után(szekvenciálisan) történik.

Kettes (bináris) számrendszer használata

Belső memória (operatív tár) használata a program és az adatok tárolására.

Teljesen elektronikus működés.

Széles körű felhasználhatóság.

Központi vezérlőegység alkalmazása.

1.5 AdattípusokA memóriában tárolt adatokat ún. változókon keresztül lehet elérni. Egy változó röviden

annyit jelent, hogy a memória egy részéhez egy azonosítót rendelünk, és később, mikor elszeretnénk érni a memóriában tárolt adatot, mindössze annyit kell tennünk, hogy a változótfelhasználjuk a forráskódban. Tehát programnyelvekben használatos változók gyakorlatilagegy azonosítóval ellátott memóriacímet jelentenek. Azt, hogy azonosítók elnevezésévelkapcsolatban milyen szabályokat, konvenciókat kell követni, programozási nyelvenként eltér.

A változók a legtöbb programozási nyelvben rendelkeznek típussal is. A típus meghatá-rozza, hogy milyen fajta (milyen típusú) adatot lehet tárolni a változóban, illetve azt, hogy aváltozóhoz hozzárendelt memóriaterületen lévő adatokat a fordítóprogramnak3 hogyan kellértelmeznie. A változó típusok közt megkülönböztetünk ún. egyszerű- és összetett adattípuso-kat.

Az egyszerű adattípusok közé tartoznak a következők:

Egész szám: Egész számok tárolására alkalmas típus. A memóriában leggyak-rabban 8, 16, 32, 64 bites számként ábrázolódik. A szám ábrázolása lehet előjelnélküli illetve előjeles. Előjel nélküli esetben az ábrázolható számtartomány 0 –2x-ig terjed x bites számábrázolás esetén. Előjeles egész számok esetén az ábrá-zolható számtartomány -2x – 2x-1-ig terjed. Ez utóbbi esetben a számok a memó-riában ún. kettes komplemens kóddal vannak ábrázolva. Ennek a számábrázolásimódszernek az előnye, hogy ugyanazzal a művelettel elvégezhető a számok ösz-szeadása, illetve kivonása is, és nem kell eltérő módon kezelni a kivonást, vagyaz előjeles összeadást végző műveleteket.

Valós szám: Valós számok tárolására alkalmas típus. A leggyakrabban lebegő-pontos számábrázolással írják le ezeket a memóriában. Ebben a számábrázolásimódszerben megkülönböztetünk egyszeres pontosságú (32 bit), dupla pontossá-gú (64 bit) lebegőpontos értékeket. A pontosság lényegében azt jelenti, hogy atizedesvessző után még hány darab számjegyet lehet leírni. Minél pontosabb aszámábrázolási módszer, annál több számjegy lehet a tizedesvessző után, és ezért

3 A fordítóprogram (compiler) egy olyan alkalmazás, ami egy forráskódból futtatható állományt (.exe, .com, stb.)képes készíteni. Ilyen fordítóprogram például a CSC.exe is, ami órán bemutatásra került (CSC = C# Compiler).

Page 12: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

12

egy tetszőleges végtelen tizedes tört nagyobb pontossággal közelíthető. Azonbankönnyen belátható, hogy mivel matematikailag a valós számok halmazába szám-talan irracionális szám tartozik, ezzel a fajta módszerrel nem lehet lefedni a valósszámok teljes halmazát. Másként fogalmazva: nem ábrázolható 32 vagy 64 bitenbármelyik valós szám, ezért bizonyos számok helyett csak azokat közelítő érté-keket lehet leírni.

A számok ábrázolása a memóriában binárisan történik, mégpedig úgy, hogy a

valós számot a krm képlettel írják le, ahol m (mantissza), és k (karakterisz-tika) kettes számrendszerbeli számok, az r (radix) pedig az ábrázolás számrend-szere, ami ebben az esetben mindig 2 értéket vesz fel. A lebegőpontos számábrá-zolás részleteit az IEEE-754-es szabvány4 írja le.

Karakteres: Egy darab karakter eltárolására használható. Leggyakrabban 8, 16vagy 32 biten történik a karakter tárolása a memóriában. Arra vonatkozóan, hogya karaktert hogyan kell eltárolni a memóriában, különféle karakterkódolási mód-szereket dolgoztak ki. Kezdetben az ASCII5 és EBCDIC kódolások voltak elter-jedtek. Ezek 7/8 bites számábrázolást használtak, aminek az volt a hátránya,hogy csak 128/256 különféle karaktert lehetett megkülönböztetni. Ez bizonyosnyelvek esetén nem elégséges, mivel például a kínai ABC-ben több mint 4000betűt lehet megkülönböztetni Ennek a problémának a megoldására dolgozták ki aUnicode szabványt, ami már 16 illetve 32 bites memóriaterületen kódol egy ka-raktert, ezzel így sokkal nagyobb ABC-k fedhetők le.

Logikai: Logikai (igaz/hamis) értékek tárolására alkalmas típus. Leggyakrabban1, 8, 16, 32, 64 bites memóriaterületen ábrázolják. Ha belegondolunk, bővenelég lenne az 1 bites ábrázolás, mivel 1 biten el lehet tárolni egy 0-át vagy 1-et,és ezek segítségével pedig kódolható az IGAZ illetve HAMIS érték. Pl.:IGAZ=1, HAMIS=0 kódolás lehetséges. Azonban a legtöbb processzor esetében8 bitnél (byte) kisebb memóriaterületet nem lehet elérni külön, ezért a logikaiadat inkább nagyobb memóriaterületeken tárolódik. Ugyanakkor a 8 bites terüle-tet már szinte bármelyik processzor el tudja érni, de általában sokkal hatéko-nyabban (gyorsabban) tud nagyobb memória egységeket kezelni (pl.: 32 vagy 64bites területet). Emiatt sebesség optimalizálási célokból a logikai értékek gyak-ran ilyen nagyobb memóriablokkokban helyezkednek el.

Az összetett típusok közé tartoznak a következők:

Tömb: A tömb felfogható úgy, mint egyszerű típusú változók sorozata. Ekkor atömb a memóriában úgy helyezkedik el, hogy a memória egymást követő blokk-jaiba elhelyeződnek az egyszerű típusú változók. Azt, hogy hány elem található atömbben, a tömb méretének szokás nevezni. A tömbökkel kapcsolatban fontos,hogy minden egyes elemét külön lehet használni, azáltal, hogy hivatkozunk rá.Ezt a hivatkozást „indexelésnek” nevezik. Az indexelés célja, hogy egy adottsorszámú (indexű) tömb elem értékét kiolvassuk, vagy módosítsuk. Az indexeléssorán csak olyan elemre hivatkozhatunk, ami létezik a tömbben. Ha példáulolyan sorszámú elemet akarunk a tömbből kiolvasni, ami nem is létezik benne,akkor hiba történik. Az ilyen hibákat túlindexelésnek nevezik.

4 Ezzel bővebben az „Informatika elméleti alapjai”, illetve később a „Számítógép architektúrák” nevű tantárgyfoglalkozik.5 ASCII = American Standard Code for Information Interchange.

Page 13: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

13

Sztring: A sztring vagy karakterfüzér lényegében egy speciális tömb, ami karak-tereket tartalmaz. A sztringek sajátossága tehát, hogy több karaktert tartalmaz-hatnak, így szöveges információk tárolására alkalmasak, illetve a szövegek keze-lésével kapcsolatos műveletek elvégzését is egyszerűsíti. Szinte minden prog-ramnyelvben vannak olyan segédszolgáltatások, amik a sztring típusú adatok ke-zelését egyszerűsítik le. Ilyen segédszolgáltatások lehetnek például: a sztringekösszefűzése (konkatenáció), másolása, rész karaktersorozatok keresése, stb.

Saját típusok: A program fejlesztése során készíthetünk saját típusokat. Ilyeneka felsorolás típusok (enumeráció), struktúrák, és osztályok. Ezekről később rész-letesebben szó esik.

Page 14: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

2 A C# programozási nyelv áttekintése

2.1 A nyelv szintaktikájának alapjai

2.1.1 A „Hello World” program áttekintése

2.1.2 Azonosító elnevezési konvenciók

2.1.3 Adattípusok a C# nyelvben

2.1.4 Kifejezések

Gyakorló feladat (1)Tegyük fel, hogy beírjuk a C# forráskódunkba a következő kódsorokat:

Láthatjuk, hogy az eredmény nevű segédváltozó kezdőértékül egy komplex kifejezéstkapott. Ahhoz, hogy meg tudjuk határozni, hogy valójában milyen értéket fog tartalmazni azeredmény változó, azt kell megértenünk, hogy a kifejezés kiértékelése hogy történik.

Az órán szó esett arról, hogy minden egyes műveleti jelhez (operátorhoz) tartozik vala-milyen precedencia érték. Ez befolyásolja azt, hogy milyen sorrendben kell a kiértékelést el-végezni. Az órán vetített diasorban láthattuk, hogy az egyes operátorokhoz milyenprecedencia szintek tartoztak. Ezeket célszerű ismerni, mert másképp nem tudnánk hogy azeredmény segédváltozóba milyen érték is kerül majd. Ebben a példában a következő operáto-rokat használtuk fel: ++ (postfixes6), ++(prefixes7), -- (prefixes), +, -, *. A diasorban megnéz-hető, hogy melyiknek milyen a precedencia szintje. Ez alapján már végig lehet gondolni, hogya műveletek milyen sorrendben hajtódnak végre. A kifejezés kiértékelése a precedencia szin-tek figyelembe vételével az alábbi sorrendben történik:

Jól látmíg vé

6 Postfizés kiér-- operáel.7 Prefix

int a = 5, b = 1, c = 2;int eredmény = a++ * ++b - 2 * c + --a;

a++; // 1. precedencia szint (a=6 lesz)

++b; // 2. precedencia szint (b=2 lesz)--a; // 2. precedencia szint (a=5 lesz)

a * b // 3. precedencia szint (5 * 2 = 10)2 * c // 3. precedencia szint (2 * 2 = 4)

10 - 4 // 4. precedencia szint (10 - 4 = 6)6 + 5 // 4. precedencia szint (6 + 5 = 11)11

14

ható, hogy minden egyes kifejezés kiértékelésével közelebb jutottunk az eredményhez,gül meg nem az eredményt, ami itt 11 volt.

xes inkrementálásnak nevezzük azt, mikor a ++ operátort egy kifejezés UTÁN írjuk le. Ilyenkor a kifeje-tékelése után növelődik a kifejezés értéke 1-el. Ugyanígy postfixes dekrementálásnak nevezzük, mikor atort a kifejezés után írjuk. Ez utóbbi esetében a kifejezés kiértékelése után csökken a kifejezés értéke 1-

es inkrementálásnak nevezzük azt, mikor a ++ operátort egy kifejezés ELÉ írjuk le.

Page 15: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

Ha kicsit másként tekintünk a kifejezés kiértékelésre, látható, hogy minden beágyazottkifejezés kiértékelése után kicsit egyszerűsödik az egész komplex kifejezés. Például az 1. és2. precedenciájú kifejezések kiértékelése után eltüntethetők már a postfixes és prefixes, a 2.precedencia szint kiértékelése után eltüntethetők a szorzások, osztások, és így tovább. Tehát ateljes kifejezés egyre egyszerűbb lesz. Ha ezt illusztrálni szeretnénk az egyes lépések utánolyan, mintha az alábbi kifejezéseket írtuk volna fel:8

További sajátossága a kifejezés kiértékeléseknek, amit még megfigyelhetünk az illuszt-rációban, hogy ha több ugyanolyan precedenciaszintű kifejezés is szerepel, akkor azok kiérté-kelése mindig balról-jobbra történik. Tehát például először a ++b, majd a –a hajtódik végre,pedig mindkettő kifejezés ugyanolyan precedenciájú. Ugyanez megfigyelhető a szorzásoknálilletve az összeadásnál és kivonásnál

Gyakorló feladat (2)A második példában azt vizsgáljuk meg, hogy a zárójelezés hogyan változtatja meg a ki-

fejezés kiértékelési sorrendet. Induljunk ki az előző példából, de most helyezzünk el benneegy zárójelezést a következő módon:

Egy ilyen zárójelezés azt fogja okozni, hogy teljesen más eredmény keletkezik, mivel aműveleteket is más sorrendben kell végrehajtani (ahogy azt már megszokhattuk a matemati-kában). Ilyenkor, ha felírjuk, hogy a kifejezés hogyan változott, a következő eredményhezjutunk:

8 Mindedött, a t

int a = 5, b = 1, c = 2;int eredmény = a++ * (++b – 2) * c + --a;

eredmény = a++ * ++b - 2 * c + --a; // a = 5, b = 1, c = 2 Kezdő állapot.eredmény = a * ++b - 2 * c + --a; // a = 6, b = 1, c = 2eredmény = a * b - 2 * c + --a; // a = 6, b = 2, c = 2eredmény = a * b - 2 * c + a; // a = 5, b = 2, c = 2eredmény = 10 - 2 * c + a; // a = 5, b = 2, c = 2eredmény = 10 - 4 + a; // a = 5, b = 2, c = 2eredmény = 6 + a; // a = 5, b = 2, c = 2eredmény = 6 + 5; // a = 5, b = 2, c = 2eredmény = 11; // a = 5, b = 2, c = 2

eredmény = a++ * (++b – 2) * c + --a; // a = 5, b = 1, c = 2 Kezdő állapot.eredmény = a * (++b – 2) * c + --a; // a = 6, b = 1, c = 2eredmény = a * (b – 2) * c + --a; // a = 6, b = 2, c = 2eredmény = a * (b – 2) * c + a; // a = 5, b = 2, c = 2eredmény = a * (2 – 2) * c + a; // a = 5, b = 2, c = 2eredmény = a * 0 * c + a; // a = 5, b = 2, c = 2eredmény = 0 * c + a; // a = 5, b = 2, c = 2eredmény = 0 + a; // a = 5, b = 2, c = 2eredmény = 0 + 5; // a = 5, b = 2, c = 2eredmény = 5; // a = 5, b = 2, c = 2

15

n sorban vastag, piros betűkkel jelzem, hogy épp melyik kifejezés értékelődik ki. Mivel ez kiértékelő-ovábbi sorokban már nem jelenik meg, csak a kiértékelés eredménye.

Page 16: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

Gyakorló feladat (3)

Végül nézzünk át egy másik gyakorló feladatot a kifejezések kiértékelésére. Tehát adot-tak a következő kódsorok:

Ilyenkor a kódsorok kiértékelése az előzőkben megtárgyaltak alapján a következő:

Továb

Akiértékeredmtetszől

2.1.5

2.1.6

2.2

2.2.1

Aszüljöfordítóegyetltóprogdíthatj

AEgyelő

int a = 5, b = 1, c = 2;int eredmény = a++ * ++b % (2 * c++ - --a);

eredmény = a++ * ++b % (2 * c++ - --a); // a = 5, b = 1, c = 2eredmény = a * ++b % (2 * c++ - --a); // a = 6, b = 1, c = 2eredmény = a * ++b % (2 * c - --a); // a = 6, b = 1, c = 3eredmény = a * b % (2 * c - --a); // a = 6, b = 2, c = 3eredmény = a * b % (2 * c - a); // a = 5, b = 2, c = 3eredmény = 10 % (2 * c - a); // a = 5, b = 2, c = 3eredmény = 10 % (6 - a); // a = 5, b = 2, c = 3eredmény = 10 % 1; // a = 5, b = 2, c = 3eredmény = 0; // a = 5, b = 2, c = 3

16

bi gyakorló feladatok

z eddig bemutatott feladatok alapján mindenki egyszerűen gyakorolhatja a kifejezéselések szabályait, ha az előzőkben tárgyalt kódsorokat beírja egy C# forráskódba, és az

ény változó értékét kiíratja a képernyőre. Ezzel könnyen le lehet ellenőrizni, hogy egyeges kifejezés értéke valóban az-e amire mi gondoltunk.

Utasítások

Vezérlési szerkezetek a C# nyelvben

Forráskód fordítása parancssorból

Telepítés és beállítások

hhoz, hogy az általunk készített C# forráskódból (source code) futtatható állomány ké-n, a forráskódot le kell fordítani. A fordítás művelet röviden annyit jelent, hogy egy ún.program (compiler) feldolgozza az általunk leírt forráskódot, és amennyiben a nyelv

en szabályát sem sértettük meg (azaz szintaktikailag helyes a forráskód), akkor a fordí-ram létrehozza futtatható programot (.exe, .dll). Ezután a futtatható programot el is in-uk, és így végrehajthatók azok a forrássorok, amiket a forráskódban leírtunk.

hhoz, hogy a C# nyelven megírt forráskódot lefordíthassuk, sokféle módszer létezik.re a Windows parancssorból történő fordítást tárgyaljuk, de majd látni fogjuk később,

class Program{

static void Main(string[] args){

int a = 5, b = 1, c = 2;int eredmény = a++ * ++b - 2 * c + --a;

System.Console.WriteLine(eredmény);}

}

Page 17: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

17

hogy létezik egyszerűbb módja is a fordításnak, ha a Microsoft Visual Studio 2008 fejlesztő-rendszert használjuk például. A C# nyelv fordítóprogramja a .NET Framework keretrendszer-ben található, ezért, ahhoz, hogy a fordítás elvégezhető legyen, először a .NET Frameworkvalamelyik verzióját kell feltelepítenünk. Célszerű a 3.5-ös verziót telepíteni, mert órán is ezthasználjuk, de az általunk készített forráskódok ugyanúgy fordíthatók régebbi verziókkal is,hasonló módon.

Először töltsük le tehát a .NET Framework 3.5 keretrendszer telepítőjét, és ezt futtassuk.Ekkor már fel is települt a C# Compiler (CSC.exe) program. Ahhoz, hogy ezt a parancssorbólel lehessen érni, azt is meg kell mondanunk a rendszer számára, hogy ez a program melyikkönyvtárban található. Ezt úgy lehet megoldani, ha a PATH nevű környezeti változó értékétbeállítjuk arra a könyvtárra, amiben a CSC.exe található. A környezeti változó beállításáratöbbféle mód van. Az elsőként bemutatott módszer előnye, hogy csak egyszer kell elvégezni,és a beállításunk megmarad, később a rendszer el tudja majd érni így a CSC.exe programot.Viszont ez a fajta beállítás nem kellő körültekintés esetén a rendszer meghibásodásához ve-zethet, illetve bizonyos esetekben előfordulhat, hogy a környezeti változó beállításához azadott felhasználónak nincsen joga9. Ha viszont a jogosultság biztosítva van, a következő lépé-sekkel végezhető el a beállítás:

Kattintsunk a Sajátgép ikonon jobb klikkel, majd válasszuk ki a Tulajdonságokmenüpontot. A feljövő ablakon kattintsunk a Speciális fülre, és nyomjuk meg aKörnyezeti változók gombot.

9 Ezért ezt a módszert mindenki a saját felelősségére végezze el!

Page 18: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

18

2. ábra: A környezeti változó beállításának lépései.

Ha a gombot megnyomtuk egy új ablak jön elő, ahol ki kell választani az alsólistából (Rendszerváltozók) a Path nevű változót, majd klikkeljünk a Szerkesztésgombra. Erre feljön egy szerkesztő ablak, ahogy a képen látható.

Itt a Változó értéke mezőhöz adjuk hozzá a következő elérési útvonalat:

%WINDIR%\Microsoft.NET\Framework\v3.5\ fontos, hogy ne írjukfelül a környezeti változó értékét, mert az a rendszer meghibásodásához vezet-het, tehát ezt az elérési útvonalat fűzzük hozzá a változó értékéhez, mégpedig

úgy, hogy a korábban beállított érték után írjunk egy ; karaktert. Ez jelzi, hogyegy új elérési útvonalat kezdtünk. Tehát a képen látható módon kell a változótartalmát módosítani. Végül minden ablakon klikkeljünk az OK gombra, és kész.

A környezeti változó beállítás másik módja, ha a beállítást parancssorból végezzük el.Ennek hátránya, hogy minden esetben, ha egy újabb parancssor ablakot nyitunk, a beállítástújra el kell végezni, de viszont ez nincs jogosultsághoz kötve, és a rendszer meghibásodásasem következhet be. A teendő ilyenkor, hogy nyissunk egy parancssor ablakot. Ezt megtehet-jük, ha a Start menü / Futtatás menüpontot válasszuk, és beírjuk, hogy cmd.

Ennek hatására feljön a képen látható ablak, ahová be kell írni az alábbi parancssori uta-

sítást SET PATH=%WINDIR%\Microsoft.NET\Framework\v3.5\. Ezzel akörnyezeti változó beállítása meg is történt, de ha bezárjuk a parancssor ablakot, a beállításelveszik, ezért újra ki kell adni az utasítást.

2.2.2 A forráskód fordítása

Miután a .NET Framework és így a CSC.exe felkerült a gépünkre, valamint a Path kör-nyezeti változó is megfelelően be lett állítva, elkezdhetjük a fordítást. Ehhez először a C#forráskódot kell egy egyszerű szövegszerkesztőbe (Notepad) beírni, majd elmenteni valami-lyen .cs kiterjesztéső szövegfájlba. A .cs kiterjesztés a C# (C Sharp) kifejezésre utal.

Page 19: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

19

Ha ez megvan, akkor nyissunk egy parancssori ablakot, és navigáljunk arra a helyre,ahová a forráskódot tartalmazó fájlt mentettük (célszerű könnyen elérhető helyre menteni,hogy egyszerűbben odataláljunk… pl.: D:\hello.cs). Ha abban a könyvtárban vagyunk, ahová

mentettünk, be kell írni a parancssorba, hogy csc hello.cs, illetve a hello.cs helyett a forrás-kódot tartalmazó .cs fájl nevét.

Ennek hatására, ha sikeresen megtörtént a fordítás, egy hasonló üzenetet láthatunk, minta fenti képen, és létrejött egy hello.exe programfájl is. Ahhoz, hogy a hello.exe programotfuttassuk, be kell gépelni, hogy hello, és ekkor kiírja a program azt a sztringet, amit aSystem.Console.WriteLine metódus paraméterében megadtunk.

Page 20: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

20

3 Gyakorló feladatok

3.1 ElsőZH-ra1. Készítsen programot, ami bekéri a felhasználótól a nevét, és attól függően, hogy

milyen nevet adott meg, más módon üdvözölje! Ha a beírt név „Géza”, akkor írjaki, hogy „Szia Géza!”, ellenkező esetben a „Jó napot” üzenettel köszöntse a ne-vet.

2. Készítsen programot, ami bekér a felhasználótól egy valós számot, majd kiírja aképernyőre a megadott szám négyzetét, és négyzetgyökét!

3. Készítsen programot, ami bekéri a felhasználótól egy háromszög 3 oldalánakhosszát (a, b, c) egy-egy valós típusú értékként, majd kiírja az oldalhosszakkalmegadott háromszög kerületét, illetve területét. A program vizsgálja meg, hogy amegadott oldalhosszak valóban háromszöget alkotnak-e, és ha nem, írjon ki együzenetet erről!

4. Készítsen egy programot, ami kiírja képernyőre az 1-10-ig tartó számok szorzó-tábláját. A kiírás az alábbihoz hasonló módon történjen:

1 2 3 4 5 6 7 8 9 10

1 1 2 3 4 5 6 7 8 9 10

2 2 4 6 8 10 12 14 16 18 20

3 3 6 9 12 15 18 21 24 27 30

4 4 8 12 16 20 24 28 32 36 40

5 5 10 15 20 25 30 35 40 45 50

6 6 12 18 24 30 36 42 48 54 60

7 7 14 21 28 35 42 49 56 63 70

8 8 16 24 32 40 48 56 64 72 80

9 9 18 27 36 45 54 63 72 81 90

10 10 20 30 40 50 60 70 80 90 100

5. Módosítsa az 4. feladatban megadott programot, hogy tetszőleges X-Y számtar-tományra képes legyen elkészíteni a szorzótáblát.

6. Készítse el az első órán vetített diasorban szereplő, másodfokú egyenlet megoldóalgoritmust megvalósító C# programot. Kezelje le azokat az eseteket is, amikor amegadott inputok (a, b, c) azonosságot illetve egyenlőtlenséget írnak le, ilyenesetekben írjon ki üzeneteket. Emellett figyelje, hogy a másodfokú kifejezés 1vagy 2 eredményt, esetleg komplex számot adna eredményül, és ennek megfele-lően számoljon! (Segítség: Az algoritmus struktogramja az első órán vetített dia-sorban megtalálható)

7. Készítsen programot, ami inputként bekér a felhasználótól egy webcímet (pl.:www.index.hu, www.nasa.com, stb.), és az így megadott sztring vizsgálatávaleldönti, hogy a weboldal magyar, angol, német, francia, spanyol, vagy orosznyelvű-e. Ha egyik sem, akkor írja ki, hogy ismeretlen nyelvű oldal, egyébkéntpedig azt, hogy milyen nyelvű. (Megjegyzés: A svájci, és a német oldal is németnyelvű, illetve az angol, amerikai, és ausztrál oldalak is angol nyelvűnek tekint-hetők.)

8. Készítsen programot, ami bekér a felhasználótól egy műveleti jelet (+,-,*,/) illet-ve két darab valós számot, majd a két valós számmal elvégzi a műveleti jelnek

Page 21: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

21

megfelelő műveletet, és az eredményt kiírja képernyőre! A program addig fussonciklikusan, amíg mindkét számot (operandust), és a műveleti jelet is megadták!Ha bármelyiket ezek közül nem adta meg a felhasználó, a program lépjen ki.

3.2 Második ZH-ra

1. Készítsen egy programot, ami egy 10x10-es szögletes tömbben eltárolja a szor-zótáblát! A megoldás hasonlóképpen történik mint a 4 feladat esetében. A tömbtartalmát a feltöltés után írja ki a képernyőre soronként. Ha jól készítette el aprogramot, ezeket a számokat kell tartalmaznia a kétdimenziós tömbnek.

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14 16 18 20

3 6 9 12 15 18 21 24 27 30

4 8 12 16 20 24 28 32 36 40

5 10 15 20 25 30 35 40 45 50

6 12 18 24 30 36 42 48 54 60

7 14 21 28 35 42 49 56 63 70

8 16 24 32 40 48 56 64 72 80

9 18 27 36 45 54 63 72 81 90

10 20 30 40 50 60 70 80 90 100

2. Készítsen egy programot, ami egy szögletes tömb (mátrix) tartalmát a főátlóratükrözi, azaz a tömböt transzponálja. Az algoritmusnak négyzetes mátrixokrakell működni, tehát olyan kétdimenziós tömbökre, ahol a sorok, és oszlopokszáma megegyezik (pl.: 3x3). A tömb tartalmát a felhasználótól olvassa be, vagyvéletlen számokkal töltse fel. 10 Az alábbi ábra illusztrálja, hogy ha a bal oldalonmegadott mátrix az input, akkor a programnak milyen kimenetet kell előállítani.A vastag zöld betűtípussal jelzett elemek vannak a főátlóban, ezek változatlanhelyen jelennek meg a kimenetben, a többi tömbelem helye pedig a főátlóra néz-ve tükröződik.

2 3 1 2 5 7

5 1 0 → 3 1 4

7 4 2 1 0 2

3. Készítsen egy programot, amivel egy 10 elemű tömbben eltárolja az 1-től 10-igterjedő számok faktoriálisait11. Tehát a tömb tartalma az alábbi legyen:

1! 2! 3! 4! 5! 6! 7! 8! 9! 10!

4. Készítsen programot, ami beolvas egész számokat addig, amíg negatív számotnem adnak meg. Számítsa ki a beírt számok közül a párosaknak az átlagát, és azeredményt írja ki!

5. Készítsen programot, ami beolvas egész számokat addig, amíg negatív számotnem adnak meg, de legfeljebb csak 10 elem beolvasását engedje meg! Ezutánszámítsa ki a megadott számok átlagát, de a számításból a legnagyobb és legki-sebb értékű számot hagyja ki. Például, ha az 1, 2, 3, 4 számokat adta meg a fel-

10 A véletlen számok generálásáról a 6. óráig még nem volt szó, de kis utánajárással kideríthető, hogyan végez-hető el. Röviden: A „Random” nevű osztályt kell használni, ami a System névtérben található. Ezt nemsokáraórán is vesszük.11 Egy N szám faktoriálisának jele: N!, kiszámításának módja pedig: N! = 1 * 2 * 3 * … * N

Page 22: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

22

használó, a kapott átlagnak 2.5-nek kell lenni, mivel az 1-et és a 4-et kihagytukaz átlagolásból.

6. Kérjünk be 5 db egész számot (pozitívot és negatívot is meg lehet adni). A szá-mokat tároljuk el egy tömbben, majd vegyünk fel egy másik tömböt is, amiben abeírt számok előjeleit fogjuk eltárolni. Az előjelek tárolásához készítsünk egy sa-ját felsorolás típus. A típus neve legyen Előjel. A második tömbben tehát ilyenElőjel típusú értékeket fogunk eltárolni, attól függően, hogy az eredeti tömbmegfelelő indexű eleme éppen negatív, pozitív vagy nulla volt. Állítsuk be azelőjel tömb tartalmát értelem szerűen, és végül írassuk ki az eredeti, számokat tá-roló tömb tartalmát, és az előjeleket tároló tömb tartalmát egymás alá, egy-egysorba.

Szám tömb: -1 5 0 2 -3

Előjel tömb: Előjel.Negatív Előjel.Pozitív Előjel.Nulla Előjel.Pozitív Előjel.Negatív

7. Készítsen programot, ami egy előre megadott tömb elemeit képes növekvő sor-rendbe rendezni egy tetszőlegesen választott módszerrel.12

8. Töltsünk fel egy 5 elemű tömböt a felhasználó által megadott számokkal, de csakolyan számok beírását fogadjuk el, ahol a megadott szám gyökének egészrészeosztható 5-tel. Ez alapján elfogadható érték például a 27, mivel √27 = 5,196, és5,196 egészrésze pedig 5, és ez szemmel láthatóan osztható 5-tel.

12 Ne használja az System.Array.Sort() metódust a rendezéshez.

Page 23: Nagy Attila - Objektumorientált-programozás segédlbmfnik.hu/nagyy/nagya_OOP_segedlet.pdf · 2009. 10. 9. · Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009

Budapesti Műszaki főiskola - Neumann János Informatikai Kar, 2009 Írta: Nagy Attila

Objektumorientált-programozás segédlet

23

4 Hivatkozások[1] Wikipédia.org, Neumann-elvek, http://hu.wikipedia.org/wiki/Neumann-elvek , látogatva: 2009-09-22