Feltételek, Switch-Case és Ciklusok
Részletes elméleti útmutató a 2. és 3. heti egyetemi tananyagokhoz: összetett elágazások, menüvezérlés, for ciklusok, valamint elöl- és hátultesztelő ciklusok a hivatalos órai feladatokkal.
Ciklusok Összehasonlítása (Egyetemi Vizsgakérdés)
| Szempont | for ciklus | while ciklus | do-while ciklus |
|---|---|---|---|
| Feltétel vizsgálata | Elöl | Elöl | Hátul |
| Minimális futásszám | 0 | 0 | 1 (mindig legalább 1x lefut!) |
| Tipikus használat | Ismert ismétlésszám (pl. tömb bejárása) | Ismeretlen ismétlésszám, feltételig tart | Felhasználói bemenet ellenőrzése, menük |
2.1. Példa: Egyágú Feltételes Utasítás (if)
Ha a megadott reláció (x > 0) teljesül, a kapcsos zárójelek közötti blokk végrehajtódik, ellenkező esetben a vezérlés átugorja azt.
// 2. Hét / 2.1.cpp - Egyágú feltételes elágazás (pozitív vizsgálat)
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Adjon meg egy szamot! ";
cin >> x;
if (x > 0)
{
cout << "A megadott szam pozitiv!" << endl;
}
return 0;
} 2.2 – 2.4. Példa: Kétágú (if-else) és Többágú Elágazások
Párosság vizsgálata modulo operátorral (x % 2 == 0), valamint háromágú döntési fa pozitív, negatív és nulla értékek szétválogatására.
// 2. Hét / 2.2, 2.3 és 2.4.cpp - Két- és többágú elágazások
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Adjon meg egy szamot! ";
cin >> x;
// 2.2: Kétirányú elágazás (if-else)
if (x > 0) {
cout << "A megadott szam pozitiv!" << endl;
} else {
cout << "A megadott szam nem pozitiv!" << endl;
}
// 2.3: Páros / páratlan vizsgálat maradékkal (%)
if (x % 2 == 0) {
cout << "A megadott szam paros!" << endl;
} else {
cout << "A megadott szam paratlan!" << endl;
}
// 2.4: Háromirányú elágazás (pozitív, negatív, nulla)
if (x > 0) {
cout << "A megadott szam pozitiv!" << endl;
} else if (x < 0) {
cout << "A megadott szam negativ!" << endl;
} else {
cout << "A megadott szam nulla!" << endl;
}
return 0;
} 2.5. Példa: Egyetemi Érdemjegy Skála Pontszám Alapján
Intervallumok láncolt vizsgálata else if szerkezetekkel (50 pont alatt elégtelen, 86 felett jeles).
// 2. Hét / 2.5.cpp - Pontszám és érdemjegy tartományvizsgálat
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Adjon meg egy pontszamot! ";
cin >> x;
if (x < 50)
{
cout << "1 - elegtelen" << endl;
} else if (x < 61)
{
cout << "2 - elegseges" << endl;
} else if (x < 76)
{
cout << "3 - kozepes" << endl;
} else if (x < 86)
{
cout << "4 - jo" << endl;
} else
{
cout << "5 - jeles" << endl;
}
return 0;
} 2.6. Példa: Egymásba Ágyazott If és Nullával Való Osztás Védelem
Elengedhetetlen programozási szabály: sosem hajtunk végre osztást vagy modulo műveletet anélkül, hogy meggyőződnénk róla, az osztó nem nulla (y != 0)!
// 2. Hét / 2.6.cpp - Egymásba ágyazott elágazás és nullával való osztás védelme
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Adjon meg egy osztando szamot, majd egy osztot! ";
cin >> x >> y;
// Elsőként vizsgáljuk, hogy az osztó nem 0-e!
if (y != 0)
{
if (x % y == 0)
{
cout << "A megadott osztando szam maradek nelkul oszthato a megadott osztoval!" << endl;
}
else {
cout << "A megadott szamok maradek nelkul nem oszthatoak!" << endl;
}
}
else {
cout << "Nullaval nem osztunk!" << endl;
}
return 0;
} 2.7 & 2.8. Példa: Switch-Case és Interaktív Menürendszer
A switch-case szerkezet diszkrét egész és karakter értékek kezelésére szolgál. Fontos a break utasítás a továbbcsorgás (fall-through) megelőzésére, és a default ág az érvénytelen menüpontok lekezelésére!
// 2. Hét / 2.7 és 2.8.cpp - Switch-Case és interaktív menürendszer
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Valasszon az alabbi lehetosegek kozul!" << endl;
cout << "1. Uj feladat" << endl;
cout << "2. Eredmenyek" << endl;
cout << "0. Kilepes" << endl;
cin >> x;
switch (x)
{
case 1:
cout << "Uj feladat menupontot valasztottad." << endl;
break;
case 2:
cout << "Eredmenyek menupontot valasztottad." << endl;
break;
case 0:
cout << "Kilepes." << endl;
break;
default:
cout << "Hibas menupont!" << endl;
break;
}
return 0;
} 2.9 – 2.13. Példa: Számláló (for) Ciklusok
Növekvő és csökkenő számlálás, páros számok szűrése, összegzés és faktoriális (N!) számítása.
// 2. Hét / 2.9 - 2.13.cpp - Számláló (for) ciklusok
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Adjon meg egy szamot! ";
cin >> x;
// 2.9: Növekvő számlálás 1-től x-ig
cout << "--- 1-tol x-ig ---" << endl;
for (int i = 0; i < x; i++) {
cout << i + 1 << " ";
}
cout << endl;
// 2.10: Csökkenő számlálás x-től 1-ig
cout << "--- x-tol 1-ig visszaszamlalas ---" << endl;
for (int i = x; i > 0; i--) {
cout << i << " ";
}
cout << endl;
// 2.11: Páros számok x-ig
cout << "--- Paros szamok x-ig ---" << endl;
for (int i = 1; i < x; i++) {
if (i % 2 == 0) {
cout << i << " ";
}
}
cout << endl;
// 2.12: Számok összege 1-től x-ig
int osszeg = 0;
for (int i = 1; i <= x; i++) {
osszeg += i;
}
cout << "A szamok osszege 1-tol " << x << "-ig: " << osszeg << endl;
// 2.13: Faktoriális (x!) számítása
int fakt = 1;
for (int i = 1; i <= x; i++) {
fakt *= i;
}
cout << x << " faktorialisa: " << fakt << endl;
return 0;
} 3.1 & 3.2. Példa: Elöltesztelő While Ciklus
A ciklusmag mindaddig ismétlődik, amíg a fejlécben lévő feltétel igaz (nem nulla). Ha a feltétel már a belépés előtt hamis, a mag egyszer sem fut le.
// 3. Hét / 3.1 & 3.2.cpp - Elöltesztelő while ciklus
#include <iostream>
using namespace std;
int main()
{
// 3.1: Név kiírása 10-szer
int i = 0;
while (i < 10)
{
cout << (i + 1) << ". Sajat Nev" << endl;
i++;
}
// 3.2: Összegzés elöltesztelő ciklussal
int szam, j = 1, osszeg = 0;
cout << "Adjon meg egy szamot az osszegzeshez: ";
cin >> szam;
while (j <= szam)
{
osszeg += j;
j++;
}
cout << "Osszeg: " << osszeg << endl;
return 0;
} 3.4. Példa: Rejtett Karakter Kitalálása Számlálóval
A felhasználónak addig kell újabb és újabb karaktert megadnia, amíg el nem találja a rejtett karaktert (karakter != '@'), miközben a program számolja a kísérletek számát.
// 3. Hét / 3.4.cpp - Karakter kitaláló játék számlálóval
#include <iostream>
using namespace std;
int main()
{
int db = 1;
char karakter;
cout << "Adjon meg egy kulonleges karaktert: ";
cin >> karakter;
// Addig kérjük be újra, amíg el nem találja a '@' karaktert
while (karakter != '@')
{
cout << "Nem sikerult, probald ujra!\nAdjon meg egy kulonleges karaktert: ";
cin >> karakter;
db++;
}
cout << "Gratulalok, eltalaltad a karaktert " << db << " db probalkozasbol!" << endl;
return 0;
} 3.5 & 3.6. Példa: Hátultesztelő Do-While Bemenet Validáció
A do-while ciklus magja egyszer garantáltan lefut. Ideális megoldás, ha a felhasználótól érkező hibás adatokat szeretnénk újra és újra bekérni a megfelelő tartományba érkezésig.
// 3. Hét / 3.5 & 3.6.cpp - Hátultesztelő do-while ciklus
#include <iostream>
using namespace std;
int main()
{
// 3.5: Bemenet szigorú ellenőrzése [0, 100] tartományra
int pontszam;
do {
cout << "Adjon meg egy pontszamot 0-100 kozott: ";
cin >> pontszam;
} while (pontszam > 100 || pontszam < 0);
if (pontszam >= 50) {
cout << "Sikeres vizsgaeredmeny!" << endl;
} else {
cout << "Sikertelen (bukas)!" << endl;
}
// 3.6: Összegzés csökkentéssel do-while segítségével
int szam, osszeg = 0;
cout << "Adjon meg egy szamot: ";
cin >> szam;
do {
osszeg += szam;
szam--;
} while (szam > 0);
cout << "Osszeg: " << osszeg << endl;
return 0;
}