Monday, October 28, 2013

9. óra

Jövő héten 2. kis ZH

  • A szabályok ugyanazok, mint az előző kis ZH-n
  • Tematika:
    • vezérlési szerkezetek (szekvenciális, feltételes, ismétléses). Lásd: /pub/progalap-ban a vezerles.txt-t
    • típusok, típusdefiniciók, értékkészlet, túlcsordulás
    • printf/scanf különböző kiiratási módjai
    • pointerek, deklarációk, malloc, free, sizeof
    • pointer és tömb viszonya, referencia/dereferencia, érték/referencia paraméter
    • kis program írása (ciklus, dinamikus memóriafoglalás, tömbműveletek)
    • hibajavítás forráskódban (szintaktikai és szemantikai)

Új anyag


Feladatmegoldás, gyakorlás

  • korábbi órák feladatai (tömbök, dinamikus foglalás)
  • házi feladatok: 1, 2 (progalap.pgm)

Monday, October 21, 2013

8. óra

Pointerek

  • Pointer = mutató --> egy változó memóriacímét tárolja, a változóra mutat
  • van típusa: milyen típusú változóra mutat
  • dereferencia operátor: *
    • int *p;  //egy integer típusú változóra mutató pointer
    • p = 3;  //a változó címe 3
    • *p = 3;  //a változó értéke 3
    • int s; s = *p;   //s értéke 3
    • pointerek.c
  • referencia operátor: &
    • a változó memóriacímére mutat
    • int a, *pa; a = 3; pa = &a;  //*pa = 3 lesz
      • egy memóriacímen helyezkednek el: ha a változik, akkor *pa értéke is változik
    • függvények: paraméterek átadása érték és referencia szerint
      • printf vs scanf
  • tömbök: pointerek sorozata, melyek a tömb elemeire mutatnak
    • függvényekben a tömbelemek referencia szerint lesznek átadva, ez a referencia maga a tömb (így nem kell az & operátor)
  • malloc függvény - dinamikus helyfoglalás
    • int *t; t = (int*)malloc(N*sizeof(int));
      • típuskényszerítés
      • stdlib.h
      • sizeof függvény
  • calloc: mint a malloc, de nullára inicializálja az elemeket
  • két (vagy N) dimenziós tömbök

Struct és Union

Struktúra:

Union:
  • hasonló a struct-hoz, de csak egy elemet tárol
  • melyiket tárolja? amelyiknek utoljára adtunk értéket
  • példa: union.c

Haladó függvénykezelés, tárolási osztályok


Feladatok

Struktúrák: fgv-struct.c
Órai: 1, 2, 3
Házi: 1, 2

7. óra

Nagy ZH

Tuesday, October 8, 2013

6. óra

Jövő héten ZH

  • Számítógép előtt, 4 db programozási feladat megoldása
  • Tematika:
    • szelekció és ciklus
    • tömbök használata (egész tömbök, hosszal és végjellel vagy sztringek)
    • egyszerűbben kódolható feladat ami a problémamegoldásra vagy kihegyezve
    • házi feladatokhoz hasonló feladat (kiiratás nélkül)
  • Feltöltés biro-ra (https://biro.inf.u-szeged.hu/), bejelentkezés h-s azonosítóval: akinek nem sikerül, ellenőrizze a jelszavát, szükség esetén resetelje a help desk-en (Irinyi épület, 3. lph., 220-as szoba)
  • Minden feladatot 5 különböző bemenetre tesztel a biro, pontszám -> helyes kimenetek száma (max. 4x5)
  • Az asztalon csak toll, fényképes igazolvány lehet, mobilokat kötelező kikapcsolni. Minden más segédeszköz 0 pontot eredményez.
  • Időtartam: 135 perc. (150 perc után a biro zár)
  • A ZH-ról idő előtt csak az távozhat, aki maximális pontszámot kapott vagy az összes próbálkozását (20) elhasználta.

Próba ZH feladatainak megoldása

Próba ZH elérhető biro-ról vagy a pub-ból (/pub/ProgramozasAlapjai/Gyakorlat/gyak06/2-orai-feladatok/feladat.c)


Tipusok bővebben, typedef

Char

  • előjeles (signed) és előjel nélküli (unsigned)
  • méret: sizeof(char)
  • char[] -> sztring
    • inicializálás: char str[] = "Hello World"; //implicit 0 jel a végén, a méret kiszámítása automatikus
  • ciklusban, szelekcióban használható a számbeli értéke:
    • if (c >= 65) { ...
  • vagy maga a karakter is:
    • for (c = 'a'; c <='z'; c++) { ...

Int

  • signed és unsigned
  • rövid (short), normál (int), hosszú (long), hosszabb (long long)
  • méret: sizeof(int), sizeof(short int), ...
  • túlcsordulás: short int i = 127; i++; printf("%d", i);

Float

  • float és double (dupla pontosság)
  • sizeof(float), sizeof(double)

Typedef

  • saját típusok definiálása (már létező típusokból)
    • typedef double vector[3];  //vector nevű háromdimenziós tömb típus
    • typedef unsigned short int u16;  //16 bites nemnegatív egész szám
    • typedef char string[N+1];  //N hosszúságú sztringeket tároló karakteres tömb
  • enumnál már láttunk hasonlót, itt is alkalmazható typedef:
    • typedef enum { Hetfo, Kedd, ..., Vasarnap } het;
      het nap;
      for (nap = Hetfo; nap <= Vasarnap; nap++) { ...

I/O műveletek bővebben

A printf és scanf függvények formázása: %[flags][width][.precision][length]type
  • flags:
    • + - számoknál mindig kiírja az előjelet
    • szóköz - a nemnegatív számoknál az előjel helyett szóközt ír ki
    • - - a kimenet balra igazítása
    • 0 - szóközök helyett nullákkal tölt ki, ha van width definiálva
  • width:
    • a kiírandó karakterek minimális száma - ha a kiírandó érték hossza kisebb mint a width, akkor a maradék helyet szóközökkel tölti fel (vagy nullákkal)
  • .precision:
    • maximális precizitás, tizedesek száma float típusnál, kiírható karakterek száma string-nél
  • length:
    • hh - char hossz
    • h - short hossz
    • l - long hossz
    • ll - long long hossz
  • type:
    • d/i - decimális kiiratás; beolvasásnál a %i hexadecimálisként vagy oktálisként értelmezi a számot (ha 0x-el vagy 0-val kezdődik)
    • u - unsigned int
    • f/F - fixpontos ábrázolás; kisbetű/nagybetű csak a végtelen ábrázolását befolyásolja (inf vagy INF, nan vagy NaN)
    • e/E - lebegőpontos ábrázolás
    • g/G - fix vagy lebegőpontos ábrázolás a szám nagyságától függően
    • x/X - hexadecimális ábrázolás
    • o - oktális ábrázolás
    • s - 0-val terminált sztring
    • c - karakter
    • p - pointer
    • % - '%' jel, pl: printf("szazalek: %d%%\n", szazalek);
Egy-egy karakter kiiratása és beolvasása: getchar, putchar
Egy-egy sor kiiratása és beolvasása: gets, puts

Fájlműveletek

  • FILE*: mutató a használni kívánt fájlra
  • fopen(útvonal, módok): fájl megnyitása
    • mód: r (read), w (írás), + (append), b (bináris), t (szöveges)
  • fflush: a puffer kiiratása a fájlba
  • fclose: fájl bezárása
  • fprintf, fscanf: mint a printf/scanf, de van egy új első paraméter
    • egy FILE* típusú változó, ami a fájlt jelöli
    • stdin/stdout/stderr

Feladatok