2. Gyakorlat Követelmények / „C” ismétlés Programozás II. 2. Gyakorlat Követelmények / „C” ismétlés
Elérhetőségek Horváth István E-mail: ihorvath@inf.u-szeged.hu Honlap: www.inf.u-szeged.hu/~ihorvath (Gyakorlatok anyaga itt érhető el) Coospace egyesített kurzusfórum Fogadóóra: Szerda 11-12 (Irinyi 110) (Vagy előre megbeszélt időpont/helyszín)
Követelmények - előadás Előadásra járni kötelező! Ennek ellenőrzésére: 3 „röpdolgozat” Vizsgaidőszakban előadásvizsga teljesítése Részletek előadáson…
Követelmények - gyakorlat Gyakorlatok látogatása is kötelező! (katalógus), max. 2 igazolatlan hiányzás megengedett 1 db évközi teszt (40 pont / min: 20 pont), November 4., 5. 1 db kötelező program (I / N), Nov. 22-ig be kell küldeni (Coospace-es feladatbeadás, gyakorlaton ellenőrzés) 1db gyakorlati ZH (60 pont / min: 30 pont) Szorgalmi időszak utolsó két hetében, előre meghirdetett időpontok, melyekre jelentkezni kell.
Követelmények – kötprog A kötelező program témája szabadon választható, de a következő elemeknek benne kell szerepelniük: Legalább 3 db osztály Legalább 1 db örököltetés (saját osztályból való örököltetés) Legalább 3 db operátor overloading, melyek között szerepelnie kell a ( ) vagy a [ ] operátornak ( + - * / = += -= *= /= [] () stb. ) Legalább 2 db virtuális függvény (destruktoron kívül). Legyen benne file-kezelés (olvasás/írás) Az osztályok tartalmazzanak dinamikus adattagot (Member adattag, legalább egy darab osztályban legyen ) Minden osztálynak rendelkeznie kell konstruktorral, destruktorral és copy konstruktorral A kód legyen szétszedve külön header-re és külön source-ra Legyen egy főprogram, ami bemutatja a program működését
Javítás Évközi teszt egyszer javítható / pótolható, Nov. 11. héten (1 héttel a normál teszt után) Gyakorlati ZH egyszer javítható, vizsgaidőszak elején (szintén előre meghirdetett időpontokra lehet majd jelentkezni) Kötelező program nem javítható/pótolható.
Pontozás Órai munkára, és kihirdetett házi feladatokra max. +10 pont szerezhető. (Órai munkára heti max. 2). Gyakorlati érdemjegy a pontok függvényében: >= 85% : jeles >= 75% : jó >= 65% : közepes >= 50% : elégséges * < 50% : elégtelen * Az 50%-os minimum pontszámot plusz pontok nélkül kell teljesíteni! A pluszpontok csak e fölött kerülnek beszámításra.
Ajánlott irodalom Előadásanyag!!! Herbert Schildt: C/C++ Referenciakönyv Panem Kft. Budapest (1998) Bruce Eckel: Thinking in C++ (angol) Computerbooks kiadó: Programozzunk C++ nyelven Bjarne Stroustrup: A C++ programozási nyelv
Ismétlés – C nyelv
Adattípusok Az adattípus olyan egysége a programnak, amely két összetevője által meghatározott: Értékhalmaz Az értékhalmaz elemein végezhető műveletek Minden adattípus vagy elemi, vagy más adattípusokból képzett összetett adattípus.
Adattípusok signed / unsigned char short, int, long float, double, long double pointer, tömb enum union, struct
Main függvény A C és a C++ programok kezdő eljárása minden esetben a main() eljárás. Paraméterei: az argc (argument count) a parancssorban szereplő argumentumok száma, az argv (argument vector) a string alakban tárolt argumentumok címeit tároló tömb (indexelés 0-tól, utolsó arg. után NULL.) az envp a string alakban tárolt környezeti változók címeit tároló tömb (indexelés 0-tól, utolsó változó után NULL.)
stdio.h – printf() Alapértelmezett kimenetre ír Első argumentumban string, továbbiak a kiírandó változók. Példa: int x = 5; printf(”x valtozo erteke: %d”, x);
stdio.h – printf() Konverziós karakterek: c: int unsigned char típusra konvertált karakter d, i: int előjeles decimális egész u: unsigned int előjel nélküli decimális egész f: double előjeles tizedestört o: unsigned int előjel nélküli oktális egész s: char* karaktersorozat 0 végjelig stb…
stdio.h – scanf() Alapértelmezett bemenetről adatok beolvasása. Konverziós karakterek használata – printf() függvényhez hasonlóan. Példa: int x; printf("Add meg ‚x’ értékét!\n",x); scanf("%d",&x); (Ne felejtsük el az & jel használatát…)
stdio.h – fopen() – fclose() File *fopen (const char *filename, const char *mode); Fájl megnyitása: r – read w – write a – append int fclose(FILE *stream) Megnyitott fájl bezárására. Példa: FILE *file; file = fopen("proba.txt", "r"); //proba.txt megnyitása olvasásra fclose(file); //bezárása
stdio.h – fprintf() – fscanf() printf() és scanf() függvényekhez hasonlóan működnek (konverziós karakterek) int fprintf(FILE *stream,const char * format, ... ); Példa: int x = 5; fprintf( file, "Egy próba %d kiíratás fájlba.\n",x); int fscanf(FILE *stream,const char * format, ... ); Példa: int x; fscanf( file, "%d", &x);
Igazságtáblák - NOT NOT (negálás, tagadás). Az eredeti érték ellentettje. Jelölése C-ben: ! (logikai művelet), ~ (bitenkénti művelet) Igazságtáblája: bemenet kimenet A NOT A 1
Igazságtáblák - OR AND (logika VAGY). Akkor igaz, ha LEGALÁBB az egyik feltétel igaz. Jelölése C-ben: | (bitenkénti), || (logikai) Igazságtáblája: bemenet kimenet A B A OR B 1
Igazságtáblák - XOR AND (logika KIZÁRÓ VAGY). Akkor igaz, ha PONTOSAN az egyik feltétel igaz. Jelölése C-ben: ^(bitenkénti) Igazságtáblája: bemenet kimenet A B A XOR B 1
Igazságtáblák - AND AND (logika ÉS). Igaz, ha mindkét feltétel igaz. Jelölése C-ben: & (bitenkénti), && (logikai) Igazságtáblája: bemenet kimenet A B A AND B 1
Operátorok – aritmetikai műveletek kif + kif : összeadás kif – kif : kivonás kif * kif : szorzás kif / kif : osztás kif % kif : maradékos osztás - kif : ellentett képzés
Operátorok – bitszintű műveletek ~kif : komplemens képzés (bitenkénti negálás) kif >> kif : bitléptetés jobbra kif << kif : bitléptetés balra kif & kif : bitenkénti és művelet kif | kif : bitenkénti vagy művelet kif ^ kif : bitenkénti kizáró vagy
Operátorok – logikai műveletek kif && kif : logikai és kif || kif : logikai vagy ! kif : logikai tagadás
Operátorok – relációs műveletek kif == kif : egyenlő kif != kif : nem egyenlő kif < kif : kisebb kif > kif : nagyobb kif <= kif : kisebb-egyenlő kif >= kif : nagyobb-egyenlő
Operátorok – értékadó műveletek változó = kif : értékadás +=, -=, *=, /=, %= : művelettel egybekötött értékadás >>=, <<=, &=, ^=, |= : művelettel egybekötött értékadás Pl. int x = 2; x += 3; //x = 5
Operátorok – inkrementációs műveletek ++kif : inkrementálás (növelés 1-el), prefix operátorral. Visszatérési értéke a megnövelt érték! kif++ : inkrementálás, postfix operátorral. Visszatérési értéke a növelés előtti érték! --kif, kif-- : dekrementálás (csökkentés 1-el), visszatérési értékei lsd. inkrementálás. Pl. int x = 0, y = 2; x = ++y; //x = 3, y = 3 x = y++; //x = 3; y = 4
string műveletek C-ben a string egy karakter tömb, melyet ‚\0’ karakter zár le. #include <string.h> size_t strlen( const char *s) a paraméterként kapott string méretét adja vissza (\0 karakter előttig számolva) char *strcpy( char *s1, const char *s2) s2 string tartalmát az s1 karaktertömbbe másolja char *strncpy( char *s1, const char *s2, size_t n) s2 stringből (legfeljebb) n számú karaktert másol s1-be
string műveletek char *strcat( char *s1, const char *s2) s2 string tartalmát hozzáfűzi s1-hez (s1 végi \0-t törli, és a hozzáfűzött s2 végére teszi) char *strncat( char *s1, const char *s2, size_t n) n karaktert fűz s1 végéhez s2-ből char *strchr( const char *s, int c) A stringben a megadott c karakter legelső előfordulására mutató pointert ad vissza. (NULL, ha nem fordul elő benne). char *strrchr( const char *s, int c) A megadott c karakter utolsó előfordulására mutató pointert ad vissza. (NULL, ha nem fordul elő)
string műveletek int strcmp( const char *s1, const char *s2) Összehasonlítja s1 és s2 stringet. Visszatérési értéke 0, ha a két string egyforma. <0, ha s1 < s2. >0, ha s1 > s2. int strncmp( const char *s1, const char *s2, size_t n) strcmp-hez hasonló, az első n karaktert vizsgálja char *strstr( const char *s1, const char *s2) Ha az s2 string előfordul s1-ben, az s2 kezdetére mutató pointert ad vissza. NULL különben char *strrev( const char *s1) Megfordítja a string tartalmát