Vissza a tananyagokhoz

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.

Egyetemi Alapsablon

Minden vezérlési feladatnál az iostream és a using namespace std; adja a keretet:

// ==========================================
// EGYETEMI / SULIS C++ ALAPSABLON
// ==========================================
#include <iostream>

using namespace std;

int main() {
    // Vezérlési szerkezetek alapja
    return 0;
}

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. Hét: Elágazások, Switch és For Ciklusok
Órai fájl: 2.1.cpp

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;
}
Órai fájlok: 2.2.cpp, 2.3.cpp, 2.4.cpp

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;
}
Órai fájl: 2.5.cpp

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;
}
Órai fájl: 2.6.cpp

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;
}
Órai fájlok: 2.7.cpp & 2.8.cpp

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;
}
Órai fájlok: 2.9.cpp – 2.13.cpp

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. Hét: Elöl- és Hátultesztelő Ciklusok
Órai fájlok: 3.1.cpp & 3.2.cpp

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;
}
Órai fájl: 3.4.cpp

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;
}
Órai fájlok: 3.5.cpp & 3.6.cpp

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;
}