Alkalmazott modul: Programozás. C++ alapismeretek. C++ alapismeretek Történet



Hasonló dokumentumok
Alkalmazott modul: Programozás 2. fejezet. C++ alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Bevezetés a programozásba I.

Bevezetés a programozásba I.

A C# programozási nyelv alapjai

Bevezetés a programozásba I 7. gyakorlat. C++: szövegkezelés, szekvenciális fájlkezelés. Szövegkezelés Karakterkezelés

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Java II. I A Java programozási nyelv alapelemei

Informatika terméktervezőknek

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Programozás II. 2. Dr. Iványi Péter

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Szoftvertervezés és -fejlesztés I.

1. Alapok. Programozás II

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Java II. I A Java programozási nyelv alapelemei

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Maximum kiválasztás tömbben

Készítette: Nagy Tibor István

Pénzügyi algoritmusok

A C# PROGRAMOZÁSI NYELV

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Bevezetés a C++ programozásba

Bevezetés a programozásba I.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

A C programozási nyelv I. Bevezetés

PPKE-ITK Bevezetés a programozásba 1.

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

A C programozási nyelv I. Bevezetés

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

7. fejezet: Mutatók és tömbök

Occam 1. Készítette: Szabó Éva

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Programozási nyelvek Python

Mintavételes szabályozás mikrovezérlő segítségével

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

C programozási nyelv

Programozási nyelvek (ADA)

Szövegek C++ -ban, a string osztály

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

1. Jelölje meg az összes igaz állítást a következők közül!

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Programozási alapismeretek 1. előadás

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Pénzügyi algoritmusok

Webprogramozás szakkör

3. Osztályok II. Programozás II

Internet programozása. 3. előadás

Programozás I. gyakorlat

Programozás C és C++ -ban

Programozás alapjai 9.Gy: Struktúra 2.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

8. gyakorlat Pointerek, dinamikus memóriakezelés

Forráskód formázási szabályok

C# gyorstalpaló. Készítette: Major Péter

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

1. Alapok. #!/bin/bash

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Java programozási nyelv

Vezérlési szerkezetek

Készítette: Nagy Tibor István

Bevezetés a programozásba. 9. Előadás: Rekordok

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Kifejezések. Kozsik Tamás. December 11, 2016

Programozás alapjai. 5. előadás

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Szoftvertechnológia alapjai Java előadások

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Szkriptnyelvek. 1. UNIX shell

Programozás II. 4. Dr. Iványi Péter

Algoritmizálás + kódolás C++ nyelven és Pascalban

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

A C programozási nyelv II. Utasítások. A függvény.

Stack Vezérlés szerkezet Adat 2.

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

MATLAB alapismeretek I.

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

BASH script programozás II. Vezérlési szerkezetek

Bevezetés a C++ programozási nyelvbe

A C programozási nyelv III. Pointerek és tömbök.

Pénzügyi algoritmusok

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Bevezetés a programozásba I 1. gyakorlat. Programozási alapismeretek, a PLanG programozási nyelv. Programozási alapismeretek.

1. gyakorlat

Apple Swift kurzus 3. gyakorlat

A C programozási nyelv III. Pointerek és tömbök.

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Történet Wikipédia: a C++ általános célú, magas szintű programozási nyelv, mely támogatja az imperatív, az objektum-orientált, valamint a sablonprogramozást Első változata 1979-ben készült (Bjarne Stroustroup) a C programozási nyelvből, eredetileg C with Objects névvel célja: objektumorientált programozási lehetőségekkel való kiegészítése a nyelvnek jelenleg a 2014-es szabványt használjuk (C++14) 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Többek szerint közepes szintű nyelvnek tekinthető, mert alacsonyabb szinten használatos utasítások (bit szintű műveletek, direkt memóriaműveletek, ) is használhatóak ELTE TTK, Alkalmazott modul: Programozás 2 Történet Az alap nyelv csak konzol-alkalmazások készítésére szolgál sok kiegészítő található hozzá, amelyek segítségével sok megoldást implementálni lehet (pl. grafikus környezet) A világ egyik leggyakrabban használt programozási nyelve: a szabvány teljesen szabad, ingyenes önmagában minden lehetséges nyelvi eszközt megad, amelyre a programozás során szükségünk lehet gyors, hatékony programokat készíthetünk benne sok fordító, fejlesztőkörnyezet készült hozzá több nyelv alapjául szolgált: JAVA, C#, PHP, ELTE TTK, Alkalmazott modul: Programozás 3 A Hello World program Feladat: Írjuk ki a Hello World! feliratot a képernyőre. Megoldás: // fejrész: #include <iostream> // további fájlok beolvasása using namespace std; // használni kívánt névtér // törzsrész: int main() // főprogram deklaráció { cout << "Hello, World!" << endl; // kiírás return 0; // érték visszaadás // főprogram vége ELTE TTK, Alkalmazott modul: Programozás 4 Fejrész A program elején van a fejrész, ami tartalmazza: a program működéséhez szükséges további fájlok neveit a programban használt névtereket a programban előre definiált elnevezések (makrók) értékeit ezek olyan elnevezés - érték párok, amelyeknél a fordítás előtt behelyettesíti a programban az első érték összes előfordulását a második értékkel szerkezete: #define <elnevezés> <érték> pl.: #define ALMA 100 // az ALMA helyére mindenhova 100-t ír tartalmazhat összetett kifejezéseket is ELTE TTK, Alkalmazott modul: Programozás 5 Fejrész A C++ utasításai és típusai több fájlban helyezkednek el, az írandó programok általában önmagukban nem működőképesek, használnunk kell a további fájlokban megírt utasításokat Mi is elhelyezhetjük a programkódunkat több fájlban (majd később lesz), amiket szintén használni szeretnénk Ehhez meg kell adnunk a használandó fájlok neveit #include <fájlnév> - a beépített fájlok között keres, amik a C++ környezetben megvannak #include "fájlnév" aktuális könyvtárban keres Ekkor a program fordításakor a berakott fájlok teljes tartalma átmásolódik a mi programunkba ELTE TTK, Alkalmazott modul: Programozás 6 1

Névterek Amikor további beépített fájlokat használunk a programban, az ott található utasítások csoportosítva vannak úgynevezett névterekbe, hogy megkülönböztessük a különböző funkciókat ellátó utasításokat A programban meg kell mondanunk, hogy melyik névtérből származnak a használni kívánt utasítások, ennek két módja: a fejrészben kiadjuk a using namespace <név>;, utasítást, ekkor a fájl hátralevő részében az adott névteret használjuk a használandó utasítást a következő a <névtérnév>::<parancsnév> formában írjuk le, ekkor megmondjuk, hogy a parancs a megadott névtérből való, pl.: std::cout ELTE TTK, Alkalmazott modul: Programozás 7 Törzsrész A programok törzsrésze függvényekből áll a függvény a program egy saját működéssel rendelkező része, amely értéket ad vissza az őt meghívó utasításnak a visszaadott érték a visszatérési érték, amelyet a return utasítással adunk meg, a függvény működése mindig leáll ennél a pontnál, amit utána írunk, az nem kerül végrehajtásra az általunk írt programban a programhívó eljárás a main függvényt hívja meg (az pedig további függvényeket hívhat meg, ez majd lesz később ) A main függvény egész típusú (visszatérési értékű), ezért a függvény vége előtt vissza kell adnunk egy egész számot ELTE TTK, Alkalmazott modul: Programozás 8 Törzsrész A main függvény szerkezete: int main() { // utasítások return 0; // visszaadunk egy 0-s értéket A main függvényben az úgynevezett hibakódot szokás visszaadni, azaz, hogy hiba történt-e a program futása során (0: nem történt hiba, 1,2, : valamilyen hiba történt) A hibakód jelentése nincs előre szabályozva, a programozó dönti el, hogy a visszaadott hibakód milyen hibát kíván reprezentálni (ezt például dokumentációba lehet leírni) Szekvencia: az utasítások végére ;-t kell tenni egy sorban lehet több utasítást is írni, illetve egy utasítást lehet több sorban is írni Programblokk: utasítások csoportosításai egy programblokk: { <utasítások> programblokkok tartalmazhatnak további blokkokat, így egymásba ágyazott szerkezetet készíthetünk, pl.: { <ut.> { <ut.> { <ut.> <ut.> ELTE TTK, Alkalmazott modul: Programozás 9 ELTE TTK, Alkalmazott modul: Programozás 10 Elágazás: feltételtől függően különböző utasítások végrehajtása: if <feltétel> // logikai kifejezés { <igaz ág utasításai> else { <hamis ág utasításai> a hamis ág itt is elhanyagolható, ekkor a szerkezet: if <feltétel> { <igaz ág utasításai> ha csak egy utasítást akarunk írni, a blokkot elhagyhatjuk: if <feltétel> <igaz ág utasítása> else <hamis ág utasítása> ELTE TTK, Alkalmazott modul: Programozás 11 Többágú elágazás: egy változó aktuális értékének függvényében futtat le adott utasításokat csak meghatározott értékek esetén fut le az adott ág, nem lehet értékhatárokat, illetve egyéb kifejezéseket megadni switch(<változónév>){ case <érték1>: <utasítások> break; case <érték2>: <utasítások> break; default: <utasítások> ELTE TTK, Alkalmazott modul: Programozás 12 2

egy ág végét a break utasítással jelöljük, ha ezt elmulasztjuk a következő ág első utasítása következik lehet különben ágat készíteni, ennek jelölése default lehetőségünk üres ágakat is írni, ezzel lehetőségünk van több értékhez ugyanazt az ágat rendelni switch(<változónév>){ case <érték1>: case <érték2>: case <érték3>: <utasítások> // ezek az utasítások a három érték // bármelyike esetén lefutnak break; Ciklus: utasítások ismétlése a megadott feltétel függvényében, a feltétel logikai értékű kifejezés lehet a ciklusmag egy, vagy több utasításból állhat, ha csak egy utasítást írunk, nem kell blokkot használni előtesztelő: while <feltétel> { <utasítások> utántesztelő: do { <utasítások> while <feltétel>; ELTE TTK, Alkalmazott modul: Programozás 13 ELTE TTK, Alkalmazott modul: Programozás 14 a számláló szerkezete itt teljesen elkülönül: for (<számláló kezdőérték>; <számláló feltétele>; <számláló inkrementálás>){ <utasítások> de természetesen előtesztelő ciklussal is meg lehet fogalmazni a számlálót, az eredmény ugyanaz lesz: <számláló kezdőérték>; while (<számláló feltétele>){ <utasítások> <számláló inkrementálás> Megjegyzések Megjegyzést bárhol elhelyezhetünk a kódban elhelyezhetjük a sor végén, akkor az utána a sorba írt utasításokat nem veszi figyelembe: <utasítás>; // megjegyzés elhelyezhetjük a sor közben, illetve bármely utasítás közben (ügyelve arra, hogy nem szó közben írjuk), ekkor a komment után lévő utasításokat figyelembe veszi <utasítás>; /* megjegyzés */ <utasítás>; /* megjegyzés */ <utasítás eleje> /* megjegyzés */ <utasítás vége>; ELTE TTK, Alkalmazott modul: Programozás 15 ELTE TTK, Alkalmazott modul: Programozás 16 Értékadás (=) jelentése: a balérték egyezzen meg a jobbértékkel a bal oldalán változó állhat, a jobb oldalán egy kifejezés (amelynek eredménye kompatibilis a változó típusával) pl.: b = 3 // a b értéke legyen 3 Matematikai műveletek eredményünk a bemenettel megegyező típusú összeadás (+), kivonás ( ), szorzás (*), osztás (/), maradékvétel (%) pl.: a % 3 // a modulo 3 ELTE TTK, Alkalmazott modul: Programozás 17 Értékmódosítások eggyel növeli, vagy csökkenti a szám értékét inkrementálás (++), dekrementálás ( ) pl.: a++ // növeljük meg a értékét 1-gyel két módon lehet megadni, a változó előtt, illetve mögött, a különbség a végrehajtási sorrendben van (ha előtte értékadás található, akkor történhet az érték átadása a módosítás előtt, illetve után is) pl.: b = a++; // a értékét átadjuk b-nek, majd // a-t növeljük b = ++a; // a értékét növeljük, majd // átadjuk b-nek ELTE TTK, Alkalmazott modul: Programozás 18 3

Összehasonlító műveletek eredményük logikai típusú lesz a balértéket hasonlítja a jobbértékkel egyenlőségvizsgálat (==), különbségvizsgálat (!=), kisebb (<), nagyobb (>), kisebb, vagy egyenlő (<=), nagyobb, vagy egyenlő (>=) pl.: b == 3 // a b értéke egyenlő-e 3-mal? Logikai műveltek logikai értékeken végeznek logikai eredményű műveletet tagadás (!), és (&&), vagy ( ) pl.:!(a && b) // nem (a és b) ELTE TTK, Alkalmazott modul: Programozás 19 Speciális értékadások: add hozzá (+=), vond ki belőle (-=), vedd modulo (%=), pl.: a = a+2 helyett a+=2, a = a%2 helyett a %= 2 feltételesen tedd egyenlővé (>>=, <<=), pl.: a >>=2 jelentése: ha a nagyobb kettőnél, akkor legyen az értéke 2 Tömbelem indexelése ([]) tömb (vektor), illetve szöveg bármely elemét lekérdezhetjük, módosíthatjuk az indexelés 0-tól kezdődik pl.: a[3] // az a tömb 3-as indexű eleme ELTE TTK, Alkalmazott modul: Programozás 20 Bitenkénti műveletek az értékeink tényleges eltárolt bináris változatát is tudjuk manipulálni bitenkénti eltolás balra (<<), bitenkénti eltolás jobbra (>>), komplemens képzés (~), bitenkénti és (&), bitenkénti vagy ( ), kizáró vagy (^) pl.: a ^ b // a XOR b Változók Változókat bárhol deklarálhatunk a kódunkban, nincs külön deklarációs rész ha minden programblokkon, függvényen kívül deklaráljuk őket, akkor a deklarálás pontjától a program végéig bárhol (bármilyen függvényben, illetve programblokkban) elérhetőek lesznek, ezek az úgynevezett globális változók ha valamely programblokkban, függvényben deklaráljuk őket, akkor csak annak végéig lesznek elérhetőek, utána megsemmisülnek, és nem lehet hivatkozni rájuk, ezeket lokális változóknak nevezzük globális változók használatát lehetőleg kerüljük el, mert könnyen vezetnek hibás működéshez ELTE TTK, Alkalmazott modul: Programozás 21 ELTE TTK, Alkalmazott modul: Programozás 22 Konstansok A C++ erősen típusos nyelv, azaz minden változónak létrehozásakor meg kell adnunk a típusát, és azt a fordító nyomon fogja követni a program lefordításakor változó deklaráció: <típus> <változónév>; lehetőségünk van kezdőértéket is adni a változónak: <típus> <változónév> = <kezdőérték>; Egyszerre több változót deklarálhatunk vesszővel elválasztva Elnevezett konstansokat a const kulcsszóval hozhatunk létre, ekkor értéket is kell nekik adnunk: const <típus> <változónév> = <kezdőérték>; Logikai típus (bool): felvehető értékek: true, false meg lehet adni neki egész számokat is, ekkor a 0 értéke a hamis, minden más igaz, ha kiíratunk egy logikai változót, akkor 0-t, vagy 1-t ír ki logikai, illetve bitenkénti műveletek végezhetőek rajta, a bitenkénti művelet megfeleltethető a logikai műveletnek (pl. tagadás és komplementer) pl.: bool a, b, c; a = true; b = false; c = a!(~a && b) && true; ELTE TTK, Alkalmazott modul: Programozás 23 ELTE TTK, Alkalmazott modul: Programozás 24 4

Egész típusok: attól függően, mekkora méreten szeretnénk eltárolni az értéket, különböző kulcsszavakat használhatunk (a pontos méretek implementációfüggőek): short (ált. 16 bit): 32768 - +32767 int (ált. 32 bit): 2147483648 - +2147483647 long (ált. 64 bit): 2147483648 - +2147483647 kompatibilisek egymással, illetve a logikai és valós típussal egészek osztása egész eredményt ad pl.: int a = 2, b = 4; a = (a * (b + 6) 4.3) % a; Valós, lebegőpontos típusok: kulcsszavai: float, double, long double a méretek implementációfüggőek (balról jobbra növekvően), a típusok kompatibilisek egymással, az egész típusokkal, illetve a logikai típussal Karakter típus (char): a karaktereket szimpla idézőjelben kell megadnunk mivel ténylegesen a karakterek ASCII kódját tárolja, így kompatibilis az egész típussal pl.: char a, b ='y'; (a++ == 'b') ELTE TTK, Alkalmazott modul: Programozás 25 ELTE TTK, Alkalmazott modul: Programozás 26 Szöveg típus (string): dupla idézőjelben kell megadnunk a konstansokat nem beépített típus, ezért használatakor hivatkoznunk kell az őt tartalmazó fájlra (#include <string>) igazából karakterek tömbjeként működik, azért használható az indexelő ([]) operátor lekérdezhető a hossza: <változónév>.size(); szöveget lehet konkatenálni az összeadás (+) operátorral pl.: string a = "a", b = "szöveg"; a = a + " " + b; // konkatenáció int x = a.size(); // x = 8 lesz ELTE TTK, Alkalmazott modul: Programozás 27 Tömbök: minden típusból készíthetünk tömböt, ehhez csak az elemek számát kell megadnunk létrehozáskor a [ ] operátor segítségével méretként csak konstans egész érték adható meg pl.: int a[10]; // 10 elemű egészekből álló // tömb létrehozása elem lekérdezése és beállítása ugyanezzel az operátorral, ahol az indexek 0-tól a tömb mérete -1-ig tartanak, ha túlindexelünk, az futási idejű hibához vezet lehet többdimenziós tömböket (mátrixokat) is készteni ELTE TTK, Alkalmazott modul: Programozás 28 Konzol használat A C++ adatbeolvasásra és megjelenítésre alapvetően konzol felületet használ (külső könyvtárakkal grafikus felület is támogatható) A konzolon csak egyféle színben, egyféle betűtípussal tudunk kiíratni karaktereket A konzolra történő beolvasás-kiírásnál a műveleteket külön fájlban, az iostream (input-output stream)-ben találjuk, ezért ezt kell használnunk a programban: #include <iostream> Az iostream a standard névtérbe tartozik: using namespace std; Konzol használat Kiírás a cout, beolvasás a cin utasítással történik, valamint a << és >> operátorokkal, amikkel több kiírandó értéket választhatunk el bekérésnél csak változóba olvashatunk be értéket kiírásnál az operátorok között lehetnek változók és konstansok tetszőleges típusból, illetve tördelőjelek, például a sorvége jel (endl) pl.: int a; cin >> a; // a bekérése cout << "A értéke: " << a; // kiíratása cout << "Egy sor" << endl << "Másik sor"; // sortörés beiktatása ELTE TTK, Alkalmazott modul: Programozás 29 ELTE TTK, Alkalmazott modul: Programozás 30 5

Forrásfájlok C++ programok a.cpp kiterjesztésű fájlok, ezek szerkeszthetőek szövegszerkesztővel, vagy valamilyen C++ programozási környezettel (pl.: DevC++, KDevelop, Eclipse, Code::Blocks, Visual Studio,...) A fejlesztői környezetek általában projektekben dolgoznak, hogy több fájlból álló programokat is könnyen tudjunk kezelni Mivel nincs automatikus kódformázás, nekünk kell figyelnünk arra, hogy: a programunk kinézete, tabulálása megfelelő legyen ne keverjük a kis-nagybetűket sehol, hiszen a C++ megkülönbözteti őket Programok fordítása Ha megszerkesztettük a programot, fordítanunk kell, ezt a feladatot a fordítóprogram látja el több lépésben végzi a feladatát, először assembly kódot generál, majd abból gépi kódot vannak előfordítási lépések, mint a fájltartalom bemásolás, illetve a definíciók behelyettesítése Fordítás közben üzeneteket kapunk, ezek lehetnek: hibák (error): hiba, amiért nem sikerült lefordítani a programot, ezeket javítanunk kell figyelmeztetés (warning): nem hiba (nem kötelező javítani), de esetleges hibajelenséget okozhat futás közben ELTE TTK, Alkalmazott modul: Programozás 31 ELTE TTK, Alkalmazott modul: Programozás 32 Programok fordítása a fordító a legjobb tudomása szerint adja meg a hiba helyét, de ez lehet téves jelzés is A g++ a legnépszerűbb fordító, használata: g++ <kapcsolók> <fájlnév 1 >... <fájlnév n > pl.: g++ main.cpp alapértelmezetten egy a.out nevű programot készít, de ezt a o <fájlnév> kapcsolóval megváltoztathatjuk a w kapcsolóval kikapcsolhatjuk a figyelmeztetéseket, -Wall megjeleníti az összes lehetséges hibalehetőséget a pedantic csak a szabvány kódot fogadja el ELTE TTK, Alkalmazott modul: Programozás 33 Véletlen generálás A C++ lehetőséget ad véletlen számok előállítására, ehhez két utasításra (függvényhívásra) van szükségünk: srand(<kezdőérték>): inicializálja a generátort rand(): megad egy egész értékű pozitív véletlenszámot Az utasítások a stdlib.h fájlban vannak, ezért ezt be kell ágyaznunk a programba (#include <stdlib.h>) A generálás mindig a kezdőértékhez viszonyítva történik, amely lehet konstans, vagy változó is általában az aktuális időpillanatot szokás megadni, amit lekérdezhetünk a time(0) függvénnyel (ehhez használnunk kell a time.h fájlt) ELTE TTK, Alkalmazott modul: Programozás 34 Karakterkezelés A karakterek C++-ban ASCII kódjuk alapján vannak eltárolva, ezért amikor karakter típusú változót hozunk létre, akkor igazából egy bájtban tárolt számot ment el a gép Íj módon lehetőségünk van a számokra alkalmazott műveleteket karakterekre is alkalmazni, illetve értékül adni őket számoknak, és fordítva, pl.: char ch1 = 'a'; int ch1i = ch1; // ch1i megkapja a ASCII kódját int ch2i = 97; char ch2 = ch2i; // ch2 megkapja a 97-es ASCII kódú karaktert Karakterkezelés Továbbá lehetőségünk van az egész számra alkalmazható műveleteket használni, pl.: char ch = 'a'; cout << ++ch; // kiírja a 'b'-t Manipulációs műveletek (a cctype fájlból, a paraméterben konstanst vagy változót adunk meg, és visszakapjuk a módosított karaktert): kisbetűvé alakítás: tolower(<karakter>) nagybetűvé alakítás: toupper(<karakter>) betű-e a karakter: isalpha(<karakter>) szám-e a karakter: isdigit(<karakter>) ELTE TTK, Alkalmazott modul: Programozás 35 ELTE TTK, Alkalmazott modul: Programozás 36 6

A szöveget kezelő utasításokat egy adott szöveg típusú változóra kell meghívnunk <változónév>.<függvénynév>() (a műveleteket a string fájl tartalmazza) Fontosabb műveletek: adott karakter lekérdezése: <szöveg>[<index>] szöveg összefűzése: <szöveg1> + <szöveg2> szöveg hosszának lekérdezése: <szöveg>.length() üres-e a szöveg: <szöveg>.empty() szöveg törlése: <szöveg>.erase() résszöveg lekérdezése: <szöveg>.substr(<kezdőindex>,<hossz>) Fontosabb műveletek: karakter első előfordulásának helye (indexe, ha nem találja string::npos a visszatérési érték): <szöveg>.find(<karakter>) karaktertömbbé konvertálás: <szöveg>.c_str() szöveg hozzáfűzése: <szöveg>.append(<új szövegrész>) új szövegrész beszúrása: <szöveg>.insert(<index>, <új szövegrész>) szövegrész lecserélése: <szöveg>.replace(<kezdőindex>, <hossz>, <új szövegrész>) ELTE TTK, Alkalmazott modul: Programozás 37 ELTE TTK, Alkalmazott modul: Programozás 38 Pl.: string s; // s.empty() igaz lenne string s1 = "árvíztűrő"; string s2 = "tükörfúrógép"; s = s1 + " " + s2; // s = "árvíztűrő tükörfúrógép" lesz // s.empty() hamis lenne s.append("!"); // s = "árvíztűrő tükörfúrógép!" lesz s.replace(0,1,"á"); // s = "Árvíztűrő tükörfúrógép!" lesz int length = s.length(); // length = 23 lesz char ch = s[2]; // ch = 'v' lesz Pl.: string sub1 = s.substr(0,5); // sub1 = "Árvíz" lesz int index1 = s.find('ő'); // index1 = 8 lesz int index2 = s.find('r'); // index2 = 1 lesz, mindig az elsőt találja meg string sub2 = s.substr(0, s.find(' ')); // sub2 = "Árvíztűrő" lesz string sub3 = s.substr(s.find("fú"), s.length() - s.find("fú")); // megkeresi az "fú"-t, annak a helye a 15 // a szöveg hossza 23, tehát venni fogja a // 8 hosszan a szöveget, sub3 = "fúrógép!" lesz s.erase(); // s = "" lesz ELTE TTK, Alkalmazott modul: Programozás 39 ELTE TTK, Alkalmazott modul: Programozás 40 7