D blokk · Metódusok · 5. tananyag — gyakorló feladatgyűjtemény
Új anyag ma nincs. Helyette 15 feladat, amelyben a metódus-tervezés a tét: mi legyen a bemenet, mi a kimenet, hogyan bomoljon részekre a program? A feladatszöveg szándékosan nem árulja el, melyik eszköz kell — azt a feladat természete dönti el.
Konzol osztályod már tudja.A számoló metódus nem ír, a kiíró nem számol. Ami
eredményt állít elő, az adja vissza return-nel
— a képernyő a hívó (vagy egy kiíró metódus) dolga. Így a számoló rész
bármely későbbi programban újrahasznosítható. A mintafeladat pontosan
ezt mutatja meg.
Írd újra a C2.5-ös zsebszámológépet metódusokba szervezve! A program két egész számot és egy műveleti jelet (+, −, *, /) kér be — mindhármat hibatűrően. Egy metódus felelős a művelet bekéréséért (csak a négy érvényes jelet fogadja el), egy másik a számolásért, a nullával osztást pedig a program pirossal jelezze. A Program.cs futó része férjen el egy képernyőn.
Szamol-nak
a két szám és a művelet — semmi más.Szamol
eredményt AD (double — az osztás miatt,
B3!),
a MuveletetKer egy
char-t.Szamol később bárhol
újrahasznosítható.int a = Konzol.SzamotKer("Első szám: "); int b = Konzol.SzamotKer("Második szám: "); char muvelet = MuveletetKer(); if (muvelet == '/' && b == 0) { Konzol.Hiba("Nullával nem osztunk!"); } else { double eredmeny = Szamol(a, b, muvelet); Konzol.Siker($"{a} {muvelet} {b} = {eredmeny:F2}"); } char MuveletetKer() { char valasz; do { Console.Write("Művelet (+, -, *, /): "); valasz = Console.ReadKey().KeyChar; Console.WriteLine(); } while (valasz != '+' && valasz != '-' && valasz != '*' && valasz != '/'); return valasz; } double Szamol(int a, int b, char muvelet) { switch (muvelet) { case '+': return a + b; case '-': return a - b; case '*': return a * b; default: return (double)a / b; } }
Két finomság, amit érdemes észrevenni:
switch ágaiban a
return átveszi a
break szerepét — a return úgyis azonnal
kilép (D2);Szamol így tiszta számoló maradhatott.
(Jó vitatéma: te hová tennéd?)Más felbontás, más fejlécek — mind jó, ha a három kérdésre (be? ki? képernyő?) átgondolt válasz született, és a program hibatűrően működik.
Egy-egy metódus, tiszta fejléccel — a keret, a cím és a számítás egy helyre kerül.
Írj metódust, amely paraméterként megkapja egy diák nevét és osztályát, és kiírja őket egy kétsoros, keretezett névjegyben. A programod háromszor hívja meg, három különböző diák adataival — a keret kódja csak egyszer szerepelhet a fájlban!
Írj metódust, amely tetszőleges címet kap, és a cím hosszához pontosan illeszkedő, dupla vonalas keretben, cián színnel jeleníti meg. Használd egy háromrészes program mindhárom szakaszának elején (pl. „ADATOK”, „SZÁMÍTÁS”, „EREDMÉNY”).
Írj metódust, amely egy bruttó árat kap, és visszaadja, mennyi ÁFA van benne (az ÁFA 27%). A programod két különböző termékárra írja ki mondatszerűen, színnel kiemelve az ÁFA-tartalmat, egész forintra kerekítve. Az ÁFA kulcsa ne legyen „magic number”!
Írj metódust, amely Celsius-fokot kap és Fahrenheitet ad vissza. A programod ciklussal írjon ki egy kétoszlopos, igazított táblázatot 0-tól 40 fokig, ötösével — minden sorban a metódust hívva.
Mi menjen be, mi jöjjön ki, ki írjon a képernyőre? A fejléc megtervezése a feladat fele.
Írj metódust, amely egy évszámról eldönti, szökőév-e (a szabályt a C3-ban megismerted). A programod kérjen be öt évszámot — hibás bevitelre kérdezzen újra —, és mindegyikről írja ki színesben az eredményt: zölddel, ha szökőév, szürkével, ha nem.
Írj metódust, amely egy termék nevét, egységárát és darabszámát kapja: írja ki az igazított, blokkszerű számla-sort, ÉS adja vissza a tétel részösszegét. A programod három tétellel hívja meg, a végén pedig írja ki a színes végösszeget. Gondold végig: mi a metódus dolga, és mi a hívóé?
Kérd be, hány jegyet kaptál ebben a hónapban (1 és 10 között, hibás bevitelre újrakérdezéssel), majd egyesével a jegyeket (csak 1–5 fogadható el!). Egy metódus számolja ki az átlagot, egy másik pedig döntse el az átlaghoz tartozó szöveges értékelést (legalább három sáv). A kiírás mondatszerű legyen, az átlag egy tizedessel.
Írj metódust, amely másodpercek számát kapja, és szövegként adja vissza „ó óra p perc mp másodperc” formában (pl. 3725 → „1 óra 2 perc 5 másodperc”). A programod három különböző időtartamra próbálja ki — köztük egy órán belülire is.
Ezúttal a főprogram kész — neked a metódusokat kell megírnod úgy, hogy ez pontosan így működjön:
int a = Konzol.SzamotKer("Első szám: "); int b = Konzol.SzamotKer("Második szám: "); Eredmeny("Összeg", Osszead(a, b)); Eredmeny("Szorzat", Szoroz(a, b));
Az Eredmeny a címkét és az értéket
mondatszerűen, az értéket zölddel kiemelve írja ki.
Szervezd át a C5-ös számkitalálódat: egy metódus kérje be a tippet (1–100 közé, újrakérdezéssel), egy másik pedig a tippet és a titkos számot megkapva írja ki a „Nagyobb!”/„Kisebb!” súgást, és adja tudtul a hívónak, hogy talált-e. A főprogram ciklusa ettől néhány sorosra rövidül.
Írj metódust, amely kirajzolja a keretes főmenüt, beolvassa a választott billentyűt, és azt visszaadja a hívónak. A főprogramban így a visszatérő menü ciklusában már csak a switch marad. Próbáld ki a C6-os Mintagyárad átalakításával!
Return-láncok, két kimenet, teljes átszervezés — itt dől el, hogy a metódus eszköz lett-e a kezedben.
Szervezd metódusokba a C7-es címletezőt! Egy metódus kérje be a felvenni kívánt összeget (1000-rel osztható, pozitív — különben újrakérdez). Egy másik metódus egy összeget és EGY címletet kapjon: ha jut belőle, írja ki a sort (címlet × darab), és adja vissza, mennyi pénz maradt még címletezésre. A főprogram így öt egyforma hívással intézi az egész címletezést.
Írj metódust, amely egy vásárlás végösszegét és a fizetett készpénzt kapja, és EGYSZERRE két dolgot közöl a hívóval: sikerült-e a fizetés (elég volt-e a pénz), és mennyi a visszajáró. A programod kérje be a két összeget, majd mondatszerűen írja ki az eredményt — kevés pénznél pirossal, egyébként zölddel a visszajáróval együtt.
Bővítsd a Konzol osztályt egy olyan
kérdező metódussal, amely tizedes törtet fogad el, és hibás
bevitelre újrakérdez — a meglévő
SzamotKer mintájára. Használd egy
programban, amely bekéri egy túra távját (km) és idejét (óra), majd
kiírja az átlagsebességet egy tizedessel. Ne feledd: magyar gépen
tizedesvesszővel gépelünk!
Válaszd ki a legnagyobb eddigi programodat (pl. a
C7-es
fagylaltozó-kasszát), és szervezd át úgy, hogy
klasszikus Main-formában legyen, és a
Main törzse legfeljebb 10 soros: minden
összefüggő rész kapjon beszédes nevű metódust. A működés nem
változhat! Kommentekkel jelöld, melyik metódus mit vállal át — és
commitold két lépésben: előbb az átszervezést, aztán az apró
javításokat.
D5.12 Bankautomata kesz).