A C# nyelv programozási alapjai Gyakorlati feladatsor oktatási segédanyag, mely a
Társadalmi Megújulás Operatív Program Határon átnyúló együttműködés a szakképzés és a felnőttképzés területén c. pályázati felhívás keretében megvalósított Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
2013.
A C# nyelv programozási alapjai Gyakorlati feladatsor 1
Tartalomjegyzék 1. Bevezető ................................................................................2 2. A .NET Framework alapjai .........................................................3 3. A Visual Studio ........................................................................5 4. A C# nyelv fundamentumai.......................................................7 5. Ciklusok, feltételes utasítások ...................................................9 6. Tömbök ................................................................................ 13 7. Metódusok ............................................................................ 16 8. Osztályok ............................................................................. 19 9. Struktúrák ............................................................................ 22 10. Gyűjtemények ..................................................................... 24 11. Típusos gyűjtemények, generikusok ....................................... 26 12. Fájlkezelés .......................................................................... 28 13. Kivételkezelés...................................................................... 31
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 2
1. Bevezető Ez a gyakorlati feladatsor a C# programozási alapjai oktatási segédanyaghoz készült. Olyan elméleti és gyakorlati kérdésekkel igyekszik segíteni az olvasó tájékozódását és programozási gyakorlatát, ami ebben az anyagban elhangzik. A feladatok egy részénél a megoldáshoz segítséget is adunk a könnyebb kivitelezés érdekében. A feladatok egy másik részében pedig hibák nyomára kell bukkannunk, vagy éppen kitalálni, mit csinál az adott algoritmus. Reméljük érdekesebbé és színesebbé teszi a Kedves Olvasó ismerkedését ezzel a korszerű programozási nyelvvel ez a kis feladatgyűjtemény.
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 3
2. A .NET Framework alapjai 1. Mit jelent a framework kifejezés? 2. Hogyan támogatja a .NET Framework a platformsemlegességet? 3. Mikor jelent meg az első hivatalos változat a .NET Frameworkből? 4. Mit jelent a közös nyelvi futtató környezet (CLR)? 5. Hasonlítsd össze a CLR-t és a JAVA alatt elérhető JVM-et! Miben hasonlítanak, miben különböznek egymástól? 6. Mi a jelentősége a Common Language Specification-nek (CLS)? 7. Sorold fel az alapvető típusokat a nyelvben! 8. Milyen módon biztosítható a visszamenőleges kompatibilitás a korábbi változatokkal? 9. Milyen lépésekből áll a fordítás? 10. Mi az alábbi ábrában a Base Class Library jelentése? Mi a szerepe az architektúrában?
1. ábra .Net Framework Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 4
11. Mit jelent a Jitter? Milyen feladata van a futtatás során? 12. Mit jelent az Assembly? Milyen részekből áll? 13. Milyen verziójú .NET Framework van telepítve a gépeden? Szükség esetén telepítsd fel az adott verziójú Windows-hoz elérhető legfrissebb változatot! 14. Készítsd el a Helló Világ című alkalmazást, majd fordítsd le parancssorban a csc.exe segítségével!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 5
3. A Visual Studio 1. Milyen platformokra érhető el Visual Studio? 2. Milyen programozási nyelveken fejleszthetsz az általad használt Visual Studio segítségével? 3. Ismertesd a főbb projekttípusokat az eszközben! 4. Mit jelent a projekt és a solution? Hasonlítsd össze őket! 5. Milyen könyvtárszerkezet jön létre a projekt készítésekor? 6. Mi a különbség a Debug és a Release mód között? 7. Mit jelent az IntelliSense? 8. Milyen Code Snippeteket támogat a Visual Studio? Listázd ki őket! 9. Mutasd be a kiválasztott elem névtérhez kötését az eszköz segítségével! 10. Hogyan tudod a program egyes részeit gyorsan inaktiválni? 11. Milyen fejlesztést könnyítő egyéb eszközt, vagy technológiát ismersz a Visual Studio-ban? 12. Mi a szerepe a Toolbox ablaknak? 13. Kötelező-e osztályt készíteni a programunkban? 14. Mi a következő ablak szerepe a Visual Studio-ban? Hogyan lehet bekapcsolni, ha esetleg nem látszódik a fejlesztőkörnyezetben?
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 6
2. ábra Properties ablak
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 7
4. A C# nyelv fundamentumai 1. Mit jelent a Camel Case és a Pascal Case írásmód? 2. Hogyan írjuk az osztályok nevét és a saját azonosítóinkat? 3. Miért foglal 2 bájtot egyetlen karakter tárolása a .NET-ben? 4. Mi a különbség deklaráció és definíció között? 5. Mit jelent az érték típus? Mikor javasolt a használata? 6. Mit jelent a referencia típus? Miben különbözik az érték típustól? 7. Miért tartalmaznak metódusokat, tulajdonságokat az egyszerű, érték típusú változóink is? 8. Hogyan állapíthatjuk meg a létrehozott változóinkról, hogy azok érték-, vagy referencia típusúak? 9. Mit jelent a null értékű változó? Használható-e a meglévő típus kiterjesztéseként? 10. Mi az alapértelmezett típusoknak?
értékük
a
numerikus
és
a
logikai
11. Mikor hasznos a boxing használata? 12. Mit jelent a castolás? Mikor szükséges a használata? 13. Hogyan tudjuk megváltoztatni (konvertálni) adataink típusát? 14. Mit jelent a prefix inkrementálás? 15. Milyen értékei lesznek a változóinknak a következő értékadás után? Mit ír ki a program eredményül? int a = 5; int b = 10; a += --b; Console.WriteLine("'a' értéke:"+a); Console.WriteLine("'b' értéke:"+b); 16. Mi a különbség az is és az as operátorok között?
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 8
17. Sorold fel a biteltoló operátorok néhány gyakorlati hasznosítási lehetőségét! 18. A szorzás, vagy a biteltolás hajtódik végre hamarabb? Melyiknek nagyobb a precedenciája? 19. Kérjünk be egy 10-es számrendszerbeli számot, majd biteltolással számítsuk ki a 8-al való szorzatát! 20. Készíts programot, ami biteltolással számolja ki egy adott szám kettes alapú egész logaritmusát!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 9
5. Ciklusok, feltételes utasítások 1. Van-e különbség a switch-case szerkezetben a C++-hoz képest? 2. Beágyazhatók-e a feltételes utasítások? 3. Miben tér el a while és a do – while ciklusok egymástól? 4. Hol alkalmazható a foreach ciklus? 5. Melyik ciklussal váltható ki az összes többi? 6. Mi csinál a programrészlet? Kiírja-e a „Szia” szót a program, mielőtt beírnánk a nevünket?
public static void Main() { Console.Write("Üdvözöllek! Mi a keresztneved? "); Console.WriteLine("Szia " + Console.ReadLine()); Console.ReadKey(); } 7. Kérd be a felhasználó megfelelően!
nevét!
Köszöntsd
őt
a
napszaknak
8. Kérd be a felhasználó születési évét! Írasd ki az életkorát a rendszeridő segítségével (DateTime.Now.Year)! 9. Kérj be három számot és írasd ki növekvő sorban őket! Légy tekintettel arra, hogy részben, vagy egészben meg is egyezhetnek egymással! 10. Készíts programot, ami egy ember életkorát bekérve, kiírja a korának megfelelő jellemzést: 0-1: újszülött 2-6: kisgyerek 7-14: gyerek 15-17: kamasz 18-120: felnőtt Ha ezeken kívüli értéket adnak meg, jelezze „érvénytelen életkor” felirattal!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 10
11. Kérj be számokat 0 végjelig, majd írasd ki az összegüket! 12. Egy bekért szöveg szavainak első betűit alakítsuk át nagybetűkké! 13. Kérd be a víz hőmérsékletét normál légköri nyomáson! Írasd ki a halmazállapotát ennek ismeretében! 14. Kérj be egy 0-nál nagyobb természetes számot, majd írasd ki az első 10 számot, aminek osztója ez a szám! 15. Mit csinál a következő program? string szöveg = "Kis kacsa fürdik, fekete tóban."; for (int i = 0; i < szöveg.Length; i++) { for (int j = 0; j < i; j++) Console.Write(szöveg[j]); Console.WriteLine(); } Console.ReadKey(); Mit kell megváltoztatni a programban ahhoz, hogy kiírja a mondat végi pontot is? 16. Készítsünk programot, ami biteltolással kiírja 2 első 8 hatványát! 17. Váltsunk át 10-es számrendszerből számokat tetszőleges másikba! 18. Írassuk ki a prímszámokat n-ig! 19. Számoljuk ki két természetes szám legnagyobb közös osztóját! 20. Készíts átváltó programot, ami négyszögöl és négyzetméter között képes átváltani mindkét irányba, választhatóan! 1 négyszögöl ~ 3,6 négyzetméter. 21. Készíts programot, ami kiírja a bekért számról, hogy hány számjegyből áll! (10-es számrendszerben) 22. Írasd ki az aktuális dátumot (év, hónap, nap) úgy, hogy a hónap római számmal íródjon! 23. Írasd ki az aktuális évszakot a rendszeridő hónapértéke alapján!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 11
24. Kérjünk be egy mondatot, majd írassuk ki Pascal Case stílusban! (Szóközök nélkül, szóhatáron nagy kezdőbetűvel.) 25. Készítsünk programot, ami a bekért mondatról eldönti, hogy visszafelé olvasva is ugyanúgy néz-e ki (palindrom)! Ügyesebbek képesek a szóközöket figyelmen kívül hagyni! 26. Készíts programot, ami kő/papír/olló felhasználóval! A választás a Random véletlenszerűen történjen!
játékot játszik a osztály segítségével
Ehhez használd fel a következő programrészletet! public static void Main() { Random véletlenszám = new Random(); //Véletlenszerű, nemnegatív egész érték kiírása Console.WriteLine(véletlenszám.Next()); //Véletlenszerű érték 0-99 között Console.WriteLine(véletlenszám.Next(100)); //Véletlenszerű érték 100-200 között Console.WriteLine(véletlenszám.Next(100, 201)); Console.ReadKey(); } 27. Az előző Random osztály felhasználásával készíts programot, ami szimulál n darab pénzfeldobást! Az n értékét a felhasználó adja meg! A szimuláció végén írassuk ki, hány fej és hány írás született! 28. Készíts programot kamatszámításhoz! mennyiségét és az éves kamat értékét!
Kérjük
be
a
tőke
28.1. Kérjük be, hány évre szeretnénk befektetni a pénzünket, majd írjuk ki évről évre, hogy alakul a tőke+kamat értéke! 28.2. Kérjük be, mennyi összegig szeretnénk befektetni a pénzt, a program számolja ki, hogy mennyi idő múlva érjük el ezt! 29. Mit csinál a következő program? Elemezd a működését!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 12
public static void Main() { int x = int.Parse(Console.ReadLine()); int y = int.Parse(Console.ReadLine()); int z; Random v = new Random(); for (int i = 0; i < y; i++) { z = v.Next(); if (z % x != 0) Console.WriteLine(z); } Console.ReadKey(); }
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 13
6. Tömbök 1. Hogyan tudunk egy, két, többdimenziós tömböket létrehozni? 2. Hogyan tudjuk dimenziószámát?
megállapítani
az
aktuális
méretét
és
3. Hogyan használhatjuk a string típust tömbszerűen? 4. Készíts pénzcímletező programot! A felhasználó megad egy tetszőleges összeget és a program kiírja, milyen bankjegyből, vagy érméből van a legkevesebbre szükség ahhoz, hogy az összeget megkapjuk! 5. Készíts programot, ami a felhasználó nevét bekéri (vezetéknév és keresztnév együtt), majd kiírja a monogramját! Ügyesebbek tekintettel lehetnek a kétbetűs magyar hangzókra is (Sz, Cs, stb.)! 6. Készíts logikai típusú változót egy hallgató szűrésére aszerint, hogy lezárt-e a féléve. Készíts hozzá egy egyszerű menüt: 1. a változó legyen true, 2. a változó legyen false, 3. a változó aktuális értékének kiíratása. Ha nincs értéke, akkor írassuk ki azt! Kezdetben a változó legyen null értékű! 7. Stringben kapott, egymástól vesszővel elválasztott email címeket helyezzünk tömbbe, rendezzük sorba őket, majd írassuk ki közülük az első ötöt! Ha nincs ennyi, akkor írassuk ki az összeset! 8. Írjon programot, ami csökkenő sorba rendez!
10
egész
számot
tartalmazó
tömböt
9. Készítsünk programot, ami 10 bekért számból kiírja, hány szám egyezik meg valamely másikkal! 10. Írjon programot, ami két mátrix szorzását végzi el! 11. Írjuk ki 10 beolvasott szám három legkisebbikét! 12. Kérjünk be egy betűt, majd állapítsuk meg, hogy a magyar ábécé hányadik betűje az!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 14
13. Készítsünk programot, ami a bekért szót úgy írja ki, hogy a magánhangzók helyére csillagot tesz! 14. Készítsünk olyan programot, ami bekérve a hónap és a nap sorszámát, megállapítja, hogy a dátum létezik-e! 15. Készíts olyan programot, ami bekéri két derékszögű koordinátáival meghatározott pont helyét, majd kiszámolja és kiírja a távolságukat egymástól! 16. Egy tömb 10 hallgató jegyeit tartalmazza. Készíts programot, ami kiírja, volt-e bukás a csoportban! 17. Az előző jegyeket tartalmazó tömb alapján írjuk ki egy új tömbbe azon hallgatók sorszámait, akik megbuktak! 18. Egy szigetcsoport felett elrepülve megmérjük rendszeres időközönként az alattunk elhaladó táj tengerszint feletti magasságát. Ha 0-t mérünk, akkor víz felett haladunk el. A pozitív érték szárazföldet jelez. 18.1. Hány sziget felett repültünk el? 18.2. Hányadik sziget volt összefüggően a leghosszabb? 18.3. Hányadik sziget volt a legmagasabb? 19. Egy hónapon át mindennap megmérjük az aznapi hőmérsékletet. 19.1. Hány napon át volt magasabb a hőmérséklet, mint a havi átlag? 19.2. Melyik nap volt a leghidegebb / legmelegebb? 19.3. Volt-e 3 olyan egymást követő nap, amikor folyamatosan nőtt a hőmérséklet napról-napra? 20. Készíts programot, ami bekér egy NxN-es mátrixot! N értékét is a felhasználó határozza meg előzetesen. Írassuk ki, hogy a kapott mátrix egységmátrix-e! 21. Készíts programot, ami bekér 20 mondatot, majd a leghosszabb mondat páros betűit kiírja! 22. Készíts programot, ami egy előre megadott mátrixról eldönti, hogy szimmetrikus-e! Próbáld meg a leghatékonyabb megoldást megkeresni! 23. Az aknakereső játékban egy NxM-es mátrixban véletlenszerű helyeken bombák lehetnek elrejtve. Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 15
23.1. Készíts egy mátrixot, amiben véletlenszerűen elrejtesz 10 különböző helyen bombát! 23.2. Kérd be a felhasználótól véletlenszerűen az általa választott koordinátákat! 23.3. Írasd ki, ha eltalálta a bombát! 23.4. Ha nem találta el, írd ki, hogy melyik szomszédjában hány bomba található! 24. Mi a hiba a következő programrészlettel? Javítsd ki, hogy elérje célját! public static void Main() { String mondat = "A kutya ugat"; mondat.Append("."); Console.WriteLine(mondat); }
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 16
7. Metódusok 1. Mikor kötelező a metódusban a return kulcsszó használata? 2. Kell-e egy metódusnak a neve mögé zárójel? 3. Szükséges-e paraméter a metódusoknak? 4. Lehet-e ugyanabban az egységben több metódusunk azonos nevű? 5. Mit jelent a szignatúra? 6. Milyen paraméterátadási módokat ismersz a metódusok esetében? 7. Lehet-e ref kulcsszóval kimenő adatot szolgáltatni a metódusból? 8. Hány értéket tudunk eredményül visszaadni egy metódusból és hogyan? 9. Adhatunk-e egy metódusnak híváskor nullable változót értékül? 10. Készíts metódust, ami logikai értékkel adja vissza, hogy két egész paramétere növekvő sorrendben érkezett-e! 11. Készítsd el a paraméterrel!
metódust
ugyanezzel
a
névvel,
de
három
12. Készíts metódust, ami egy kapott mondatról megállapítja, hogy hányszor szerepel benne egy kapott betű! 13. Írj metódust, ami két egész számokat tartalmazó tömböt összefűz (azonos elemek ne szerepeljenek többször)! 14. Írj metódust, ami lenullázza a kapott változót, ha az nem négyzetszám! 15. Készíts metódust, ami adott mondatból kivág egy adott szót! 16. Írj olyan metódust, ami egy kapott 10 elemű egész tömb elemeinek értékét megduplázza! 17. Készíts olyan metódust, ami a paraméteréül kapott szöveg betűit visszaadja, miután ábécé sorba rendezte azokat!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 17
18. Készíts olyan metódust, ami true-val tér akkor vissza, ha a paraméteréül kapott tömb minden eleme egyforma, különben a visszaadott érték false! 19. Írj olyan metódust, ami visszaadja a kapott string nem betű karaktereinek számát! 20. Határozzuk meg metódussal, hogy a kapott karakterláncban melyik a leggyakoribb betű! 21. Írjunk metódust, ami a kapott szövegben lévő, zárójelek közötti részt kiírja a konzolra! 22. Készíts olyan metódust, ami visszaadja, hogy a kapott szövegben van-e írásjel! 23. Készítsünk olyan metódust, ami egy kapott szöveg első két és utolsó két betűjét adja vissza (ha van annyi)! 24. Készíts olyan metódust, ami visszaadja két paraméterül kapott pont (x0, y0, x1, y1) távolságát! 25. Készíts metódust, ami egy paraméterben koordinátáival kapott vektort megdupláz! 26. Milyen hibák vannak az adott programban! Javítsd ki, hogy a kitűzött célt hajtsa végre! public static void duplazo(int x) { x *= 2; } public static void Main() { Console.WriteLine("Adjuk meg a megduplázandó számot!"); int a = Convert.ToInt32(Console.ReadLine()); Duplazo(a); Console.WriteLine("A beírt szám duplája:"+a); Console.ReadKey(); }
27. Mi a következő program fordítási hibájának magyarázata? Javítsd ki a jelzett problémát!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 18
public static void Pi(out double eredmény) { eredmény = 3.141592654; } public static void Main() { double? x; Pi(x); Console.WriteLine("A PI értéke:"+x); Console.ReadKey(); } 28. Készítsünk olyan metódust, ami visszaadja a kapott két pont (x0, y0, x1, y1 koordinátákkal jelölve) meredekségét! 29. Készíts olyan metódust, ami visszaadja 50 kapott előjeles szám közül melyik van a legközelebb 0-hoz! 30. Készíts metódust, ami egy kapott szöveg középső betűjét(vagy páros hosszúságú szöveg esetén betűit) visszaadja!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 19
8. Osztályok 1. Mi a különbség az osztály adattagja és tulajdonsága között? 2. Mely láthatósági módosítók teszik lehetővé számunkra azt, hogy az osztályt létrehozó assembly-n belül bárhonnan elérjük az osztályban létrehozott elemet? 3. Mit jelent az egységbezárás (encapsulation)? 4. Miért tiltjuk az adattag közvetlen hozzáférését, ha metódusokon, vagy tulajdonságokon keresztül úgyis hozzáférhetővé tesszük azt? 5. Van-e konstruktora egy általunk létrehozott osztálynak, ha mi nem csináltunk neki olyat? 6. Hogyan derül ki, példányosításkor?
hogy
melyik
konstruktor
hívódik
meg
7. Hogyan segíthetjük elő egy példány megsemmisítését, ha már nincs rá szükségünk? 8. Miben különböznek a statikus adattagok a normál adattagoktól? 9. Példányosítható-e egy statikus metódus? 10. Hogyan használhatjuk gyerekosztályban?
fel
a
szülő
osztály
konstruktorát
a
11. Készíthetünk-e gyerekosztály típusú objektumot a szülőosztály konstruktorával meghívva? Fordítva lehetséges-e? 12. Készíts osztályt Pizzák leírására! 12.1. Privát adattagok: pizza neve, ára, mérete (cm), akciós-e (igen/nem), alapesetben nem. 12.2. Készíts több konstruktort az osztályhoz! 12.3. Készíts metódusokat az árának és a méretének a lekérdezésére! 12.4. Amennyiben akciós a pizza, legyen metódus az árának csökkentésére (paramétere az árcsökkentés mértéke százalékban)! 12.5. Készíts több pizza objektumot! 13. Készíts a pizzákból többet egy tömbben (rendelés), majd járd be őket! Írasd ki az akciós pizzákat! Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 20
13.1. Írasd ki mutatóval a rendelés tömb legnagyobb pizzáját! 13.2. Készíts leszármazottat töltött pizza néven, aminek új adattagja a töltelék! Készíts konstruktort is hozzá! 14. Készíts osztályt zenei CD adatainak tárolására! (cím (szöveges), kapacitás (percben))! Készíts tulajdonságokat: a cím lekérdezhető, de csak osztályon belül változtatható meg, a kapacitás csak lekérdezhető! 15. Készíts osztályt egy hallgató adatainak tárolására: név, azonosító (6 számjegy), édesanyja neve. Az adatokat csak tulajdonságokkal lehessen elérni! Készíts néhány objektumot belőle adatbekéréssel! Az azonosító beírásánál készíts kivételkezelést! 16. Készíts osztályt lakás adatainak tárolására: cím, mérete m2-ben, szobák száma. Az adatokat csak tulajdonságokkal lehessen elérni! Készíts néhány objektumot belőle adatbekéréssel! A méret és szobaszám beírásánál készíts kivételkezelést! 17. Készíts osztályt termékek számára! Adatok: termék neve, eladási ára, alkatrészeinek listája (legfeljebb 50 darab). Minden alkatrésznek van neve és egységára. Készíts metódust egy új alkatrész hozzáadására! Az eladási ára a terméknek ne lehessen kisebb, mint az alkatrészek árainak összege! 18. Készíts osztályt turisták adataival! Adatok: név, anyanyelv (választhatóan csak magyar, angol, német valamelyike), életkor, utazási cél nyelvterülete (előző nyelvek valamelyike)! Az adatok csak tulajdonságaikon keresztül érhetők el! Készíts belföldi() néven metódust, ami true-t ad vissza akkor, ha a turista saját anyanyelvének megfelelő területre utazik! Készítsd el turisták egy csoportját belőle! 19. Készíts osztályt sokszögek adatainak tárolására! Adat a sokszög oldalainak hossza. 19.1. Készíts leszármazott osztályt háromszögek számára! Készíts metódust terület és kerületszámításra! Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 21
19.2. Készíts másik leszármazott osztályt négyzeteknek! Ez az osztály is tartalmazzon kerület és területszámításra metódusokat! 20. Milyen hibák maradhattak a következő osztálydeklarációban? Javítsd ki őket! class Labda { public static int méret; public Méret { get; set; } } class Főprogram { public static void Main() { Labda kisPirosLabda = new Labda(); kisPirosLabda.Méret = 10; Labda nagyFociLabda = new Labda(); nagyFociLabda.Méret = 40; Console.ReadKey(); } }
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 22
9. Struktúrák
1. Miben különböznek a struktúrák az osztályoktól? 2. Lehet-e láthatósági előírása egy struktúra adattagjának? 3. Hogyan példányosítjuk a struktúránkat? 4. Készíts struktúrát süteményreceptek tárolására! Adatok: sütemény neve, összetevői (név, mennyiség, mennyiségegység; több, de legfeljebb 50 összetevő), elkészítés ideje percben. Készíts konstruktort! Készíts két receptet és írasd ki őket ToString metódussal! 5. Készíts struktúrát kerékpárok részére. Adatok: váz mérete (választhatóan csak a 12,16,20,24 értékek közül), gyártó neve, ára. Az adatokat csak tulajdonságaikon keresztül lehessen elérni! Készíts néhány kerékpárt, tömbbe szervezve, írasd ki jellemzőiket ToString() segítségével! 6. Készíts struktúrát áruk nyilvántartására! Adatok: név, tömeg, ár. Készíts konstruktort és ToString() metódust hozzá! Hozz létre több árut egy tömbben! Írasd ki az összértéküket és össztömegüket is! 7. Készíts programot, ami hardverelemek nevét, gyártóját, árát képes tárolni struktúrában! Írassuk ki az elemek összértékét! 8. Írjon programot, ami neveket és életkorokat tartalmazó struktúrát életkor szerint növekvő sorba rendez! 9. Készíts struktúrát, ami 20 árucikk nevét, darabszámát, egységárát képes tárolni! Írassuk ki a termékek (készlet) összértékét! 10. Készíts struktúrát, ami 5 élelmiszer megnevezését, tömegét, vonalkódját tárolja! Írassuk ki a legkisebb tömegű termék adatait! 11. Készíts struktúrát, 5 jelentkezési adat tárolására: név, jelentkezés ideje, helyszín! Írasd ki, mely helyszínekre hányan jelentkeztek! 12. Írjunk struktúrát, ami fóliatekercsek sorszámát, hosszát tárolja tömbben! Csökkenthető legyen az egyes tekercsek mennyisége Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 23
metódussal! 13. Készíts struktúrát, ami TV-k adatait képes tárolni úgy, mint gyártó, képátló mérete, ára. Készítsünk egy tömbbe több TV-t, lehetnek azonos gyártótól is! A felhasználó választhasson gyártót, majd írassuk ki ennek a gyártónak a legnagyobb képátlójú TVjének az árát! 14. Húsz hallgató nevét és eredményét tartalmazó adatszerkezetből írassuk ki azon hallgatók nevét, akik átlag felett teljesítettek! 15. Készítsünk struktúrát előadók adatainak tárolására! Az adatok: név, előadás, város neve. Adott 20 előadó. Írassuk ki, mely városból hányan adnak elő! 16. Készítsünk struktúrát városok nevének és földrajzi koordinátáiknak tárolására! Készítsünk hozzá metódust, ami egy másik várostól való távolságát légvonalban kiszámítja! Készítsünk gyűjteményt, ami városok adatait tárolja! Készítsünk algoritmust, amiben bekérjük, hogy melyik városban vagyunk jelenleg, majd írassuk ki, melyik másik város van hozzánk légvonalban a legközelebb! 17. Gépjárművek adatait tároljuk struct tömbben Mennyiség: 50 db. Adatok: rendszám, vételár, szín. Milyen színű gépjárműből van a legtöbb?
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 24
10. Gyűjtemények 1. Mely névtér részei a gyűjtemények? 2. Hasonlítsd össze a tömböt az ArrayList-tel! 3. Miben különbözik a SortedList a Hashtable-től? 4. Milyen adattípusokat tárolhatunk ArrayList-ben? 5. Hogyan hivatkozhatunk egy elemre az ArrayList-ben? 6. Hogyan tudjuk lekérdezni az elemek számát ugyanitt? 7. Adatelérés tekintetében miben különbözik az ArrayList és a Queue? 8. Felhasználhatjuk-e úgy a Queue egy elemét, hogy nem vesszük ki a gyűjteményből? 9. Milyen praktikus felhasználási gyűjteménytípusnak?
módját
ismered
a
Stack
10. Vesd össze az ArrayList-et a Hashtable gyűjteménnyel! 11. Hogyan tudjuk megkeresni az értékhez tartozó kulcsot (!) a Hashtable esetében? 12. Készíts alkalmazást, amely valós számokat tárol gyűjteményben! A számokat a billentyűzetről kapja, a begépelés végét speciális karakter , a csillag (*) jelezze! 13. Készíts programot, ami egy gyűjteményt véletlen, pozitív páros számokkal tölt fel! A feltöltött számok mennyiségét a felhasználó adja meg a program indításakor! A feltöltést követően írassuk ki a legkisebb és a legnagyobb számot a gyűjteményben! 14. Készíts gyűjteménnyel olyan programot, ami a 0 végjelig bekért számokat a bekérést követően kiírja a bekéréshez képest fordított sorrendben! 15. Készíts programot, ami két, tetszőleges objektumokat tartalmazó gyűjteményt összeveti egymással!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 25
15.1. Írassuk ki a két gyűjtemény unióját! 15.2. Írassuk ki a két gyűjtemény metszetét! 15.3. Írassuk ki az első és a második gyűjtemény különbségét! 16. Mi a hiba a következő programrészletben? Javítsd ki! Dictionary
szótár = new Dictionary(); szótár.Add(1, 2012); szótár.Add(2, 2013); foreach (DictionaryEntry egy_elem in szótár) { Console.WriteLine("Kulcs:"+egy_elem.Key+", érték:"+egy_elem.Value); } Console.ReadKey();
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 26
11. Típusos gyűjtemények, generikusok 1. Mi az előnye a típusos gyűjtemények használatának? Sorolj fel több indokot is! 2. Miért működik a 8.8 pontban található példaprogram, ha nem egyezik a gyűjtemény típusával az eredmény változójának típusa? Stack betűVerem = new Stack(); betűVerem.Push('a'); betűVerem.Push('b'); betűVerem.Push('c'); //Elvileg kivételkor ez típuseltérés int szám = betűVerem.Pop(); //Miért működik mégis? Console.WriteLine(szám); 3. Milyen elemtípussal járható be a Dictionary típus? Vesd össze a Hashtable esetén használttal! 4. Mi a generikus metódusok előnye a hagyományosokhoz képest? 5. Készíts olyan gyűjteményt, amely alkalmas arra, hogy helységek nevét és irányítószámát összerendeli egymás mellé! Az irányítószám megadásával bármikor írja ki a program az adott helység nevét. Egy helységnek több irányítószáma is lehet! A program listázza ki, milyen helységeket tartalmaz a gyűjtemény! 6. Készíts olyan gyűjteményt, ami függvényhívásokat szimulál úgy, hogy tárolja a félbehagyott függvény nevét! A felhasználó menüből választhasson, hogy új függvényt ad meg, ami félbeszakítja a jelenlegi futtatását (elég a függvény nevét megadni és tárolni), vagy a meglévő függvény futását fejezi be! Írjuk ki folyamatosan, hogy mi az aktuálisan futó függvény neve! 7. Készíts termelő-fogyasztó alkalmazást, ami a leütött billentyűket kiírja a képernyőre, másodpercenként legfeljebb egyet! Milyen gyűjtemény lehet alkalmas a leütött gombok ideiglenes tárolására? (A feladathoz felhasználhatod aSystem.Threading.Thread.Sleep(1000) utasítást, ami felfüggeszti a végrehajtást az adott szálon 1 másodpercig.) 8. Készíts angol-magyar szótár szópárait tároló gyűjteményt! A szótárban lehessen angol, vagy magyar szavakat is keresni egyszerre, a megtalált szó másik nyelvű párját írassuk ki a
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 27
képernyőre! 9. Készíts programot, ami barátaink születési évét és nevét bekéri és tárolja gyűjteményben! Írassuk ki azokat közülük, akik betöltötték a 18. életévüket! 10. Készíts programot, ami ismerőseink nevét és telefonszámát képes tárolni! A program a telefonszámokat +36301234567 formátumban kérje be! A bekérést követően írassuk ki a barátaink nevét és telefonszámaikat, külön a 20, 30, 70-es körzetű számokkal rendelkezőket! 11. Milyen szintaktika és szemantikai eltéréseket következő programrészletben kijavítani?
javasolsz
a
public static void Main() { Hashtable tábla = new Hashtable(); tábla.Add(1234, "Kovács Péter"); tábla.Add(2011, "Takács Vilmos"); tábla.Add("2013", "Balogh István"); foreach (object elem in tábla) Console.WriteLine("Kulcs:" + elem.Value); }
elem.Key
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
+
",
érték"
+
A C# nyelv programozási alapjai Gyakorlati feladatsor 28
12. Fájlkezelés
1. Milyen információs és milyen segédosztályokat biztosít a .NET számunkra a fájlkezelések tekintetében? 2. Kell-e példányosítanunk a DriveInfo metódus használatának érdekében?
osztályt
a
GetDrives()
3. Mikor különbözik egymástól a TotalFreeSpace és AvailableFreeSpace tulajdonságok a meghajtók esetében?
az
4. Hogyan tudjuk megszerezni az adott könyvtárban lévő összes bejegyzés nevét? 5. Van-e lehetőség a DirectoryInfo információs osztály segítségével mappákat mozgatni, vagy törölni? 6. Mit jelentenek a stream-ek? 7. Mit jelent a fájl zárolása? Mikor bír jelentőséggel? 8. Mely osztály biztosít a fájlkezelésünkhöz bájtszinten hozzáférést? 9. Hogyan tudunk egyszerű típusok esetében gondoskodni azok mentéséről? 10. Mi a hátránya több adat esetében a BinaryReader osztálynak? 11. Hogyan tudunk összetett objektumaink mentéséről egyszerűen gondoskodni? 12. Mit jelent a deszerializáció? 13. Mit
csinál
a
következő
program?
Mutasd
be
részletesen!
public static void Main() { FileSystemInfo fájlAdatok = new FileInfo(@"C:\Bemutató.ppt"); if (fájlAdatok.Exists) { Console.WriteLine("A fájl neve:"+ fájlAdatok.FullName); Console.WriteLine("Létrehozva:" + fájlAdatok.CreationTime); Console.WriteLine("Módosítva:" + fájlAdatok.LastWriteTime); } Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 29
Console.ReadKey(); } 14. Készíts programot, ami lementi szövegfájlba a felhasználó vezeték és keresztnevét, külön sorokba! 15. Töltsd be egy tetszőleges szöveges fájl tartalmát és írasd ki a képernyőre a sorokat megszámozva! 16. Készíts alkalmazást, ami kiírja egy könyvtárban a bejegyzések számát, a mappák és a fájlok számát összesen! 17. Készíts programot, ami az elérhető meghajtók közül a felhasználónak enged választani egyet, majd a kiválasztott meghajtó százalékos telítettségét kiírja! 18. Készíts programot, ami egy felhasználó által megadott fájlt képes eltávolítható meghajtóra másolni! (Removable DriveType) 19. Több hibát is rejt a programrészlet. Melyek ezek? public static void Main() { DirectoryInfo dir_info = new DirectoryInfo("C:\"); Console.WriteLine("Fájlok listája:"); foreach (FileInfo fájl in dir_info.GetDirectories()) Console.WriteLine(fájl.Name); Console.ReadKey(); } 20. Készíts programot, ami törli a felhasználó által megadott fájlt, vagy jelzi, ha nincs ilyen! 21. Készíts alkalmazást, ami elmenti egy hallgatók nevét és félévi átlageredményüket tartalmazó struktúra tetszőleges számú példányát! Ellenőrzésképpen olvastassuk is vissza az eredményeket! 22. Készíts osztályt személyek nevének és adóazonosítójának tárolására! Készíts két leszármazott osztályt, konstruktorokkal:
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 30
22.1. Az egyén vállalkozók osztálya még tartalmaz adószámot is! 22.2. A cégek osztálya tartalmaz cégbírósági bejegyzés számát és cégtulajdonos(ok) nevét is! 22.3. Példányosítsd többször gyűjteménybe!
mindkét
leszármazott
osztályt
22.4. Tárold fájlban a példányokat szerializáció segítségével! 22.5. Készíts helyreállító algoritmust, ami betölti a fájlból a korábban mentett példányokat a gyűjteménybe! 23. Kissé szokatlanul sikerült ez a mappába másolás. Mi az oka? public static void Main() { String forrásmappa = "C:\\"; String forrásnév = "fontos.doc"; String célmappa = "C:\\Új mappa"; Directory.CreateDirectory(célmappa); File.Copy(forrásmappa + forrásnév, célmappa + forrásnév, true); File.Delete(forrásmappa + forrásnév); Console.ReadKey(); } 24. Készíts programot, ami két szöveges fájl tartalmát egy harmadikban egyesíti! A fájlok nevét a felhasználó határozza meg! Ha a fájlok nem léteznek, adjunk hibaüzenetet!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.
A C# nyelv programozási alapjai Gyakorlati feladatsor 31
13. Kivételkezelés
1. Mondj néhány példát a kivételek keletkezésére! 2. A következő kódrészletben több hiba is található! Javítsd ki őket! try { int x = int.Parse(Console.ReadLine()); } Console.WriteLine(x); catch (Exception) { Console.WriteLine("Kivétel keletkezett"); 3. Miért van értelme a finally szakasznak, ha egyébként is folytatódik a végrehajtás a catch szakaszok után? 4. Milyen szabályokat érdemes használata esetében?
betartani
több
catch
szakasz
5. Mikor használhatjuk a throw kulcsszót? 6. Készíts alkalmazást, ami a felhasználótól bekéri az ötös lottó aktuális nyerőszámait (5 db 1-90 közötti véletlenszerű nyerőszám). A program jelezzen, ha rossz intervallumban adták meg a számokat és ha véletlenül számmá nem alakítható adatot kapott, ismételje meg a beolvasást! 7. Milyen kivételek keletkezhetnek egy fájl megnyitása esetén? 8. Készíts programot, ami egy N x M -es egyszámjegyű számokat tartalmazó mátrixot szövegfájlból feltölthetővé tesz! A számok a fájlban szóközökkel vannak elválasztva egymástól. M értékét az első sorban lévő számjegyek száma határozza meg! N a szövegfájl sorainak számával egyezzen meg! Amennyiben a második sortól kezdve eltér a számjegyek száma az első sorban meghatározott értéktől, dobjunk egy kivételt!
Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával” című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg.