Algoritmusok, Karakterek és Tömbök
A 3. heti egyetemi tananyagok kidolgozása: prímkereső algoritmus, karakterfüggvények (isalpha, isdigit), a lusta kiértékelés elve, valamint fix méretű tömbök kezelése ciklusokkal.
1. Prímszám Ellenőrző Algoritmus
Egy szám akkor prím, ha pontosan két osztója van (1 és önmaga). Az órai algoritmus elöltesztelő while ciklussal dolgozik: a 2-től induló számlálóval elosztja a vizsgált számot. Optimalizálás: nem kell végigmenni a teljes számig, elegendő a szám feléig (szam / 2) keresni osztót!
// 3. Hét / 3.3.cpp - Prímszám vizsgálat (NJE órai algoritmus)
#include <iostream>
using namespace std;
int main()
{
int i = 2, szam, osztokszama = 0;
cout << "Adjon meg egy szamot: ";
cin >> szam;
// Elég a szám feléig (szam / 2) vizsgálni az osztókat:
while (i <= szam / 2 && osztokszama == 0)
{
if (szam % i == 0)
{
osztokszama++;
}
i++;
}
if (osztokszama > 0 || szam < 2)
{
cout << "A megadott szam nem prim!" << endl;
}
else {
cout << "A megadott szam prim!" << endl;
}
return 0;
} 2. Az ASCII Kódtábla Megjelenítése (0 – 255)
A C++-ban a karakterek (char) valójában egész számok. A for (int i = 0; i < 256; i++) ciklus bejárja a teljes bájt-tartományt, és a (char)i típuskényszerítéssel kirajzolja az ASCII jeleket.
// 3. Hét / 3.7.cpp - Teljes ASCII kódtábla kiíratása (0-255)
#include <iostream>
using namespace std;
int main()
{
// A 0-tól 255-ig terjedő egész számokat típuskényszerítjük (char) karakterré
for (int i = 0; i < 256; i++)
{
cout << i << ": " << (char)i << endl;
}
return 0;
} 3. Karakterkezelő Függvények (isalpha, isdigit)
A <cctype> szabványos C++ könyvtár gyors függvényeket kínál karaktervizsgálathoz:
isalpha(c): Igaz (nem nulla), ha a karakter betű.isdigit(c): Igaz (nem nulla), ha a karakter számjegy (0-9).toupper(c)/tolower(c): Kis- és nagybetűssé alakítás.
// 3. Hét / 3.8.cpp - Karakter vizsgálat: isalpha és isdigit
#include <iostream>
#include <cctype> // Karakterkezelő függvények könyvtára
using namespace std;
int main()
{
char karakter;
int betu, szam;
cout << "Adjon meg egy karaktert: ";
cin >> karakter;
// isalpha: nem nulla, ha a karakter betű ('a'-'z', 'A'-'Z')
// isdigit: nem nulla, ha a karakter számjegy ('0'-'9')
betu = isalpha(karakter);
szam = isdigit(karakter);
if (betu)
{
cout << "A megadott karakter betu" << endl;
}
else if (szam)
{
cout << "A megadott karakter szam" << endl;
}
else {
cout << "A megadott karakter egyeb jel" << endl;
}
return 0;
} 4. Lusta (Lazy) vs Gyors (Eager) Kiértékelés
A prezentáció részletesen bemutatja a két kiértékelési stratégiát:
A program azonnal kiszámítja egy kifejezés értékét, amint hozzárendeli egy változóhoz vagy átadja paraméterként, akkor is, ha később nem használja.
A program elhalasztja a számítást addig, amíg ténylegesen szükség nincs rá. C++-ban a logikai && és || operátorok pontosan így működnek: ha az első tag eldönti az eredményt, a másodikat nem értékeli ki!
// Lusta (Lazy) vs Gyors (Eager) kiértékelés C++ logikai kifejezésekben
#include <iostream>
using namespace std;
bool ellenorzes() {
cout << "-> ellenorzes() fuggveny lefutott!" << endl;
return true;
}
int main() {
int a = 0;
cout << "1. Teszt: Logikai ES (&&) rovidzar:" << endl;
// Mivel (a != 0) HAMIS, a C++ nem értékeli ki a második tagot!
if (a != 0 && ellenorzes()) {
cout << "Igaz" << endl;
} else {
cout << "Hamis (az ellenorzes() nem futott le, megsporolva az idot!)" << endl;
}
cout << "\n2. Teszt: Logikai VAGY (||) rovidzar:" << endl;
int b = 5;
// Mivel (b > 0) IGAZ, a C++ azonnal leáll, a jobb oldal nem fut le:
if (b > 0 || ellenorzes()) {
cout << "Igaz (az ellenorzes() itt sem futott le!)" << endl;
}
return 0;
} 5. C++ Tömbök Alapjai (Deklaráció, Inicializálás, Összegzés)
A tömb azonos típusú elemek folytonos memóriaterületen tárolt sorozata. Az elemek indexelése mindig 0-tól indul és méret - 1-ig tart.
// 3. Hét / 3.9.cpp - Egész és karakter tömbök kezelése C++-ban
#include <iostream>
using namespace std;
int main()
{
int tmb[8], osszeg = 0;
// 8 elemű karaktertömb inicializálása
char Tmb[8] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
// 1. Egész típusú tömb feltöltése a felhasználótól ciklussal és összegzés
for (int i = 0; i < 8; i++)
{
cout << "Adja meg a(z) " << i + 1 << ". elemet a tombnek: ";
cin >> tmb[i];
osszeg = osszeg + tmb[i];
}
cout << "\nA tomb elemeinek osszege: " << osszeg << endl;
// 2. Karaktertömb elemeinek megjelenítése
cout << "\n--- Karaktertomb elemei ---" << endl;
for (int i = 0; i < 8; i++)
{
cout << i + 1 << ". karakter: " << Tmb[i] << endl;
}
// 3. Egész számok megjelenítése index szerint
cout << "\n--- Szamtomb elemei ---" << endl;
for (int i = 0; i < 8; i++)
{
cout << i + 1 << ". szam: " << tmb[i] << endl;
}
return 0;
}