Monday, November 4, 2013

10. óra

Parancssori argumentumok

A main() függvény "teljes" alakja:
int main(int argc, char* argv[])
ahol:
  • argc - az argumentumok számát tartalmazza
  • argv - két dimenziós karaktertömb, mely argc darab sztringet tartalmaz. A sztringek a parancssori argumentumok, az argv[0] maga a program neve (pontosabban amilyen néven meghívtuk - linkek esetén nem mindig a programnév (pl. busybox))

Feladatmegoldás, konzultáció

  • haladó feladatok: prog-halado.txt
  • előző órai házik
  • korábbi feladatok
  • parancssori argumentumos feladatok: 1

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


Monday, September 30, 2013

5. óra

Mini ZH

  • toll
  • fényképes igazolvány
  • saját tudás
Minden mást 0 ponttal jutalmazok.

Gyakorlás

Felezős számkitaláló játék, ezt a forrásfájlt kell befejezni. (Megoldás itt - az óra után elérhető)

Konstansok

#define ...

gcc -E forras.c > forras.i
gcc forras.i -o forras

Enum

enum nev { elem0, elem1, ... };
enum nev { elemA = 1, elemB = 4, elemC = 12, ... };

Tömbök

tipus nev[meret];
tipus nev[dim1][dim2];
tipus nev[meret] = {elem0, elem1, elem2, ..., elem(meret-1)};

Sztringek

  • Karakter tömbök: char str[20];
  • a tömb utolsó eleme: 0
  • inicializálás: char hw[13] = "Hello world!"
  • másolásra strcpy(cél, forrás), include-olni kell a string.h-t

Feladatok

Órai: 1, 2
Házi: 1, 2, 3

Monday, September 23, 2013

4. óra

Fontos tudnivalók...

Jövő héten kis ZH! Papíron, 15 perc áll rendelkezésre. Kell: toll (2 db, mert egy mindig elromlik), fényképes igazolvány (személyi, diák, útlevél, jogosítvány), saját tudás. Nem kell: telefon, számítógép, tablet, számológép, egyéb elektronika, más tudása, papíralapú segédanyag.
Mit kell tudni? Mindent amit eddig a Linux-ról tanultunk: könyvtárműveletek, abszolút és relatív útvonalak, fájlműveletek, jogosultságok, többfelhasználós parancsok, multitask (előtérben és háttérben futtatás), szövegfájlok kezelése, átirányítás, shell és környezeti változók, távoli erőforrások elérése.
Mit nézünk még át a mai órán (mert esetleg kimaradt) és nem árt tudni a ZH-ra? cat < forrás és cat forrás>> átirányítás, tail parancs -n kapcsolójának +-os paraméterezése.

Feltételes vezérlési szerkezetek

if (feltétel) utasítás; //ha a logikai feltétel teljesül, akkor végrehajtásra kerül az utasítás

if (feltétel) {
    utasítás1;
    utasítás2;
}  //ugyanaz mint az előző, csak több utasítást hajtunk végre egy blokkban

if (feltétel) {
    utasítás1;
else {
    utasítás2;
}  //ha teljesül a feltétel, akkor az első utasítást hatjuk végre, ha nem akkor a másodikat

if (feltétel1) {
    utasítás1;
} else if (feltétel2)
    utasítás2;
else {
    utasítás3;
}  //ha az első feltétel teljesül, akkor az első utasítást hajtjuk végre, ha a második teljesül, akkor a másodikat, minden más esetben pedig a harmadikat

változó = (feltétel ? érték1 : érték2)  //ha a feltétel teljesül, akkor a változó értéke az első érték lesz, ha nem akkor pedig a második

switch (diszkrét változó) {  //diszkrét: int, char
    case érték1:
        utasítás1;
        break;
    case érték2:
        utasítás2
        break;
    default:
        utasítás3;
        break;
}  //a változó értéke szerint az első vagy a második vagy valamelyik további ágat hajtjuk végre. Ha egyik sem, akkor a default ág kerül végrehajtásra. Break utasítás szerepe...

Ciklikus vezérlési szerkezetek

while (feltétel) {
    utasítás1;
    utasítás2;
}  //amíg a feltétel igaz, addig futtatja az utasításokat - elöltesztelős: ellenőriz, majd futtat

do {
    utasítás1;
    utasítás2;
} while (feltétel);  //amíg a feltétel igaz, addig futtatja az utasításokat - hátultesztelős: futtat, majd ellenőriz

for (kezdeti utasítás1, utasítás2; feltétel; utasítás3, utasítás4) {
    utasítások;
}  //végrehajtja a kezdeti utasítás(oka)t, majd ellenőrzi a feltételt: ha igaz, akkor futtatja a blokkban található utasításokat, majd a 3.-4. utasítást és újból ellenőrzi a feltételt...

break és continue utasítások

Feladatok

Órái: 123
Házi: 12345

Monday, September 16, 2013

3. óra

C alapok

  • main függvény
  • fordítás
  • Hello World!
  • warnings
  • visszatérési érték, több program futtatása

Deklaráció

  • típusok: int, char, float
  • deklaráció sorrend
  • blokkok, érvényesség/láthatóság

Alap I/O

  • printf: %c, %d, %f, %s
  • scanf, & operátor

Globális és lokális változók

  • globális vs lokális, láthatóság

Függvény alapok

  • egyszerű függvények
  • egyparaméteres függvények
  • többparaméteres függvények

Feladatok (órai vagy házi)

  • alap feladatok: ITT
  • függvényekkel kapcsolatos feladatok: ITT
  • a tananyaghoz kapcsolódó példák: ITT

Monday, September 9, 2013

2. óra

Gyakorlás


Átirányítás, csővezeték, környezet

/dev/null
NULL eszköz, mindent elnyel

>
A parancs/program kimenetének átirányítása fájlba. Felülírja a korábbi tartalmat! (>> hozzáfűzi)

<
A parancs/program bemenetére ír egy fájlból

|
Egyik program kimenetét a másik program bemenetére irányítja

&&
Logikai ÉS, csak akkor indítja a következő parancsot, ha az előző(k) sikeresen lefutott(ak)

||
Logikai VAGY, a felsorolt parancsok közül egynek sikeresen le kell futnia

;
Több parancs felsorolása egy sorban

[]
A [ és ] jelek között felsorolt karakterek. Pl. [Aa] jelentése kis és nagy A betűk.

$PWD
pwd

$HOME
~

$PS1
A prompt kinézete

$PATH
Keresési útvonal, itt keresi a shell a futtatandó programokat

''
Idézőjel, semmit sem helyettesít be.

""
Néhány behelyettesítés működik, pl. "$HOME" -> /home/hxxxxxx

Felhasználók, multitask

yes
Folyamatosan y karaktert ír a kimenetre

tr y n
A bemenetben található y karaktert n karakterre cseréli

ps -e -f -u
Listázza a folyamatokat (processzeket - futó vagy várakozó programok)
-e: az összes processzt listázza
-f: teljes listázás (-l még több információt ad)
-u: a paraméterként megadott felhasználó fájljait használó processzeket listázza

jobs
Job-ok (egymástól függő processzek) listázása

bg # %#
A # számú processz vagy a # számú job háttérbe küldése

fg # %#
A # számú processz vagy a # számú job előtérbe hozása

kill -s -9 #
Leállítja az adott processzt.
-s STOP: STOP kóddal leállítás
-9: azonnali leállítás
Ha nincs -s vagy -# definiálva, akkor TERM kóddal állítja le (normál terminálás)

&
Háttérben indítás

^C
Előtérben futó processz befejezése

^Z
Előtérben futó processz felfüggesztése (folytatás fg-vel vagy bg-vel)

finger
Ki van bejelentkezve a gépen

who
Mint a finger, csak kevesebb adatot szolgáltat

w
Mint a who, csak megmondja, hogy ki mit futtat az adott pillanatban

Hálózat

scp user@host:path
Másolás távoli gépről/gépre

ssh -X user@host
Távoli gépre bejelentkezés (konzolos vagy X11)

sftp user@host
{ls, lls, cd, lcd, pwd, lpwd, mkdir, lmkdir, put, get, exit}
Fájlátvitel távoli és lokális gép között

exit
Kilépés

wget
Fájl letöltése az Internetről

Feladatok

Monday, September 2, 2013

1. óra

Bevezető, követelmények

A gyakorlat látogatása kötelező (az előadás látogatása pedig erősen ajánlott), igazolatlan hiányzás esetén a gyakorlat nem teljesített. Igazolt hiányzás esetén az igazolást - amelyből csakis orvosi igazolást fogadunk el - a hiányzás utáni első órán be kell mutatni.
Mindenki arra a gyakorlatra járjon be, amelyet az ETR-ben felvett.

A gyakorlatok heti rendszereséggel kerülnek megtartásra, egy gyakorlat hossza 3x45 perc (közben 1x10 perc vagy 2x5 szünettel, megbeszélés szerint). A gyakorlatok heti bontása:
  1. 2013. szeptember 3. - Követelmények, regisztráció, Linux alapok
  2. 2013. szeptember 10. - Linux szövegkezelés, környezet, multitasking, multiuser, átirányítás, csővezeték, hálózatkezelés
  3. 2013. szeptember 17. - C alapok, 'Hello world', fordítás, futtatás, típusok, változók, alap I/O, függvények
  4. 2013. szeptember 24. - vezérlési szerkezetek
  5. 2013. szeptember 31. - 1. mini ZH; konstansok, tömbök, sztringek
  6. 2013. október 8. - elemi típusok bővebben, haladó I/O, fájl I/O
  7. 2013. október 15. - 1. nagy ZH
  8. 2013. október 22. - union és struct, pointerek, tárolási osztályok
  9. 2013. október 29. - haladó deklaráció, dinamikus programozási feladatok
  10. 2013. november 5. - 2. mini ZH; C parancssor, haladó feladatok
  11. 2013. november 12. - gyakorlás, pótlás
  12. 2013. november 19. - kötelező program
  13. 2013. november 26. - 2. nagy ZH
  14. 2013. december 3. - javítás

Számonkérés

A félév folyamán 2 kis ZH, 2 nagy ZH és egy kötelező program megírására kerül sor.
A kis ZH-k 10-20 percig tartanak, papíron kell válaszolni kb 10 kérdésre. Egy kis ZH-val maximum 10 pont szerezhető.
A nagy ZH-kat egész órán lehet írni (135 perc), számítógép előtt, programozási feladatot kell megoldani. Egy nagy ZH maximális pontszáma 20.
A kötelező program egy előre kiadott listából véletlenszerűen kiválasztott feladat megoldása számítógép előtt. Ezt is egész órán írjuk (135 percig), maximum 20 pont szerezhető vele.
Továbbá az órai aktivitásra (házi feladat bemutatása, aktivitás, stb.) plusz pont szerezhető - maximum 10. Minusz pont is szerezhető indokolt esetben.

A gyakorlat teljesítése három részből áll:
  1. első kis ZH és első nagy ZH: minimum 10 pontot el kell érni ebből a részből
  2. második kis ZH és második nagy ZH: minimum 10 pont
  3. kötelező program: nincs minimum pont
A három részből összesen minimum 30 pontot kell megszerezni a gyakorlat sikeres teljesítéséhez. Ebbe a minimumba beleszámítanak a plusz (és a minusz) pontok is - a két 10 pontos minimumba viszont nem!

A gyakorlaton maximum 80 pont szerezhető, ez alapján a pontozás a következő:
  • 0 - 29 pont: elégtelen (1)
  • 30 - 44 pont: elégséges (2)
  • 45 - 59 pont: közepes (3)
  • 60 - 69 pont: jó (4)
  • 70 - 80 pont: jeles (5)

Információk

Regisztráció

  1. STUD regisztráció itt: https://www.stud.u-szeged.hu/web/studreg-1.php
  2. STUD jelszóváltoztatás: https://www.stud.u-szeged.hu/web/passwd-1.php
  3. INF jelszóváltoztatás: http://www.inf.u-szeged.hu/jelszo/

Ezek után be kell lépni a STUD-os levelezőrendszerbe (https://www.stud.u-szeged.hu/horde/login.php) és küldeni egy levelet a koszoaron+progalap@gmail.com címre. A tárgy legyen a gyakorlat neve (IB103G-10 vagy IB103G-11), az üzenetben pedig szerepeljen az EHA kód és a h-s azonosító (pl. KOAQACT.SZE és h865300).

Linux alapok

pwd
Aktuális könyvtár lekérdezése

cd
Könyvtárváltás

ls -a -d -l -R -r
Könyvtár tartalmának listázása
-a: rejtett fájlokat is megjeleníti
-d: a könyvtárbejegyzés megjelenítése (célszerű a -l kapcsolóval együtt használni)
-l: részletes lista
-R: rekurzív listázás
-r: fordított sorrend

mkdir -p -m
Könyvtár létrehozása
-p: a teljes megadott útvonalat megpróbálja létrehozni
-m: jogosultságok beállítása

rmdir -p
Könyvtár törlése
-p: a teljes megadott útvonalat megpróbálja törölni

mv -b -f -i -u
Fájl vagy könyvtár áthelyezése/átnevezése
-b: mentés készítése a felülírandó fájlokról
-f: felülírás előtt nem kérdez vissza
-i: kétes esetben megerősítést vár
-u: csak a régebbi fájlokat írja felül

cp -b -f -i -l -r -R -s -u
Fájl (vagy könyvtár) másolása
-b: mint mv-nél
-f: mint mv-nél
-i: mint mv-nél
-l: link készítése másolás helyett
-r: rekurzív másolás (könyvtár esetén)
-R: rekurzív másolás (könyvtár esetén)
-s: szimbolikus link készítése másolás helyett
-u: mint mv-nél

rm -f -i -r -R
Fájl (vagy könyvtár) törlése
-f: kétes esetben nem kérdez vissza
-i: kétes esetben visszakérdez
-r: rekurzív törlés (könyvtár esetén)
-R: rekurzív törlés (könyvtár esetén)

ln -s
Fájl (vagy könyvtár) linkelése
-s: szimbolikus link készítése

du -a -h -m -s
Fájlok méretének összeszámolása
-a: minden fájlnak írja ki a méretét (különben csak a könyvtárakét)
-h: human-readable kiírás
-m: kilobájtok helyett megabájtok
-s: csak a végösszeget írja ki

chmod ### augo+-=rwx -R -c
Jogosultságok beállítása
777, 755, 700, 666, 644, 600, 400
a+w, u+x, o-r, g=rw
-R: rekurzívan
-c: jelentse ha történt változás

*
Akárhány tetszőleges karakter helyettesítése

?
Tetszőleges karakter helyettesítése

.
Aktuális könyvtár

..
Egy szinttel feljebb lévő könyvtár

~
home könyvtár (relatív)

/home/hxxxxxx
home könyvtár (abszolút)

Szövegfájlok

echo
Szöveg kiírása

cat
Fájl teljes tartalmának kiírása

more
Fájl teljes tartalmának oldalankénti kiírása

head -n #
A fájl első # sorának kiírása

tail -n +# -f
A fájl utolsó # sorának kiírása
-f: a (változó tartalmú) fájl utolsó sorainak folyamatos kiírása

grep -A -B -C -e -r -R
A fájl mintára illeszkedő sorainak kiírása
-A: a találat utáni x db sort is kiírja
-B: a találat előtti x db sort is kiírja
-C: a találat előtti x/2 és utáni x/2 sort is kiírja
-e: reguláris kifejezés használata (általában alapból bekapcsolt)
-r: rekurzív (minden fájlban keres az adott könyvtárban)
-R: rekurzív

wc -c -l -m -w
A fájlban található bájtok/sorok/szavak számának kiírása
-c: a fájl méretét írja ki
-l: a sorok számát írja ki
-m: a karakterek számát írja ki
-w: a szavak számát írja ki

^D
CTRL+D - EOF (End-Of-File - fájl vége) karakter beszúrása. Vigyázat, a shell-re is érvényes! (bezárja)

Feladatok