C Alapok els ra n Elemi tpusok n

  • Slides: 43
Download presentation
C++ Alapok, első óra n. Elemi típusok n. Vezérlési szerkezetek n. Be- és kimenet

C++ Alapok, első óra n. Elemi típusok n. Vezérlési szerkezetek n. Be- és kimenet n. Adatstruktúrák n. Függvények n. Main függvény

Alapvető típusok n n n Az adatoknak típusuk van, így védekezik a rendszer például

Alapvető típusok n n n Az adatoknak típusuk van, így védekezik a rendszer például az ellen a hiba ellen, hogy a programozó számot próbáljon összeadni egy szöveggel Ha két típus egymásba alakítható (például egész és valós szám csonkolással), akkor explicit vagy implicit konverzió lehetséges A következő típusok többsége beépített típusa a C++ nyelvnek

Változók deklarálása n n Minden általunk használt változót az első használata előtt deklarálnunk kell

Változók deklarálása n n Minden általunk használt változót az első használata előtt deklarálnunk kell ( és ezt csak egyszer tehetjük meg) Deklaráció: „típusnév változónév; ” Speciálisan a deklarációban adhatunk neki egy kezdőértéket is, de ez csakis konstans lehet „int i=4; ”

Egész számok ( int ) Egész számok 4 bájton ábrázolva n Pl: „int x=56;

Egész számok ( int ) Egész számok 4 bájton ábrázolva n Pl: „int x=56; ” n Műveletek: n +, -, * n / - eredmény mindig egész n % - maradék képzése (mod) n n Relációk: n ==, !=, <=, >=

Valós számok ( float ) Pl. „float f=13. 766; ” n Műveletek: n n

Valós számok ( float ) Pl. „float f=13. 766; ” n Műveletek: n n n +, -, *, / Relációk: n A szokásosak. . .

Logikai értékek ( bool ) Változók és konstansok, amik igazak és hamisak lehetnek. n

Logikai értékek ( bool ) Változók és konstansok, amik igazak és hamisak lehetnek. n Pl. „bool L=true; L=false; ” n Műveletek: n ==, != n ! – tagadás pl. „!L” n && - és pl. „L 1&&L 2” n || - vagy pl. „L 1||L 2” n

Karakterek ( char ) ASCII-es karakterek, konvertálható integerré (0. . 255 lehet az értéke)

Karakterek ( char ) ASCII-es karakterek, konvertálható integerré (0. . 255 lehet az értéke) n Pl. „char c=‘A’; ” n Relációk: ==, != n

Karakterláncok ( string ) n n Régen (C-ben) „char*”-gal kezelték. Pl: „string str=‘’alma‘’; ”

Karakterláncok ( string ) n n Régen (C-ben) „char*”-gal kezelték. Pl: „string str=‘’alma‘’; ” Használatához valamelyik őt használó fejállományt is includolni kell (pl. iostream) Műveletek: n n n str. size() – az str-ben tárolt szöveg hossza str 1+str 2 – a két string összefűzése str[i] – a zárójelek közé írva egy i egészet, a szöveg i-edik karakterét adja vissza

Stringek 2 nstr. c_str() – az str-nek megfelelő char* értéket adja vissza nstr. substr(i,

Stringek 2 nstr. c_str() – az str-nek megfelelő char* értéket adja vissza nstr. substr(i, j) – str i-edik poziciójától j db karakter alkotta szöveg

Elemi utasítások A C++-ban minden utasítást „; ” zár n Értékadás: „változó = érték;

Elemi utasítások A C++-ban minden utasítást „; ” zár n Értékadás: „változó = érték; ” n Pl. „x = 0; c = ‘A’; ” n Spec: „x = y = 5; ” <-> „x=5; y=5; ” n „x++; ”, „++x; ”, „x--; ”, „--x; ” (növelés, illetve csökkentés eggyel) n A különbség a visszatérési értékükben van. . . n

Elemi utasítások 2 n Program leállítása: „exit(szám); ”, ahol a szám egy nemnegatív egész

Elemi utasítások 2 n Program leállítása: „exit(szám); ”, ahol a szám egy nemnegatív egész és n n n 0, ha nem volt hiba >0, ha volt hiba és ekkor a szám a hiba kódja Megjegyzések: n n C++ stílusú: „// megjegyzés” -> az adott sor végéig tart C stílusú: „/*megjegyzés. . . Akár több sor */”

Logikai feltételek n Bármilyen egyszerű vagy összetett kifejezés, ami bool-t ad vissza bool típusú

Logikai feltételek n Bármilyen egyszerű vagy összetett kifejezés, ami bool-t ad vissza bool típusú változók n bool visszatérési értékű függvények n a relációk segítségével felépített kifejezések n Pl. (4==2*2)&&(!L||ps(3)) n Ahol: bool ps(int i) {return i%2==0; } n

Vezérlési szerkezetek Szekvencia: parancsok egymásutáni végrehajtása. . . n Pl. n „ x =

Vezérlési szerkezetek Szekvencia: parancsok egymásutáni végrehajtása. . . n Pl. n „ x = 5; n y = x/2; n x = y+1; ” n

Elágazás n Közönséges elágazás: if(feltétel) { ág 1 } else { ág 2 }

Elágazás n Közönséges elágazás: if(feltétel) { ág 1 } else { ág 2 } n Egyszerűbb eset (ha az ágak csak egy utasításból állnak): if(feltétel) ut 1; else ut 2;

Többágú elágazás n Több feltétel, a legelső utasításait hajtjuk végre, ami teljesül: if(feltétel 1)

Többágú elágazás n Több feltétel, a legelső utasításait hajtjuk végre, ami teljesül: if(feltétel 1) { ág 1 } else if(feltétel 2) { ág 2 }. . . else { utolsó_ág }

Adott változó értéke szerinti elágazás n Ha egy adott változó értékei szerint akarunk elágaztatni

Adott változó értéke szerinti elágazás n Ha egy adott változó értékei szerint akarunk elágaztatni a következőt is használhatjuk: switch(v) { case konstans 1: utasítások. . . break; case konstans 2: utasítások. . . break; . . . default: utasítások. . . break; }

Ciklus A ciklus egy speciális szerkezet, ami egy adott utasítás sorozatot addig hajt végre,

Ciklus A ciklus egy speciális szerkezet, ami egy adott utasítás sorozatot addig hajt végre, amíg egy adott feltétel teljesül n Az utasítás sorozatot ilyenkor a ciklus magjának nevezzük n

While-ciklus n Ez egy előltesztelős ciklus, azaz minden lépésben ellenőrzi a feltételt, ha az

While-ciklus n Ez egy előltesztelős ciklus, azaz minden lépésben ellenőrzi a feltételt, ha az igaz, akkor végrehajtja a ciklusmagot, ha pedig hamis, akkor a ciklus befejeződik és a ciklus utáni utasítások következnek. while(feltétel) { utasítások sorozata. . . }

For-ciklus n A következő ciklus egyszerűbben is felírható a for utasítás segítségével: utasítás 1;

For-ciklus n A következő ciklus egyszerűbben is felírható a for utasítás segítségével: utasítás 1; while(feltétel) { mag. . utasítás 2; } for(utasítás 1; feltétel; utasítás 2) { mag }

Egyszerű példa a for használatára n Írjuk ki az egész számokat 0 -tól 100

Egyszerű példa a for használatára n Írjuk ki az egész számokat 0 -tól 100 -ig! for(int i=0; i<101; i++) { cout << i << endl; }

Do-while ciklus n Ez a hátultesztelős ciklus do{ mag. . . }while(feltétel);

Do-while ciklus n Ez a hátultesztelős ciklus do{ mag. . . }while(feltétel);

A do-while ciklus egyik hasznos alkalmazása char c; do{ //programunk. . . cout <<

A do-while ciklus egyik hasznos alkalmazása char c; do{ //programunk. . . cout << ” Futtassuk újra? (I/N) ”; cin >> c; }while(c!=‘n’&&c!=‘N’);

Be- és kimenetkezelés n Szabványos be- és kimenet kezelése (billentyűzet, illetve képernyő): #include <iostream>

Be- és kimenetkezelés n Szabványos be- és kimenet kezelése (billentyűzet, illetve képernyő): #include <iostream> //ez kell using namespace std; //a fájl elejére cout << kifejezés 1 << kif 2 << endl; //kiírás+soremelés cin >> változó 1 >> változó 2; //beolvasás cout << ”n”; //a n a soremelésnek megfelelő karakter

Bemenet-Kimenet példa #include <iostream> using namespace std; void main() { int n; cout <<

Bemenet-Kimenet példa #include <iostream> using namespace std; void main() { int n; cout << ”Kérek egy egész számot! ”; cin >> n; cout << ”A(z) ” << n << ” szám négyzete: ” << n*n << endl; }

Karakterláncok beolvasása A << operátorral például az üres string nem olvasható be n Másik

Karakterláncok beolvasása A << operátorral például az üres string nem olvasható be n Másik módszer erre: getline(cin, str); n Megjegyzés: a puffert esetleg üríteni kell. . . n

Egyszerű adatstruktúrák n Néhány egyszerűbb adatstruktúra: tömb: fix dimenziójú vektor, az indextartomány: 0, 1,

Egyszerű adatstruktúrák n Néhány egyszerűbb adatstruktúra: tömb: fix dimenziójú vektor, az indextartomány: 0, 1, . . . , méret-1 n struct: különböző adatmezőkből álló rekordtípus n

Tömbök használata Tömb típusú változó deklarálása: típus változónév[méret]; n Tömb adott indexű elemének elérése:

Tömbök használata Tömb típusú változó deklarálása: típus változónév[méret]; n Tömb adott indexű elemének elérése: változónév[index] n Ezzel a módszerrel csak konstans méretű tömbök hozhatóak létre (un. Statikus foglalású tömbök) n

Példa a tömbök használatára n 8 dimenziós vektor hosszának kiszámítása: //így is lehet értéket

Példa a tömbök használatára n 8 dimenziós vektor hosszának kiszámítása: //így is lehet értéket adni, nem muszáj indexenként //de csak és kizárólag deklaráláskor: float v[]={3, 6, 7, 1, 0, 0, 9, 12}; float f=0; for(int i=0; i<8; i++) f=f+(v[i]*v[i]); f=sqrt(f); //#include <math. h> kell hozzá

Struct n n A struct kulcsszó segítségével létrehozhatunk egy új típust (mielőtt ilyen típusú

Struct n n A struct kulcsszó segítségével létrehozhatunk egy új típust (mielőtt ilyen típusú változót létrehoznánk, a típust is meg kell adni) Módja: struct Típusnév { típus 1 mezőnév 1 //mező megadása. . . }; Változó: Típusnév változónév; Mezők elérése: változónév. mezőnév

Példa a struct használatára n Hallgató típus megadása: struct Hallgato{ int id; char eha[7];

Példa a struct használatára n Hallgató típus megadása: struct Hallgato{ int id; char eha[7]; string vnev; string knev; }; Hallgato h; h. id=123; h. eha=”aaabbbb”; h. vnev=”Kiss”; h. knev=”Pisti”; cout << h. vnev << ” ” << h. knev << endl;

Függvényhívások n Függvény deklarálása és definiálása: n n A deklarációnak meg kell előznie az

Függvényhívások n Függvény deklarálása és definiálása: n n A deklarációnak meg kell előznie az első felhasználást „void my. Fuggveny(); ” Definiálás: „void my. Fuggveny() { //utasítások }” Deklaráció és definiálás együtt csak ha a deklaráció megelőzi a definiálást A definiálás önmagában is deklaráció értékű.

Függvény visszatérési értéke n A függvénynek lehet visszatérési értéke Ennek típusa van és ezt

Függvény visszatérési értéke n A függvénynek lehet visszatérési értéke Ennek típusa van és ezt is fel kell tüntetni a deklaráláskor/definiáláskor a neve előtt n void = nincs visszatérési érték n A return utasítással lehet visszatérési értéket adni, ekkor a függvény utasításainak végrehajtása meg is áll „int Nulla() { return 0; }” n

Függvény paraméterei n Definiáláskor/deklaráláskor fel kell sorolni a függvény paramétereit, ha vannak, a név

Függvény paraméterei n Definiáláskor/deklaráláskor fel kell sorolni a függvény paramétereit, ha vannak, a név után zárójelek között. A paramétereknek nevet és típust kell adni és ekkor a függvény törzsében ilyen néven használhatjuk őket. „int Osszeg(int a, int b) { return a+b; }”

Paraméterfajták n A paraméterek lehetnek érték- és címszerintiek n n Értékszerinti paraméterátadás esetén létrejön

Paraméterfajták n A paraméterek lehetnek érték- és címszerintiek n n Értékszerinti paraméterátadás esetén létrejön egy új változó és ez megkapja kezdőértékül a bemenő értéket • void f(int a, . . ); Címszerinti átadás esetén az aktuális paraméternek balértéknek kell lennie (változó) és ekkor ennek a címe adódik át (következmény: a változó értékét megváltoztathatja a függvény • void f(int& a, . . );

Függvény meghívása A függvény a nevével és az aktuális paraméterek megadásával hívható meg Pl.

Függvény meghívása A függvény a nevével és az aktuális paraméterek megadásával hívható meg Pl. int i; i=Osszeg(Nulla(), 1); my. Fuggveny(); n

Megjegyzések void függvény esetében a „return; ” utasítással is vissza lehet térni n A

Megjegyzések void függvény esetében a „return; ” utasítással is vissza lehet térni n A függvényeket a nevük és a paramétereik száma+típusuk sorrendje (nevük és a visszatérési érték típusa nem számít) Pl: int f(int a, int b); int f(int c); n

Megjegyzés 2 Tömbök mint paraméterek: void fv(tipus t[][20]){. . . t[i][j]. . . }

Megjegyzés 2 Tömbök mint paraméterek: void fv(tipus t[][20]){. . . t[i][j]. . . } void fv(tipus** &t) {. . . t[i][j]. . . } n

Egy egyszerű program szerkezete #include <iostream> using namespace std; //fv deklarációk int main(int argc,

Egy egyszerű program szerkezete #include <iostream> using namespace std; //fv deklarációk int main(int argc, char* argv[]) { //program return 0; } //fv definíciók

Main függvény Kitüntetett függvény, ő indul el a program futtatásakor. n Csak egy lehet

Main függvény Kitüntetett függvény, ő indul el a program futtatásakor. n Csak egy lehet belőle. . . n Visszatérési értéke: void/int n Paraméterek: nincsenek vagy az alábbi kettő n

Programparaméterek argc -> a parancssori paraméterek száma n argv -> a parancssori paraméterek tömbje,

Programparaméterek argc -> a parancssori paraméterek száma n argv -> a parancssori paraméterek tömbje, elemei char* típusúak n Az első paraméter mindig a futtatási név pl. „C: Dev-Cppbevinfo 1cpp 1. exe” n

Ami még hátra van. . . Szöveges fájlok használata n Programozási tételek implementálása n

Ami még hátra van. . . Szöveges fájlok használata n Programozási tételek implementálása n

Egyéb n n Dev. C++ ingyenes fordító http: //www. bloodshed. net/devcpp. html (itt az

Egyéb n n Dev. C++ ingyenes fordító http: //www. bloodshed. net/devcpp. html (itt az elsőt kell letölteni, a többi a fordító forráskódja. . . ) A letöltött fájl egy setup exe lesz, ezt futtatva telepítjük a programot. . . használat: Project: Console Application (new projektnél ezt kell keresni) Parancssori fordítás linux alatt 1. Megírjuk a forrásfájlt -> elso. cpp 2. „g++ elso. cpp –o proba. exe” ekkor az elso. cpp-ből fordul egy proba. exe nevű fájl, ami már futtatható is

Gyakorló Feladatok 1. 2. 3. 4. Soroljuk fel az 1 és 100 közötti négyzetszámokat!

Gyakorló Feladatok 1. 2. 3. 4. Soroljuk fel az 1 és 100 közötti négyzetszámokat! Soroljuk fel az 1 és 10000 közötti 17 -tel vagy 19 -cel osztható számokat (egyetlen ciklust használva csak) Készítsünk egy programot, ami bekér a billentyűzetről egy n egész számot. Ha n<=0 akkor küldjünk hibaüzenetet és termináljunk, különben számoljuk meg, hogy 0 és n között hány olyan szám van, ami 3 -at ad maradékul 7 -tel osztva! Készítsünk egy struct típust, ami a 3 dimenziós tér pontjainak koordinátáit(x, y, z valósak) és címkéit(tetszőleges string) tartja számon, majd hozzunk létre egy ilyen változót és tegyük bele a P(0. 5; 1; 3. 5) pontot. Ezután hozzunk létre még egy ilyen változót és annak tartalmát kérjük be a billentyűzetről. Ezután számoljuk ki a két pont távolságának a négyzetét! ( d(P 1, P 2)^2=(x 1 -x 2)^2+(y 1 -y 2)^2+(z 1 -z 2)^2 )