• Nem Talált Eredményt

Összetett adattípusok

1.1.6. Objektumok, objektumtípusok

Az objektum szót már használtuk (pl. a Debug objektum kapcsán), de még nem beszéltünk arról, hogy pontosan mit jelent, mit takar az objektum elnevezés az informatikában.

Objektumon adatok és a rajtuk értelmezett tevékenységek egy logikailag összefügg˝o egységét értjük. Az objektum (hasonlóan, mint a tömb) egy gyakran és általánosan használt szó, ami jelenthet adatot (egy konkrét objektumpéldányt), változót (ami tárolja és elérhet˝ové teszi az objektum adatait és tevékenységeit), valamint típust is (az objektum típusát, amely definiálja az objektum adatainak típusát és az objektum tevékenységeit).

Az objektumok tevékenységeit definiáló szubrutinokat metódusoknak (methods), az objektumok típusát osztályoknak (class) nevezzük. Az objektumok adataihoz általában tulajdonságok (properties) segítségével férhetünk hozzá, amelyek védik az adatok helyességét (lásd 1.2.2.3. fejezet).

Az objektumok azon metódusait, amelyek valamilyeneseménybekövetkezésekor (pl. egy nyomógomb esetén a nyomógomb feletti kattintás) aktivizálódnak,eseménykezel˝okneknevezzük. Az események általában valamilyen felhasználói interakció eredményeként következnek be, de más futó folyamatok is kiválthatják az egyes események bekövetkezését (pl. meghívunk egy eseménykezel˝ot).

Megjegyzés: A VBA megengedi az osztályok definiálását, de mi csak a „készen kapott” osztályokat fogjuk használni.

Önellen ˝orzés

1.Az alábbi állítások közül melyek igazak az összetett adattípusokkal kapcsolatosan?

A tömbök indexeinek alsó határa 0 vagy 1.

Egy tömb egy elemének kiválasztásához pontosan annyi darab index szükséges, mint ahány dimenziós az adott tömb.

A dinamikus tömbök elemtípusa aReDimutasítással megváltoztatható.

Egy rekord mez˝oi lehetnek tömbök is és rekordok is.

Egy rekordváltozó deklarálása aTypekulcsszóval kezd˝odik.

Azonos típusú rekordváltozók között megengedett az értékadás.

AWithutasítással a rekordváltozóra való hivatkozás rövidíthet˝o.

2.Az alábbi állítások közül melyek igazak az objektumokkal kapcsolatosan?

Objektumon adatok egy halmazát értjük.

A szubrutinok egyben metódusok is.

A metódusok egyben szubrutinok is.

Az eseménykezel˝ok egyben metódusok is.

A metódusok egyben eseménykezel˝ok is.

Az objektumpéldányokat osztályoknak nevezzük.

Az osztály egyben típus is.

3.Programozási feladatok

Készítsünk Visual Basic szubrutinokat a fejezetben található feladatokra! A megoldások elkészítésére az alábbi lehet˝oségek közül választhatunk, célszer˝u mindkét megoldást kipróbálni, elvégezni!

A megoldás megtekintéséhez kattintson ide!

4.Darabszám: Határozzuk meg egy adott [a, b] intervallumba (a<bpozitív egészek) es˝o, adottcszámmal osztható számok darabszámát! (Tipp: Egy darabszám változót állítsunk 0-ra, majd egy ciklussal vizsgáljuk meg az [a, b] intervallumba es˝o egész számokat! Ha a vizsgált szám oszthatóc-vel, akkor növeljünk meg eggyel a darabszám változó értékét!)

5.Összeg: Oldjuk meg az el˝oz˝o feladatot úgy, hogy a feltételt teljesít˝o számok összegét is meghatározzuk!

(Tipp: Az összeget tartalmazó változót is állítsuk 0-ra, majd amikor a darabszámot eggyel növeljük, akkor az összeget gy˝ujt˝o változót növeljük meg a vizsgált számmal!)

6.Minimum: Adott egy nem üres sztring. Határozzuk meg a sztring legkisebb ASCII kódú karakterét! (Tipp:

Jegyezzük meg a sztring els˝o karakterét mint eredményt, majd vizsgáljuk meg a sztring többi karakterét! Ha valamelyik vizsgált karakter ASCII kódja kisebb, mint az addigi eredmény ASCII kódja, akkor módosítsuk az eredményt, azaz jegyezzük meg a vizsgált karaktert eredményként!)

7.Maximum: Adott egy nem üres sztring. Határozzuk meg a sztring legnagyobb ASCII kódú karakterét!

(Tipp: Az el˝oz˝o minimumkereséshez hasonlóan végezzük, csak most akkor módosítsuk az eredményt, ha nagyobbat (nagyobb ASCII kódú karaktert) találunk!)

8.Átlag: Adott N db szám, mint input adat. Kérjük be ˝oket, és írjuk ki az átlagnál nagyobb adatokat! Az adatok száma is input adat, értéke legfeljebb 10. (Tipp: Az adatok tárolására használjunk tömböt! El˝obb határozzuk meg az adatok összegét (lásd Összeg), azután egy N-nel való osztással az átlagot, majd egy ciklussal írjuk ki az átlagnál nagyobb elemeket!)

9.Döntsük el egy pozitív egészn számról, hogy prímszám-e vagy sem! Egy szám prím, ha 1-en és önmagán kívül nincs más osztója. (Tipp: Azn<=2 esetek külön kezelend˝ok, (1 nem prím, 2 prím) egyébként meg, ha a számnak nincs osztója a [2, Int(Sqr(n))] intervallumban, akkor a szám „prím”, egyébként „nem”! A feladat megoldását a 4. lecke tartalmazza.)

10.Az el˝oz˝o feladat segítségével írjuk ki egy adott [a, b] intervallumba (a < b pozitív egészek) es˝o összes prímszámot! (Tipp: Egy For ciklus segítségével lépkedjünk végig az [a, b] intervallumba es˝o egész számokon, az el˝oz˝o algoritmussal döntsük el azt, hogy az adott szám prímszám-e vagy sem, és ha az, akkor írjuk ki az adott prímszámot!)

11.Adott egy sztring, amelyben egy legalább kétjegy˝u, pozitív egész szám van. A szám nagy is lehet, akár 100 számjegyb˝ol álló is (ezért is van sztringben megadva). Mondjuk meg, hogy a szám osztható-e 2-vel,

3-mal, 4-gyel, 5-tel! (Tipp: A szám (a nagysága miatt) számként nem használható (azaz nem végezhetünk vele numerikus m˝uveletet), így a megoldáshoz a szám megfelel˝o számjegyeit kell megvizsgálni! A 2-vel való oszthatósághoz az kell, hogy az utolsó számjegye páros legyen, a 3-mal való oszthatósághoz az, hogy a szám számjegyeinek összege osztható legyen 3-mal, a 4-gyel való oszthatósághoz az, hogy a két utolsó számjegyb˝ol álló szám osztható legyen 4-gyel, az 5-tel való oszthatósághoz az utolsó számjegy 0 vagy 5 volta szükséges. Egycszámjegykarakter számértékét az Asc(c)-48 kifejezés adja.)

12.Generáljunk egy szabályos 5-ös lottószelvényt, azaz 5 db különböz˝o egész számot az [1, 90] intervallumból!

(Tipp: A lottószámokat egy (5 elem˝u) tömbbe tegyük! Annak eldöntésére, hogy egy számot ismételten generáltuk-e vagy sem, használjunk keres˝ociklust (lásd 1.2.2.8. fejezet)!)

13.Adott egy pozitív egész szám, mint egy euróban kifizetend˝o pénzösszeg. Fizessük ki a legkevesebb címlet felhasználásával! A felhasználható címletek: 500, 200, 100, 50, 20, 10, 5, 2, 1.

Pl. 1243→500: 2db, 200: 1db, 20: 2 db, 2: 1 db, 1: 1 db

(Tipp: Az egyes címleteket tegyük egy (9 elem˝u) tömbbe nagyság szerint csökken˝o sorrendben, és az összeg kifizetésekor ilyen sorrendben vegyük az egyes címleteket, azaz el˝oször a legnagyobb címlettel (500) kezdjünk, és a legkisebbel (1) fejezzük be! Egy adott címlettel való kifizetésnél egész osztást végezzünk, a hányados az adott címlet darabszámát adja, míg a maradék a további címletekkel kifizetend˝o összeget!) 14.Egy kártyajátékot 52 lapos kártyával játszanak. Készítsünk véletlen leosztást N (N<=4, input adat)

játékosnak úgy, hogy minden játékos M (M<=13, input adat) db lapot kap! A lapokat a sorszámukkal azonosítsuk, egy lapot csak egyszer osszunk ki, az eredmény egyN×M-es mátrix legyen! (Tipp:Használjunk egy 52 elem˝u logikai tömböt az egyes lapok kiosztottságának adminisztrálására! Kezdetben minden elem legyen hamis (False), hiszen még nem osztottunk ki egyetlen lapot sem! A véletlenszer˝u osztást játékosonként, azon belül laponként haladva végezzük két, egymásba ágyazott For ciklussal! Egy adott játékos adott lapjának generálását egy hátultesztel˝o ciklussal végezzük, mert csak olyan lap generálható, amelyik még nincs kiosztva! Ha egy lapot kiosztunk (betesszük a lap sorszámát az eredménymátrixba), akkor a lap kiosztottságát állítsuk igazra (True)!)

4. LECKE