Nincs Találat
A kért oldal nem található. Próbáld pontosítani a keresést, vagy használd a fenti navigációt a bejegyzés megkereséséhez.

Ha programozni szeretnél tanulni, az egyik legjobb választás a Python. Ez egy modern, könnyen olvasható programozási nyelv, amelyet világszerte használnak weboldalak készítésére, automatizálásra, adatelemzésre vagy akár mesterséges intelligencia fejlesztésére.
A Python különösen kezdőbarát nyelv, mert a szintaxisa egyszerű és jól olvasható. Sok más programozási nyelvhez képest kevesebb kóddal is működő programokat lehet írni, ezért ideális első programozási nyelvnek.
Ebben a sorozatban lépésről lépésre tanuljuk meg a Python alapjait, úgy, hogy közben valódi mini programokat is készítünk.

A programokat valahol meg kell írni. Mi ehhez a Visual Studio Code szerkesztőt fogjuk használni.
Ez egy ingyenes, nagyon népszerű fejlesztői eszköz, amely sok programozási nyelvet támogat, köztük a Pythont is.
👉 Ha még nem telepítetted, itt találsz részletes útmutatót:
Visual Studio Code telepítése
Ha már telepítetted a VS Code-ot, jöhet a berendezése

➡️ A Python-kód írásához A Visual Studio Code-ban néhány bővítményt is telepíteni kell. Nyisd meg a bal oldali menüsor alján a Bővítmények (Extensions) ikont, majd a keresőmezőbe írd be: python
Miután beírtad a keresőmezőbe, hogy Python, egy hosszú találati listát kaptál. A találatok közül ezeket válaszd:
Python (Microsoft) - ez az alap Python bővítmény, amely lehetővé teszi a Python-fájlok futtatását és kezelését
Pylance (Microsoft) - segít az automatikus kódkiegészítésben, hibajelzésben és kényelmesebb kódírásban

Python Debugger (Microsoft) - a hibakereséshez szükséges, vagyis segít megtalálni, ha valami nem úgy működik, ahogy szeretnéd. Kezdőként ez a három bővítmény bőven elég ahhoz, hogy kényelmesen elkezdhess Pythonban dolgozni.
Mielőtt elkezdünk kódolni, érdemes létrehozni egy külön mappát, ahova a Python fájljaidat menteni fogod. Így később sokkal könnyebb lesz rendben tartani a gyakorló feladatokat és a kisebb projekteket. A legegyszerűbb, ha a számítógépeden készítesz egy új mappát, például ilyen néven:
python-gyakorlás
Ezután nyisd meg a Visual Studio Code-ot, majd a bal oldali menüben kattints az Explorer ikonra. Itt fogod látni a megnyitott mappákat és a bennük levő fájlokat.

A mappa megnyitásához kattints az alábbi lehetőségek egyikére:
1. Open Folder
2. Fent a menüsorban: File > Open Folder.
Ezután keresd meg az előbb létrehozott mappát és nyisd meg. Ha minden rendben, az Explorer panelen meg fog jelenni a mappa neve. Ide fogjuk menteni a Python-fájljainkat.
Ez elsőre apróságnak tűnhet, de nagyon hasznos szokás.
A programozásban a rendezettség fél siker.
Most készítsük el az első Python fájlunkat.
Nagyon fontos a végén a .py kiterjesztés, mert ez jelzi a számítógépnek, hogy Python programról van szó. Ha elkészült, a fájl meg fog jelenni az Explorer listában és a szerkesztőben is. Most már írhatjuk bele a kódot:

Írd a fájlba a következő sort:
print("Helló világ!")
Ez a program a képernyőre ír egy szöveget. A print() utasítás a Python egyik legegyszerűbb parancsa. Arra szolgál, hogy szöveget, vagy adatot jelenítsünk meg a képernyőn.
A Python fájlt többféleképp is futtathatjuk. Az egyik legegyszerűbb, ha a szerkesztő jobb sarkában található kis háromszög alakú gombot használod (▶). Ez a Run Python File gomb. Ha erre rákattintasz, a Visual Studio Code automatikusan lefuttatja a programot.
Ebben a leckében előkészítettük a Python tanulásához szükséges környezetet.
Megtanultuk:
hogyan nyissunk meg egy mappát a Visual Studio Code-ban
milyen Python bővítményeket érdemes telepíteni
hogyan hozzunk létre egy .py kiterjesztésű Python fájlt
hogyan futtassunk egy programot a ▶ futtatás gombbal
Elkészítettük az első Python programunkat is, amely egy szöveget ír ki a képernyőre. Ezzel gyakorlatilag megtetted az első lépést a programozás világában.

A kért oldal nem található. Próbáld pontosítani a keresést, vagy használd a fenti navigációt a bejegyzés megkereséséhez.

A C++ minimum keresés az egyik legegyszerűbb, mégis irtó hasznos algoritmus, amit minden kezdő programozó megtanul.
Lényege, hogy végigmegyünk egy értékhalmazon, és közben folyamatosan figyeljük, melyik a legkisebb szám.
Ez pont olyan, mint amikor egy boltban körülnézel, és mindig megnézed, hol a legolcsóbb termék — csak itt a számok között „shoppingolunk”.
A minimumkeresés az a kis algoritmus, ami folyton visszatér majd a programozói életedben: versenyidők összehasonlításánál, pontszámoknál, hőmérsékleteknél, áraknál, sőt bármilyen helyzetben, ahol ki kell választani a legkisebb értéket.
És a legjobb? Megtanulni nagyon rövid, de ezer helyen fogod használni

A minimum keresés lényege:
végigmész a számokon, és mindig megjegyzed, melyik volt eddig a legkisebb. 👇

cin >> n; -> a felhasználó megmondja, hány értéket fog megadni. Ezt eltároljuk.
int szam;
cout << "Add meg az elso szamot: ";
cin >> szam; -> bekérjük az első számot. Ez lesz a kezdő minimum, mert amíg nincs más szám, nincs mihez viszonyítani.
int minimum = szam; -> itt beállítjuk az első számot a kezdő minimum értéknek.
for (int i = 2; i <= n; ++i) {
cout << "Add meg a " << i << ". szamot: ";
cin >> szam; -> az első szám már megvan, ezért csak a 2. számtól kezdünk.
if (szam < minimum) {
minimum = szam; -> ha kisebb számot találunk, frissítjük.
Kérj be a felhasználótól 5 számot és írd ki közülük a legkisebbet.
Tipp:
i=1-től induló for ciklus, az első bekért szám lesz a kezdő minimum, utána minden számot hasonlítasz és frissítesz, ha kell.

Kérj be a felhasználótól 7 számot, melyek lehetnek negatívak is. Írd ki közülük a legkisebb értéket!

A kért oldal nem található. Próbáld pontosítani a keresést, vagy használd a fenti navigációt a bejegyzés megkereséséhez.

Képzeld el, hogy le kell írnod a táblára egy mondatot… mondjuk 100-szor.
Vagy be kell kérned 6 futó adatait.
Vagy ki kell írnod 1-től 1000-ig minden számot.
Ezek mind olyan feladatok, amiket kézzel megcsinálni rémálom, de a számítógépnek egyetlen utasítás:
👉 „Ezt ismételd meg ennyiszer.”
És pontosan ez a ciklusok lényege.

A ciklusok olyanok, mint a programozás "repeat" gombjai:
ha valamit újra és újra kell végrehajtani,
ha egy adatsoron végig kell menni,
ha valamit csak addig csinálunk, amíg egy feltétel igaz,
akkor ott biztos, hogy ciklust fogsz használni.
A C++ két klasszikus ciklusa, amit most megtanulunk:
✨ while – amíg a feltétel igaz, ismétel
✨ for – egy előre tudott, számlálós ismétlés
És hidd el, ahogy összeáll, hirtelen minden feladat egyszerűbb lesz:
ismétlődő műveletek
adatok összegzése
min–max keresés
tömbök bejárása
Most pedig lépjünk bele a ciklusok világába, kezdjük azzal, hogyan működik a while, és miért viselkedik másképp, mint a for.
A ciklusok akkor jönnek jól, amikor valamit többször egymás után szeretnénk végrehajtani. Nem akarunk százszor leírni egy utasítást, elég egyszer megadni, és a gép elismétli helyettünk.
A while kulcsszó azt jelenti:
👉 „amíg teljesül a feltétel, ismételd az utasítást.”
Ez egy úgynevezett előtesztelő ciklus, mert még belépés előtt megnézi, igaz-e a feltétel. Ha már az elején hamis, akkor egyáltalán nem fut le a ciklusmag.
Példa:

A program először megnézi, hogy i <= 10 igaz-e.
Ha igen, belép a ciklusba, kiírja a „Szia”-t, majd ++i növeli az i értékét.
Ahogy látjuk, pontosan tízszer fut le – a feltétel addig igaz, amíg az i el nem éri a 11-et.
A ciklusban található rész a ciklusmag.
A feltétel: i <= 10.
A változás: ++i, ami biztosítja, hogy a feltétel egyszer hamissá váljon, különben végtelen ciklusba futnánk.
Ha a „Szia” helyett i-t iratod ki, akkor szépen elszámol 1-től 10-ig.
A while párja a do-while, ami szintén ciklus, de egy nagyon fontos különbséggel: a do-while egyszer mindig lefut és csak utána vizsgálja a feltételt. Ezért nevezzük utótesztelő ciklusnak.

Hiába a false feltétel, a ciklusmag egyszer biztosan lefut. Ez akkor hasznos, ha valamit mindenképp meg akarunk jeleníteni a képernyőn, pl. egy bekérést.
A while ciklusnál megtanultuk, hogy addig ismételünk, amíg a feltétel igaz.
A for ciklusnál viszont már az elején tudjuk:
honnan indulunk,
meddig szeretnénk menni,
és hogyan változik a számláló.
Ezért a for olyan, mint a „számlálós ismétlés” beépített csodafegyvere:
rövid, átlátható, és a legtöbb programozási feladatnál ez lesz a kedvenced.
A for ciklus valójában három részből áll (mind egy sorban!):
for (kezdőérték; feltétel; léptetés)
1. beállítja a kezdőértéket
2. Megvizsgálja a feltételt
3. Ha igaz, lefut a ciklusmag
4. A végén elvégzi a léptetést (pl. ++i)
5. Újra ellenőrzi a feltételt ... és megy tovább.
Addig ismétel, amíg a feltétel hamis nem lesz

Ez szó szerint azt mondja:
1. Indulj egytől
2. Menj addig, amíg i <= 10
3. Minden körben növeld eggyel
És így a program elszámol 1-től 10-ig.
A ciklusokat nem csak külön-külön használhatjuk, hanem egymásba is ágyazhatjuk őket.
Ez azt jelenti, hogy egy cikluson belül fut egy másik ciklus.
Ennek a legegyszerűbb és leglátványosabb példája, amikor csillagokból építünk ábrát:
a külső ciklus (i) azt mondja meg, HÁNY sor legyen,
a belső ciklus (j) azt mondja meg, egy sorban HÁNY csillag legyen.
Ha az i értéke 1, akkor 1 csillagot írunk ki,
ha az i értéke 2, akkor 2 csillagot,
…és így tovább.

Kérj be a felhasználótól egy számot és írd ki az összes számot 1-től eddig az értékig

Mit csinál?
int n; -> létrehoz egy dobozt, amelyben n nevű egész szám típusú változó van
std::cin >> n; -> beteszi a dobozba azt az értéket, amit a felhasználó megadott
int i = 1 -> ezzel létrejött egy i nevű új változó, ami egy egész szám. Kapott egy kezdőértéket: 1
i <= n -> minden ciklusfuttatás előtt ezt ellenőrzi a program. Ha igaz, lefut a ciklusmag. Ha hamis, vége a ciklusnak
++i -> minden kör végén növeli az i értékét eggyel. Ez viszi előre a ciklust.
Mi a különbség az i és az n között?
Az i csak ebben a ciklusban él, az n a cikluson kivül lett meghatározva, tehát később is vissza lehet nyúlni hozzá
Kérj be a felhasználótól egy egész számot (N) és számold ki, mennyi 1+2+3+ ... + N összege

int N; -> bekéri az N -et
std::cin >> N; -> beteszi az N értékét egy dobozba
int osszeg = 0; -> van egy összeg változónk, ami nulláról indítja a számolást. Minden ciklusban belerakunk egy osszeg + i-t.
for ciklusunk:
int i = 1 - ez a ciklus számlálója. Ez számolja, hányszor futott le a ciklus, illetve melyik számnál tart. A kezdeti értéke egy, célja, hogy elérje az N értéket. Tehát ez egyről indul
Feltételvizsgálat: i <= N. Ez minden kör előtt lefut. A gép megkérdezi: a jelenlegi i érték még belefér? Ha igen, lefut a ciklusmag, ha nem, kilép a ciklusból.
N = 6, tehát belefér az 1, 2, 3, 4, 5, 6 és kilép a 7-nél.
osszeg +=i; - ez történik minden körben: fogjuk az összeg változóban levő értékét és hozzáadjuk az aktuális i-t, majd visszarakjuk ugyanabba a dobozba. Ha i = 3, akkor osszeg = osszeg + 3. Az osszeg += i az ugyanazt jelenti, mint osszeg = osszeg + i;
Hány páros szám van 1 és n között?. Kérj be a felhasználótól egy n egész számot, majd vizsgáld meg 1-től n-ig az összes számot és számold meg, hány páros szám van köztük. Végül írd ki a darabszámot.

int n; - létrehozol egy egész típusú változót, a neve: n. Ez lesz a dibiz, amibe a felhasználó által megadott szám kerül. Kiírja az üzenetet a képernyőre, a felhasználó megadja a számot.
std::cin >> n; - beleteszi a megadott számot a dobozba. Beírtam, hogy 6, innentől az n = 6 lesz.
int db = 0; -> egy újabb doboz, ez fogja számolni azt, hogy hány páros számot talált. Int = egész típusú változó. 0 - mert kezdetben 0 darab párosról tudunk.
for ciklus:
int i = 1; -> létrejön egy i nevű számláló, kezdőértéke 1. Az első vizsgált szám az 1
int <= n; -> feltétel, amíg i <= n, addig fut a ciklus. Ha n = 6, akkor az i felvett értékei: 1, 2, 3, 4, 5, 6.
Amikor i = 7, a feltétel hamis, kilép
++i -> minden kör végén az i eggyel nő.
cilusmag: {} zárójel között. if (i % 2 == 0 { db++;} Itt döntjük el, hogy az i páros-e. i % 2 == 0 (ha az i-t elosztjuk kettővel, akkor a maradék = 0). Ha ez lefut, akkor a db++ -> a db megnő eggyel. Ha az i páros, akkor a darabszám nő eggyel.
Ha lefutott a ciklus, akkor kiírja a db számát a képernyőre.
Kérj a felhasználótól egy n számot. Ezután döntsd el 1-től n-ig minden számról, hogy osztható-e hárommal. Számold meg, hány ilyen szám van és írd ki az eredményt.

Nagyon hasonlít a megoldása az előző feladathoz, itt most csak a zárójeleket nézzük át:
if (i % 3 == 0) -> a kerek zárójel azt jelzi, ez egy logikai feltétel, ami vagy igaz, vagy hamis. A feltételek mindig () - kerek zárójelben vannak. Itt azt jelenti: mit kérdezünk meg.
{} - kapcsos zárójel, azt mutatja meg, mit csinálunk, ha a válasz igaz.
for (int i = 1; i <= n; i++) { // Ez a for kapcsos nyitója
if (i % 3 == 0) { // Ez az if kapcsos nyitója
db++; // if blokk belseje
} // if blokk kapcsos zárója
} // for kapcsos zárója
Kérj a felhasználótól egy n számot. Ezután vizsgáld meg 1-től n-ig minden számot, hogy 7-esre végződik-e. Számold meg, hány ilyen szám található

A kért oldal nem található. Próbáld pontosítani a keresést, vagy használd a fenti navigációt a bejegyzés megkereséséhez.

A programozás egyik legizgalmasabb pillanata az, amikor a kódod végre gondolkodni kezd. Tud dönteni. Tud választani. Tud reagálni arra, amit a felhasználó (vagy éppen a világ) elé tesz. És pontosan ezt hozzák el nekünk a C++ feltételek: az if, az else, az else if és a logikai kifejezések.
Eddig már simán ment a számolás, változózás, műveletezés — de most lépünk át arra a szintre, ahol a programod elkezd valódi „intelligenciát” mutatni.

Igen, itt kezdődik az, amikor a kód „ha ez történik → akkor azt csináld” módba kapcsol.
Képzeld el úgy, mintha a programod kapna egy saját mini döntéshozó központot:
ha a felhasználó túl fiatal → „sorry, még nem vezethetsz”,
ha a szám pozitív → „minden oké, gyerünk tovább”,
ha az ugrás hosszabb, mint 8 méter → „wooow, díjazás jár!”.
A feltételek azok a kapuk, amelyek eldöntik, melyik irányba megy tovább a kódod — és hidd el, programozóként ezt az eszközt fogod a legtöbbször használni. Minden játék, minden alkalmazás, minden algoritmus tele van döntésekkel.
Ebben a leckében szépen, lépésről lépésre megnézzük:
hogyan működnek az if elágazások,
mikor kell else vagy else if,
hogyan írj tökéletes logikai kifejezéseket,
milyen tipikus hibákat érdemes elkerülni,
és hogyan gondolkodik valójában a számítógép egy feltétel kiértékelésekor.
Lesznek könnyű és instant megérthető példák, plusz néhány olyan mini feladat is, amitől érzed majd: „Oké… most már tényleg értem.”
A végére simán megoldod majd a nagyobb projektes feladatokat is (távolugrás, síugrás, lakásfeladat), hiszen azok tele vannak feltételes szerkezetekkel.
Na, csapjunk bele, mert ez az a rész, ahol a C++ elkezd igazán élőnek tűnni!
A feltétel (condition) tulajdonképpen egy kérdés, amit a program feltesz magának:
„Igaz ez… vagy hamis?”
Nincs harmadik opció.
A C++ itt nagyon „kocka módon” gondolkodik: vagy true, vagy false.
És attól függően, melyik a válasz, a program különböző „utakon” halad tovább. Ez olyan, mintha a kód egy kereszteződéshez érne:
Ha a feltétel igaz → akkor végrehajtja az adott utasítást.
Ha a feltétel hamis → akkor átugorja, vagy egy másik ágba lép.
Ezért hívjuk elágazásnak is.
A feltételt a legegyszerűbben az if kulcsszóval írjuk le.
Így kommunikálsz a géppel:
if (feltétel) {
//ezt csináld, ha igaz
}
A kis zárójelen belüli rész a lényeg - itt döntöd el, hogy milyen szabály alapján lépjen tovább a program. Például:
a > b → nagyobb-e az egyik szám a másiknál?
kor >= 18 → elmúlt-e a felhasználó 18 éves?
pont >= 50 → sikerült-e a vizsga?
ugras >= 8 → jár-e nagyobb díjazás a versenyzőnek?
Ha a feltétel igaz, a program belép a kapun. Ha hamis, fapofával sétál tovább a következő lehetőség felé. Nézzünk rá egy példát:

Az if szuper, amikor valamit csak akkor szeretnél lefuttatni, ha egy feltétel igaz. De mi van akkor, ha azt is szeretnéd megmondani a programnak, mi történjen, ha a feltétel hamis?
Na erre van az else.
Az else az a „különben” ág:
ha az if nem teljesül → az else fut le.
Ennyi. Tiszta sor.
💡 Úgy képzeld el, mint két út közötti kapcsolót:
if → ha páros a szám
else → ha NEM páros, tehát páratlan
Nincs másik opció. A szám vagy páros vagy páratlan, tehát az else mindig elkapja a fennmaradó esetet.
Nézzük egy szép, tiszta példával:

Az if és az else két helyzetet tudott megkülönböztetni: ha igaz -> ezt csináld, ha nem igaz > azt csináld.
De a valóságban kevés dolog fekete-fehér. Többnyire nem két, hanem több lehetséges eset is van. Itt lép a képbe az else if.
Az else if-nél a program tovább kérdez:
➡️ „Ha az első feltétel nem igaz, akkor nézzük meg ezt a másikat!”
➡️ „Ha ez se igaz, akkor még mindig van egy következő lehetőség…”
Így szépen, sorban, logikusan vizsgálja végig a különböző feltételeket.

Ha ezt írod neki:
if (feltétel)
utasítás1;
utasítás2;
akkor ő ezt így érti:
utasítás1 -> az if-hez tartozik
utasítás2 -> nem tartozik az if-hez, mindig lefut. A {} zárójelek nélkül az if CSAK EGY UTASÍTÁST fogad be. Amit beteszem a kapcsos zárójel közé, az egy utasításnak felel meg.
Példa:
if (szam > 0) std::cout << "Pozitiv szam" << std::endl;
Tehát, ha a szám nagyobb mint , akor futtasd le, hogy írja ki ez egy pozitív szám
Csakhogy ha hozzáírom még ezt a sort:
if (szam > 0) std::cout << "Pozitiv szam" << std::endl;
std::cout << "A szam nagyobb mint nulla" << std::endl;
Csak az első sor van hozzákötve az if-hez, a másodikat mindig lefuttatja. Így lesz helyes:
if (szam > 0) {
std::cout << "Pozitiv szam" << std::endl;
std::cout << "A szam nagyobb mint nulla" << std::endl; }
így mind a két sor ugyanahhoz az if-hez tartozik.
Előfordul, hogy egy feltétel csak akkor vizsgálható, ha egy másik már teljesült. Ilyenkor jönnek képbe a beágyazott if-ek. Ez olyan, mintha a program azt mondaná:
1. Nézzük meg az A-t
2. Ha A igaz, akkor vizsgáljuk meg a B-t is. Vagyis kétlépcsős döntést kell hozni.
Példa: a megadott szám pozitív és páros-e?
if (szam > 0) {
if (szam % 2 == 0) {
std::cout << "A szam pozitív és páros" << std::endl; }
else {
std::cout << " A szam pozitív, de páratlan" << std::endl; }
else {
std::cout <<"A szam nem pozitív." << std::endl;
}
Három lehetséges kimenet van:
Akkor érdemes beágyazott if-et használni, ha a második feltétel csak akkor értelmezhető, ha az első igaz. Például: ha a felhasználó be van jelentkezve, akkor ellenőrizzük, hogy adminisztrátor-e.
Ha nem kell beágyazni, a két feltétel egyszerre kell, hogy igaz legyen, akkor egyszerűbb így:
if (szam > 0 && szam % 2 == 0) {
std::cout << "A szám pozitív és páros" << std::endl; }
Csak akkor használunk beágyazott if-et, ha a vizsgálatoknak van egy sorrendje. Ha csak kombinálni akarod a feltételeket, akkor sokkal egyszerűbb a logikai operátor.

A kért oldal nem található. Próbáld pontosítani a keresést, vagy használd a fenti navigációt a bejegyzés megkereséséhez.

Eddig főként szöveggel dolgoztunk - most itt az idő, hogy számokat is tároljunk, számoljunk és mérjünk!
A számítógép minden adatot a memóriájában tárol. Ez a memória apró bitekből, bájtokból áll. 1 bájt = 8 bit
Egy bit lehet 0 vagy 1, tehát egyetlen biten kétféle értéket tudunk eltárolni. Ha több bitet teszünk egymás mellé, akkor az értékkombinációk száma mindig kétszereződik:
1 bit → 2ⁱ = 2 érték (0, 1)
2 bit → 2² = 4 érték (00, 01, 10, 11)
8 bit → 2⁸ = 256 érték → 1 bájt
Minél több bájtot foglalunk le egy változónak, annál nagyob vagy pontosabb számot tudunk vele ábrázolni. De nézzük pontosabban:

A programozásban nagyon gyakran van szükségünk egész számok tárolására – például életkorra, pontszámra, vagy éppen egy számláló értékére.
Ehhez a C++ több különböző „méretű dobozt” (típust) kínál: mindegyik egész értéket tárol, csak más tartományban.
Minél nagyobb a doboz (több bájt), annál nagyobb számokat tudsz benne elhelyezni.
Azonban a memória is értékes, ezért mindig a szükségesen legkisebb típust érdemes választani.
| Típus | Méret (legalább) | Előjeles (signed) tartomány | Előjel nélküli (unsigned) tartomány |
|---|---|---|---|
char |
1 bájt | -128 … 127 | 0 … 255 |
short |
2 bájt | -32 768 … 32 767 | 0 … 65 535 |
int |
4 bájt | -2 147 483 648 … 2 147 483 647 | 0 … 4 294 967 295 |
long |
legalább 4 bájt | rendszerfüggő | rendszerfüggő |
long long |
legalább 8 bájt | nagyon nagy tartomány 🙂 | még nagyobb |
💡 Megjegyzés: a konkrét méretek platformfüggők. Kérdezd le:
sizeof(char), sizeof(short), sizeof(int), sizeof(long), sizeof(long long).

A char szó a character rövidítése, egy 1 bájtos (8 bites) adattípus. Ez azt jelenti, hogy:
👉 256 különböző értéket tud tárolni (0–255 vagy -128–127 típustól függően).
👉 Alapvetően egy karaktert reprezentál.
De itt jön a csavar: a char valójában egy pici egész szám de a kiíratásnál betűként jelenik meg. Ez a típus a karakter ASCII-kódját tárolja. Tehát ha azt írod ki:
char c = 97;
std::cout << c; akkor az a betűként fog megjelenni, mert a 97-es az ASCII táblában az a betű. Tehát ha számot teszel a char-ba, akkor az a hozzá tartozó karakterként fog megjelenni.
Tehát a char egy 1 bájtos egész típus, ami ASCII kódot tárol (0-255 vagy -128-127), kiíratva karakterként jelenik meg, de lehet számként is használni. A legtöbb fordító signed char-t használ alapból (-128-127)

A short egy egész típus a C++-ban, ami kevesebb memóriát foglal, mint az int. Kisebb számok tárolására való - gyors, takarékos és szuper, ha nem kell óriási tartomány.
A short legalább 2 bájt (16 bit), 16 biten pedig 2¹⁶ = 65 536 különböző érték ábrázolható.
Alapértelmezetten signed short a típusa (-32768 - + 32767 a tartománya), az unsigned short: 0 - 65535.
Példa a használatára:

❌ Ne használd shortot, ha:
sokat számolsz rajta (CPU-n nincs előnye)
nagy pontosság kell
máshonnan kapott adatot tárolsz (pl. felhasználói bevitel → inkább int)
✔ Ilyenkor jó:
rengeteg kis számot tárolsz tömbben (memória spórolás)
alacsony szintű, bitközeli feladatok (pl. beágyazott rendszerek)
Természetesen ez is túlcsodul, ha a határán túli értéket adsz meg: 32767 + 1 -> -32768 lesz az unsigned shortnál pedig 65535 + 1 -> 0.
Az int a C++ alapértelmezett egész típusa — ha valaki azt mondja, hogy “számot tárolok”, 99%, hogy intre gondol.
Nem túl kicsi, nem túl nagy — épp elég minden hétköznapi számoláshoz: életkor, összegek, pontszámok, számlálók, hőmérséklet… minden, amit egy kezdő programozó valaha tárolni fog. 😄
A legtöbb rendszerben az int 4 bájt (32 bit), tehát:
signed int tartomány:
−2 147 483 648 … +2 147 483 647
unsigned int tartomány:
0 … 4 294 967 295
Mire jó az int?
általános számolásokra
ciklusszámlálókhoz
összegek, darabszámok tárolására
menüpontok számához
pontszámokhoz
gyakorlatilag mindenhez, ami egész szám
Ha nem tudod, melyik egésztípust válaszd → int.
Ez az alapértelmezett, és a CPU is erre van optimalizálva, szóval gyors.
Az int is túl tud csordulni, csak ritkábban fordul elő, mert hatalmas a tartománya. Az, hogy nálad pontosan mekkora a sizeof paranccsal tudod lekérdezni: std::cout << sizeof(int) << " bajt\n";
A legtöbb gépen 4 bájt.

A long egy egész számokat tároló típus C++-ban, ami legalább akkorára van méretezve, mint az int — de sok rendszeren még nagyobb tartományt enged.
⚡ Minimum mérete: 4 bájt
⚡ Tartomány: rendszerfüggő (32 vagy 64 bites architektúrától függ)
A legtöbb modern 64 bites gépen:
➡️ signed long: −9 223 372 036 854 775 808 … +9 223 372 036 854 775 807
➡️ unsigned long: 0 … 18 446 744 073 709 551 615
Mire jó a long?
Ha olyan egész számokat akarsz tárolni, amelyek:
✨ nagyobbak, mint amit az int kezel
✨ de nem akarsz egyből long long-ra ugrani
✨ vagy platformfüggetlenül akarsz írni
Tipikus példák:
Nézd meg, a te gépeden mekkora a long:

A long long a C++ egyik óriáskapacitású egész típusa. Ha az int kicsi, a long néha még pont elég…
…de amikor már brutál nagy számokkal kell számolni (banki műveletek, nagy számlálók, algoritmusok), akkor jön a megmentő: a long long
Mérete legalább 8 bájt, azaz 64 bit.
Tartomány (signed long long)
−9 223 372 036 854 775 808
+9 223 372 036 854 775 807
Ez kb. 9 kvintillió — szóval simán elfér benne minden, ami a mindennapi programozásban előfordul.
Unsigned long long:
0 – 18 446 744 073 709 551 615
Ezt is ellenőrizd le, nálad mekkora

A lebegőpontos típusokat tört és valós számok ábrázolására használjuk. Nem egész számot akarsz? Erre van a float és a double kitalálva.
Mérete 4 bájt, pontossága 6-7 számjegy.
A tartomány nagyjából: ±10³⁸
Ez már jó arra, hogy:
átlagokat számolj
százalékokat tárolj
gyors műveleteket végezz
kevésbé pontos számokra támaszkodj
Hátránya: veszít a pontosságából, a képen látszik, hogy a vége kicsit elcsúszik:

Mikor használjuk a float-ot?
ha kevés memória is számít (pl. játékfejlesztésnél rengeteg koordinátát tárolsz)
ha nem kell nagyon nagy pontosság
ha gyors számítások kellenek
De a legtöbb hétköznapi programban inkább a double lesz a nyerő.
Mérete 8 bájt, pontossága 15-16 számjegy
A tartománya nagyjából: ±10³⁰⁸
A legtöbb C++ programban a double az alapértelmezett választás, mert pontosabb, stabilabb, komolyabb számolásokhoz ez kell

A double is lebegőpontos, ezért néhány számot nem tud teljesen pontosan ábrázolni - de sokkal kevésbé pontatlan, mint a float.
A bool (boolean) egy nagyon egyszerű, de mégis nagyon erős adattípus. Csak két értéke lehet:
Ahhoz, hogy ne 1-et és 0-t írjon ki, hanem a true vagy false szavakat, használjuk a
std::cout << std::boolalpha; kifejezést.

A bool egy bájtot foglal el, de belül egy sima szám. A használatát majd a logikai operátorok leckében bővebben megnézzük
Mostanra már nem okoz gondot, hogy:
✔ tudd, mennyi memóriát foglal egy változó
✔ különbséget tegyél egész szám, lebegőpontos és logikai típus között
✔ felismerd, mikor lesz túlcsordulás
✔ használd a sizeof-ot és a formázott kiírást
✔ magabiztosan válassz megfelelő típust a feladathoz
Ez nagyon fontos alap, mert a következő leckéktől kezdve már igazi mini-programokat fogtok építeni!

A kért oldal nem található. Próbáld pontosítani a keresést, vagy használd a fenti navigációt a bejegyzés megkereséséhez.

Eddig már megtanultuk, hogyan tároljunk értéket változókban - most pedig megtanuljuk, hogyan számoljunk velük!
A C++ igazi ereje abban rejlik, hogy a memóriában tárolt értékekkel műveleteket tudunk végezni: összeadni, kivonni, osztani, hasonlítani, logikai döntéseket hozni.
Mielőtt komolyabb programokat írunk, fontos megérteni, hogyan működnek a kifejezések és az operátorok. Ezek azok az éptőkockák, amikből a programod döntései, számításai és feltételei felépülnek.

Minden kifejezés értékekkel és műveleti jelekkel dolgozik. Egy literál az a konkrét érték, amit leírsz a kódban
| Literál típusa | Példa | Jelentés |
|---|---|---|
| Szám literál | 5, -8, 3.14, 5e8 | Egész, negatív, tizedes és normál alakban írt számok |
| Karakter literál | 'a' | Egyetlen karakter (ASCII-ban tárolva) |
| Szöveg (string) literál | "szia" | Karakterek sora (string típus) |
| Logikai literál | true, false | Igaz vagy hamis érték |
Ezeket a literálokat vagy változókat kötjük össze operátorokkal - így jön létre a kifejezés (expression). Operandusoknak nevezzük azokat az elemeket, amiken az operátor dolgozik. Például az a + b kifejezésben a és b operandusok,a + pedig az operátor.
Kifejezésnek (expression) nevezünk bármilyen olyan C++ részt, amelynek van értéke. Például: 3 + 4, x * x, a+b/2.
Minden kifejezés valamit kiszámít, és az eredményt, értéket adja vissza.
Az operátor egy műveleti jel amely két vagy több operanduson dolgozik. Például? +, -, *, /, %
Ezeket matekból már ismered - csak itt a számítógép hajtja végre őket.
A C++-ban többféle operátor van:
| Operátor | Jelentése | Példa | Eredmény |
|---|---|---|---|
| + | összeadás | a + b | 5 + 8 = 13 |
| - | kivonás | a - b | 8 - 5 = 3 |
| * | szorzás | a * b | 5 * 8 = 40 |
| / | osztás | a / b | 5 / 8 = 0 (egész osztás) |
| % | maradékos osztás | a % b | 10 % 8 = 2 |
Ezeket a kifejezéseket már tanultad, amit azonban érdemes kiemelni: ha a és b egész típusú, akkor az osztás eredménye is egész lesz. Ezt megnéztük a változóknál bővebben, de mutatom, mire számíthatsz ilyen esetben:

Ha ezt beírod, az eredmény 0 lesz, mert az egész számok halmazán az 5-ben a 8 nullaszor van meg. Ahhoz, hogy pontosabb, tizedes eredményt kapj, az int helyett lebegőpontos típust kell használnod, például float-ot:

Ami esetleg új lehet, az % - maradékos osztás. Ez egész számokkal működik és az osztás maradékát adja vissza.
Ahogy a matekban is, itt is van műveleti prioritás. A szorzás és az osztás előrébb van, mint az összeadás és a kivonás. De lényegesen több operátort használunk, ezért több műveleti sorrendre is figyelni kell. A teljes műveleti sorrendet (precedence és associativity) itt találod:
🔗 cppreference.com – Operator precedence
Az asszociativitás azt mondja meg, hogy balról jobbra vagy jobbról balra értékelődik-e a művelet.
Ha felül akarod bírálni, itt is zárójeleket kell használni:
x = 5 + 3 * 2 -> x = 11
x = (5 + 3) * 2 -> x = 16
| Operátor | Jelentése | Példa | Eredmény |
|---|---|---|---|
| == | egyenlő | 8 == 10 | false |
| != | nem egyenlő | 8 != 10 | true |
| < | kisebb mint | 3 < 8 | true |
| > | nagyobb mint | 10 > 8 | true |
| <= | kisebb vagy egyenlő | 5 <= 5 | true |
| >= | nagyobb vagy egyenlő | 7 >= 8 | false |
A true = 1, a false pedig = 0-ként jelenik meg. Itt érdemes azt is megjegyezni, hogy a << kiíratás jele is egy operátor, aminek ráadásul a precedenciája magasabb, mint például a == -é. Ezért ez a művelet hibára fog futni:

Ilyenkor zárójelezzük, hogy az összehasonlítást végezze el

Nyilván a 10 nem egyenlő a 8 értékével, ezért ez az állítás hamis, azaz 0 lesz az eredmény.
Logikai értékeket kapcsolnak össze, például true / false típusokat. Nagyon fontosak lesznek majd az if feltételeknél.
| Operátor | Jelentése | Példa | Eredmény |
|---|---|---|---|
| ! | NEM (NOT) – megfordítja az igazságértéket | !(5 == 5) | false |
| && | ÉS (AND) – akkor igaz, ha mindkettő igaz | (3 > 1 && 7 < 10) | true |
| || | VAGY (OR) – csak akkor hamis, ha mindkettő hamis | (3 > 5 || 2 > 7) | false |
Pár megjegyzés hozzá: itt is fontos a zárójelezés, mert a << precedenciája magasabb, mint a logikai operátoroké
! előtag: bármi elé teheted, ami logikai értékre értékelődik, például: !(a == b)
&& - csak akkor igaz, ha mindkét oldal igaz. Ha az A hamis, akkor a B már nem számolódik ki
|| - csak akkor hamis, ha mindkét oldal hamis. Ha az A igaz, akkor a B már nem számolódik ki
| A | B | A && B |
|---|---|---|
| false | false | false |
| false | true | false |
| true | false | false |
| true | true | true |
| A | B | A || B |
|---|---|---|
| false | false | false |
| false | true | true |
| true | false | true |
| true | true | true |
| A | !A |
|---|---|
| false | true |
| true | false |
| Operátor | Jelentése | Példa | Magyarázat | Eredmény |
|---|---|---|---|---|
| = | egyszerű értékadás | a = b; | a értéke felveszi b aktuális értékét (a felülíródik) | ha b = 10 → a = 10 |
| += | hozzáadás és értékadás | x += 3; | rövidítés az x = x + 3 formára |
ha x 5 volt → x = 8 |
| -= | kivonás és értékadás | x -= 2; | rövidítés az x = x - 2 formára |
ha x 8 volt → x = 6 |
| *= | szorzás és értékadás | x *= 2; | rövidítés az x = x * 2 formára |
ha x 6 volt → x = 12 |
| /= | osztás és értékadás | x /= 3; | rövidítés az x = x / 3 formára |
ha x 12 volt → x = 4 (egész osztásnál) |
Néhány megjegyzés hozzá:
Az értékadás asszociativitása jobbról balra halad, azaz a = b = 10-nél először a b = 10, majd az a = 10.
A bal oldalnak írhatónak kell lennie, literálnak nem lehet értéket adni.
Típuseltérésekél konverzió történik: double d = 3.5; int x = 0; x = d -> x 3 lesz, a tört rész levágódik.
| Forma | Jelentése | Példa | Egyenértékű hosszú alak | Hatás a változóra |
|---|---|---|---|---|
| ++x | növelés eggyel (prefix) | ++b; | b = b + 1; (ugyanaz, mint b += 1) | b értéke azonnal nő |
| x++ | növelés eggyel (postfix) | b++; | b = b + 1; | b nő, de a kifejezés **régi** értéket ad vissza |
| --x | csökkentés eggyel (prefix) | --b; | b = b - 1; (ugyanaz, mint b -= 1) | b értéke azonnal csökken |
| x-- | csökkentés eggyel (postfix) | b--; | b = b - 1; | b csökken, de a kifejezés **régi** értéket ad vissza |
Mit jelent a prefix - postfix a gyakorlatban?
int x = 5
int y = ++x //prefix
1. lépés: ++x -> növeli x-et hatra
2. lépés: az új értéket (6) adja vissza
3. lépés: y megkapja az új értéket (6)
-> tehát x=6, y=6
Most ugyanez postfix-szel:
int x = 5;
int y = x++ //postfix
1. lépés: előbb visszaadja a régi értéket (5)
2. lépés: növeli az x-et hatra
3. lépés: y az eredeti 5-öt kapja meg
-> tehát x=6, y=5
Ha növelni akarod a változót, akkor mindegy, melyiket használod, de ha kifejezésben szerepel, akkor nem.
Ha x = 5
y = x++ + 2; -> y = 7, x = 6
y = ++x + 2 -> y = 8, x = 6
1. Műveletek gyakorlása: írj egy programot, ami két számot bekér, majd kiírja:

2. Írj egy programot, ami két számról megmondja, hogy:

3. Prefix és postfix közti különbség: magyarázd el, mit kapsz és miért?


4. Mennyi lesz az eredmény és miért? (műveleti sorrend)

Először a 2+5 számolódik ki, az 7, majd a *= értékadás. 
5. Logikai gyakorlás. Írd le, miért 1 vagy 0 az eredmény:

a - igaz
b - hamis - innen indul a logikai műveletünk
!a -> ha a igaz, akkor az a hamis lesz. Ekkor hamis || hamis ->az eredmény hamis. Kimenet: false
(a && !b) > mivel a b hamis, a !b igaz lesz. A igaz és B igaznál az egész kifejezés igaz.
6. Mi lesz az eredmény és miért?
int a = 5 / 2;
float b = 5 / 2;
float c = 5 / 2.0
float d = 5.0 / 2;
float e = (float)5/2;

1. - mindkét operandus, az 5 és a 2 egész szám (int) Egész számoknál a C++ levágja a tizedes részt.
2. float a változó, de a művelet két int között zajlik. Kiszámolja az osztást egész osztásként és csak az eredményt alakítja át float típusra
3. Az egyik operandus lebegőpontos, a másik operandust automatikusan előrelépteti lebegőpontos típusra
4. ugyanaz az eset, csak a másik oldal a lebegőpontos
5. Itt te kényszeríted az első operandust lebegőpontos típusra.
