Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12.
Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk el A program alapeleme a main() függvény, a program futása itt kezd dik
Típusok C++ típusok EGÉSZ : int : ha int-et osztunk int-tel, akkor az egészosztás! (PlanG-ban DIV volt) VALÓS : double LOGIKAI : bool KARAKTER : char SZÖVEG : string : #include<string> szükséges!
Hello World! Hello World! program #include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; }
Hello World! #include <iostream> #include <iostream> Ezzel jelezzük a fordítónak (pontosabban az el feldolgozónak (C++ PreProcessor)), hogy ide másolja be az iostream fájl tartalmát. Az iostream fájlban vannak a standard ki- és bemenethez szükséges parancsok (pl. cout, cin, endl)
Hello World! using namespace std; using namespace std; Ezzel kiválasztjuk az std névteret. Mivel a cout, cin, endl parancsok az std névtérben vannak, így ez szükséges. Ha ezt nem írnánk ide, akkor a programot így kellene megírnunk: #include <iostream> int main() { std::cout << "Hello World!" << std::endl; }
Hello World! using namespace std; A névtereket tekinthetjük úgy, mint vezetékneveket. A using namespace-szel kijelölünk egy "családot", így a fordító tudni fogja, hogy hol keressen. Ha nem adjuk meg, akkor "teljes nevükön kell szólítani" a parancsokat (pl. std::cout).
Hello World! int main() { int main() { A main-függvény feje. A main függvény tartalmazza a programot, itt kezd dik a program futása, az itt lév utasítások egymás után lefutnak. return 0; Igazán jelent sége számunkra nincs, elhagyható. (Az operációs rendszer számára ad visszajelzést a program sikeres/sikertelen lefutásáról)
Hello World! cout «"Hello World!" «endl; cout "Hello World!" endl; A kimenetre kiírjuk, hogy "Hello World!", majd egy sorvége jelet (endl). A kiírandó elemeket a jel választja el egymástól. (A vagy jelek mindig arra mutat, amerre "megy" az adat.) A "Hello World"» cout; érvénytelen forma! Tehát nem fog m ködni...
Elágazás Elágazás - példa Feladat: I-1.) Döntsd el egy egész számról, hogy páros-e! (Szövegesen írjuk ki) Specikáció: BE: pozitív egész szám KI: páros-e
Elágazás I-1. #include <iostream> using namespace std; int main() { int number; cout << "Kerek egy egesz szamot:"; cin >> number; if ( (number % 2) == 0 ) cout << "A szam paros.\n"; else cout << "A szam paratlan.\n"; return 0; }
FOR ciklus Számláló ciklus (for) - példa II-1.a) Írj ki N darab csillagot! Specikáció: BE: pozitív egész szám (n) KI: n darab csillag egy sorban
FOR ciklus Írj ki N darab csillagot! #include <iostream> using namespace std; int main() { int n; cout << "Kerek egy szamot: "; cin >> n; for (int i = 0; i < n; ++i) { cout << * ; } cout << endl; return 0; }
Feladatok Feladatok (az el z gyakorlatról) I-4.) Számítsd ki egy adott sugarú gömb térfogatát! II-1.b) "Rajzolj" ki egy NxN-es négyzetet *-okból! II-6.) Állíts el N darab véletlenszámot!
Szövegkezelés Szövegkezelés C++-ban lehet ségünk van szövegek kezelésére. C-ben karakterek tömbjét használták. C++-ban is gyakorlatilag err l van szó, csak ki van pótolva egy csomó m velettel. A szöveg típusa a string. FONTOS! #include <string> szükséges, valamint a string (is) az std névtérben van.
Szövegkezelés Szövegkezelés, alapok Egy string típust így deklarálhatunk: string vmi; Adhatunk neki egyb l kezd értéket: string vmi = "hello world!"; A szövegeket (stringeket) " "-be, a karaktereket ' '-ba kell tenni.
Szövegkezelés M veletek Szövegkezelés, m veletek Lekérdezhetjük a hosszát: vmi.length() Lekérdezhetünk egy adott helyen lév karaktert: vmi[3] Az indexelés 0-val kezd dik! Tehát az utolsó karakter: sz[ sz.length() - 1 ]
Szövegkezelés M veletek Szövegkezelés, m veletek (folyt.) Hozzáf zhetünk (konkatenáció): vmi += "ezt hozzafuzom"; Részszöveg lekérdezés: vmi.substr(2) Ez a 2-es indext l a szöveg végéig adja vissza. Pl. ha a string eredetileg "háziállat" volt, akkor a substr(4) azt fogja visszaadni, hogy "állat". vmi.substr(4,3) Ez a 4-es indext l kezdve, a következ 3 karaktert adja vissza. Pl. "háziállat"-ra a substr(4,3) azt fogja adni, hogy "áll".
Szövegkezelés M veletek string bekérése cin-r l Bekérhetünk így is egy szöveget: cin» szoveg; De így, ha szóközt teszünk a szó elejére, akkor azt nem veszi gyelembe! Emiatt biztonságosabb, ha így olvasunk be string-et: getline(cin, in); Szintaktikája: getline(honnan, hova)
Szövegkezelés ASCII ASCII Minden karakternek van egy kódja (ASCII-kód). Ennek a kódnak alapján összehasonlíthatunk két karaktert, mert a kódolás abc-sorrendben van. Így ellen rizhetjük le azt is, hogy egy karakter szám-e. A nulla kódja a 48, a kilencesé 57. if (c >= 48 && c <= 57) cout «"szam" «endl; Vagy egyszer bben: if (c >= 0 && c <= 9 ) cout «"szam" «endl; http://hu.wikipedia.org/wiki/ascii http://www.asciitable.com/
Szövegkezelés Feladatok Feladatok - szövegkezelés I-14.) Döntsd el egy szövegr l, hogy szóközzel kezd dik-e! I-15.) Döntsd el egy szövegr l, hogy nagybet vel kezd dik-e! I-16.) Döntsd el egy szövegr l, hogy számjegyre végz dik-e! Megjegyzés Érdemes a három feladatot egy programba írni. Tehát el ször beolvasni, aztán a három feltételt vizsgálni!
Szövegkezelés Házi feladatok Házi feladatok II-4.) Sorold fel az els N négyzetszámot! I-7.) Döntsd el két számról, hogy megegyezik-e az el jelük! III-5.) Add meg két természetes szám legnagyobb közös osztóját! II-20.b) Fordíts meg egy tetsz leges szöveget!