Vezérlőpult
D5. Gyakorló feladatok · Metódusok

D blokk · Metódusok · 5. tananyag — gyakorló feladatgyűjtemény

Gyakorló feladatok: minden, amit a D blokkban tanultál

Ú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.

1 tanóra + otthoni gyakorlás15 feladat⭐ – ⭐⭐⭐ szintek

Ezt gyakorlod

1Hogyan dolgozz a feladatokkal?

  1. Minden metódusnál három kérdés: Mi megy be (paraméterek)? Mi jön ki (visszatérési érték)? Ki ír a képernyőre? Ha ezekre válaszoltál, a fejléc megvan — a törzs már csak munka.
  2. A futó rész legyen rövid. Ha a program fő része nem fér el egy képernyőn, valami metódusért kiált.
  3. Használd a saját eszköztáradat! Ahol „hibás bevitelre kérdezz újra” szerepel, ott nem kell újraírnod semmit — a Konzol osztályod már tudja.
  4. Tesztelj metódusonként: egy új metódust előbb önmagában próbálj ki (néhány hívással), csak aztán építsd be.
  5. Feladatonként új projekt, kész feladat után commit (A7).
ℹ️ A MUNKAMEGOSZTÁS ELVE

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.

2Kidolgozott mintafeladat

MINTA⭐⭐Zsebszámológép, metódusokban

Í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.

A gondolatmenet — a blokk három kérdése

  1. Mi megy be? A Szamol-nak a két szám és a művelet — semmi más.
  2. Mi jön ki? A Szamol eredményt AD (double — az osztás miatt, B3!), a MuveletetKer egy char-t.
  3. Ki ír a képernyőre? A bekérő és a főprogram — a számoló metódus nem ír, a kiíró nem számol. Így a Szamol később bárhol újrahasznosítható.

Egy lehetséges megoldás

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:

⚠️ A TE MEGOLDÁSOD LEHET MÁS

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.

3Alapfeladatok ⭐

Bemelegítés

Egy-egy metódus, tiszta fejléccel — a keret, a cím és a számítás egy helyre kerül.

D5.1⭐Névjegy-metódus

Í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!

D5.2⭐Fejléc-gyár

Í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”).

D5.3⭐ÁFA-nyomozó

Í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”!

D5.4⭐Átváltó-táblázat

Í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.

4Haladó feladatok ⭐⭐

Itt már tervezni kell

Mi menjen be, mi jöjjön ki, ki írjon a képernyőre? A fejléc megtervezése a feladat fele.

D5.5⭐⭐Szökőév-vizsgáló

Í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.

D5.6⭐⭐Számla-sor

Í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óé?

D5.7⭐⭐Jegyek átlaga

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.

D5.8⭐⭐Időtartam-formázó

Í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.

D5.9⭐⭐Fordított feladat

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.

D5.10⭐⭐Tippjáték, rendbe téve

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.

D5.11⭐⭐Menü-gép

Í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!

5Kihívások ⭐⭐⭐

A blokk legszebb feladatai

Return-láncok, két kimenet, teljes átszervezés — itt dől el, hogy a metódus eszköz lett-e a kezedben.

D5.12⭐⭐⭐Bankautomata 2.0

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.

D5.13⭐⭐⭐Visszajáró

Í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.

D5.14⭐⭐⭐A Konzol tizedest tanul

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!

D5.15⭐⭐⭐A nagy refaktor

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.

6Zárás — mielőtt továbblépsz

  1. Minden megoldásnál nézd végig a fejléceket: átgondolt-e a bemenet és a kimenet? Nem ír-e olyan metódus a képernyőre, amelynek számolnia kellene?
  2. A futó rész rövid? Ha nem, még van mit kiemelni.
  3. Minden kész feladat után commit — beszédes üzenettel (pl. D5.12 Bankautomata kesz).
  4. Ha egy feladat nem ment, az térkép a témazáróhoz: pontosan megmutatja, melyik fejezetet nézd át újra.
  5. Az E blokkban a metódusok új társat kapnak: a tömböket — és a kettő együtt ([]-t kapó és adó metódusok) a Mastermind gerince lesz.