C# programozás kezdőknek › 2.4 lecke · mini projekt
C# tanfolyam · 2.4 lecke · mini projekt
Mini projekt: tanulmányi átlag kalkulátor
Most mindent összerakunk, amit eddig tanultál: változókat, adatbekérést, típuskonverziót és operátorokat. A végén lesz egy saját programod, amely kiszámolja a jegyeid átlagát.

A projekt végére
- egy feladatból megtervezed a program lépéseit;
- eldöntöd, milyen változókra és típusokra lesz szükséged;
- kisebb részekből, lépésenként építed fel a programot;
- helyesen számolsz tizedes átlagot;
- teszteléssel megkeresed a program gyenge pontjait.
Ehhez használod
- változók és adattípusok;
- adatbekérés és TryParse;
- operátorok, főleg az osztás.
Ha a Program.cs fájlodban van Main(), a kódot a kapcsos zárójelei közé írd.
A feladat
Készíts programot, amely bekéri a tanuló nevét és három tantárgy jegyét, kiszámolja az átlagot, és két tizedesjegyre kerekítve kiírja. Így néz ki a kész program futás közben:
=== Tanulmányi átlag kalkulátor ===Add meg a neved: AnnaMatematika jegy: 5Magyar jegy: 4Informatika jegy: 4Érvényes jegyek: True, True, TrueAnna átlaga: 4,33Így dolgoznak a programozók is
Nem egyszerre írjuk meg az egész programot. Kis lépésekben haladunk, és minden lépés után lefuttatjuk, hogy lássuk, működik-e. Ha hiba van, így könnyű megtalálni: csak az utolsó lépésben lehet.
Tervezés: előbb gondolkodunk, utána kódolunk
Minden program ugyanarra a három lépésre bontható, amit a számítógép működésénél is láttál:
- BemenetA név és a három jegy bekérése a felhasználótól.
- FeldolgozásA szövegek átalakítása számmá, majd az átlag kiszámítása.
- KimenetAz eredmény kiírása olvasható formában.
Mit gondolsz? Milyen változókra lesz szükség?
Írd fel a füzetedbe: milyen adatokat kell a programnak tárolnia, és milyen típusúak legyenek? Gondold végig a jegyeket és az átlagot is!
Változótábla
| Változó | Típus | Miért ez? |
|---|---|---|
nev | string | szöveg |
jegy1, jegy2, jegy3 | int | a jegyek egész számok (1–5) |
siker1, siker2, siker3 | bool | sikerült-e az átalakítás |
atlag | double | az átlag tizedes szám is lehet |
Első lépés: fejléc és név
Kezdjük a legegyszerűbb résszel. A Console.Write() miatt a felhasználó ugyanabba a sorba gépel, ahol a kérdés áll.
Console.WriteLine("=== Tanulmányi átlag kalkulátor ===");Console.Write("Add meg a neved: ");string nev = Console.ReadLine();Te jössz!
Gépeld be és futtasd! Ha működik, jöhet a következő lépés. Ha a ReadLine alatt zöld hullámvonalat látsz, az csak a CS8600 figyelmeztetés, a program lefut.
Második lépés: a jegyek bekérése
A jegyek szövegként érkeznek, ezért a TryParse() segítségével alakítjuk őket egész számmá. Az első jegy így néz ki:
Console.Write("Matematika jegy: ");string adat1 = Console.ReadLine();bool siker1 = int.TryParse(adat1, out int jegy1);Te jössz!
Írd meg ugyanígy a magyar és az informatika jegy bekérését is! Figyelj a változónevekre: adat2, siker2, jegy2 és így tovább.
Ellenőrzés
Console.Write("Magyar jegy: ");string adat2 = Console.ReadLine();bool siker2 = int.TryParse(adat2, out int jegy2);Console.Write("Informatika jegy: ");string adat3 = Console.ReadLine();bool siker3 = int.TryParse(adat3, out int jegy3);Harmadik lépés: az átlag kiszámítása
Az átlag a jegyek összege osztva a jegyek számával. Első ötletként sokan ezt írják:
double atlag = (jegy1 + jegy2 + jegy3) / 3;Mit gondolsz? Mennyi lesz az átlag 5, 4 és 4 jegynél?
Az atlag változó double, tehát tizedes számot is tud tárolni. Akkor biztosan 4,33 lesz?
Megoldás
Nem, 4 lesz! A jobb oldalon minden érték int: a 13 és a 3 is. Két egész szám osztásakor egész osztás történik, a tört rész levágódik, és csak ezután kerül a 4 a double változóba.
Hibavadászat: a megoldás egyetlen karakter
Ha legalább az egyik operandus double, tizedes osztás történik. Elég a 3 helyett 3.0-t írni:
double atlag = (jegy1 + jegy2 + jegy3) / 3.0;Ez a hiba azért alattomos, mert a program hibaüzenet nélkül lefut, csak rossz eredményt ad. Ezért kell mindig tesztelni!
Negyedik lépés: az eredmény kiírása
Az átlag lehet végtelen tizedes tört is: 13 / 3 = 4,3333… Ezért két tizedesjegyre kerekítjük a Math.Round() segítségével. Az első szám a kerekítendő érték, a második a tizedesjegyek száma.
Console.WriteLine();Console.WriteLine($"Érvényes jegyek: {siker1}, {siker2}, {siker3}");Console.WriteLine($"{nev} átlaga: {Math.Round(atlag, 2)}");Miért írjuk ki az „Érvényes jegyek” sort?
Ez egy ellenőrző sor: megmutatja, hogy mindhárom jegyet sikerült-e számmá alakítani. Egyelőre a program még nem tud a false értékre reagálni, de legalább látjuk, ha valami nincs rendben. A Math.Round() eredményét magyar beállításnál vesszővel írja ki: 4,33.
A teljes program
Console.WriteLine("=== Tanulmányi átlag kalkulátor ===");Console.Write("Add meg a neved: ");string nev = Console.ReadLine();Console.Write("Matematika jegy: ");string adat1 = Console.ReadLine();bool siker1 = int.TryParse(adat1, out int jegy1);Console.Write("Magyar jegy: ");string adat2 = Console.ReadLine();bool siker2 = int.TryParse(adat2, out int jegy2);Console.Write("Informatika jegy: ");string adat3 = Console.ReadLine();bool siker3 = int.TryParse(adat3, out int jegy3);double atlag = (jegy1 + jegy2 + jegy3) / 3.0;Console.WriteLine();Console.WriteLine($"Érvényes jegyek: {siker1}, {siker2}, {siker3}");Console.WriteLine($"{nev} átlaga: {Math.Round(atlag, 2)}");Tesztelés: működik minden esetben?
Egy program akkor jó, ha nemcsak egy bemenetre működik. Futtasd le az alábbi esetekkel! Előbb írd a füzetedbe, mit vársz, csak utána nézd meg a valódi eredményt.
| Teszt | Jegyek | Várt átlag | Mit vizsgál? |
|---|---|---|---|
| 1. | 5, 4, 4 | 4,33 | tizedes átlag és kerekítés |
| 2. | 5, 5, 5 | 5 | kerek átlag |
| 3. | 1, 2, 2 | 1,67 | felfelé kerekítés |
| 4. | alma, 5, 5 | ? | hibás bemenet |
Mit gondolsz? Mi történik a 4. tesztnél?
Tippeld meg, mit ír ki a program, ha az első jegy helyére azt írod: alma!
Megoldás
Az ellenőrző sor ezt mutatja: False, True, True. A jegy1 értéke 0 lett, így a program ezt számolja: (0 + 5 + 5) / 3,0 = 3,33. A program hibaüzenet nélkül, de rossz átlagot ír ki!
Ezt most még nem tudjuk megoldani – de hamarosan igen
A programunk látja, hogy baj van (False), de nem tud mit kezdeni vele: nem tudja kiírni, hogy „Hibás jegy!”, és nem tudja kihagyni a számolást. Ehhez döntésre van szükség. A következő leckében megtanuljuk az if utasítást, és ezt a programot fejlesztjük tovább. Hasonló gond a 7-es vagy a 0-s jegy is: számként érvényes, de jegyként nem.
Kihívások
Kész az alapprogram? Válassz a kihívások közül! Mindegyik megoldható azzal, amit eddig tanultál.
1. Még egy tantárgy
Bővítsd a programot egy negyedik tantárggyal! Mire kell figyelned az átlag számításánál?
Tipp
Négy jegy esetén 4.0-val kell osztani, nem 3.0-val.
2. Súlyozott átlag
Sok iskolában a témazáró dolgozat duplán számít. Kérj be két órai jegyet és egy témazáró jegyet, és számold ki a súlyozott átlagot!
Egy lehetséges megoldás
// két órai jegy + egy témazáró kétszeres súllyaldouble sulyozott = (ora1 + ora2 + 2 * temazaro) / 4.0;A témazáró kétszer számít, ezért összesen négy „jeggyel” osztunk.
3. Szebb kimenet
Tedd olvashatóbbá a kiírást: legyen üres sor a kérdések és az eredmény között, az eredményt keretezd, és írd ki külön mindhárom jegyet is a tantárgy nevével!
Egy lehetséges megoldás
A jegyek bekérése és az átlag kiszámítása után a korábbi kiíró sorokat cseréld az alábbi részletre. A változónevek a lecke teljes programjával egyeznek meg.
Console.WriteLine();Console.WriteLine($"Sikeres átalakítás: {siker1}, {siker2}, {siker3}");Console.WriteLine("+----------------------------------+");Console.WriteLine($"Tanuló: {nev}");Console.WriteLine($"Matematika: {jegy1}");Console.WriteLine($"Magyar: {jegy2}");Console.WriteLine($"Informatika: {jegy3}");Console.WriteLine($"Átlag: {Math.Round(atlag, 2)}");Console.WriteLine("+----------------------------------+");A paraméter nélküli Console.WriteLine() üres sort hagy. A felső és alsó vonal keretezi az eredményblokkot; a tantárgyak külön sorban jelennek meg.
A siker1, siker2 és siker3 az egész számmá alakítás sikerét jelzi. Az 1–5 közötti tartomány ellenőrzése a következő fejlesztési lépés.
Ellenőrizd a projektedet
A projekt akkor kész, ha…
- a program hiba nélkül lefut;
- az 5, 4, 4 jegyekre 4,33-at ír ki, nem 4-et;
- a változóneveid beszédesek, és a típusuk illik az adathoz;
- legalább három tesztesettel kipróbáltad;
- a kimenet jól olvasható.
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ.
1. Miért double típusú az atlag változó?
Mert az átlag tizedes szám is lehet, például 4,33.
2. Miért 3.0-val osztunk, és nem 3-mal?
Mert a jegyek összege int; ha 3-mal osztanánk, egész osztás történne, és a tört rész elveszne.
3. Mire való a Math.Round(atlag, 2)?
Két tizedesjegyre kerekíti az átlagot, hogy a kiírás olvasható legyen.
4. Miért lesz rossz az átlag, ha valaki „alma” jegyet ír be?
Mert a sikertelen TryParse() után a jegy értéke 0, és a program ezzel a 0-val számol tovább.
Mit tudsz már?
- Egy feladatot bemenetre, feldolgozásra és kimenetre bontasz.
- Megtervezed, milyen változókra és típusokra van szükség.
- Lépésenként építed és teszteled a programot.
- Elkerülöd az egész osztás csapdáját az átlagszámításnál.
- Tesztesetekkel megkeresed a program gyenge pontjait.
Következő lecke: 3.1 Feltételek – if és else
Az átlagkalkulátor már számol, de még nem tud dönteni. A következő leckében megtanítjuk arra, hogy észrevegye a hibás jegyet, a 3.2-ben pedig azt is kiírja, hogy jeles vagy jó rendű lett-e a tanuló.






