Mutatók. Programozás II. Hatwágner F. Miklós március 4. Széchenyi István Egyetem, Gy r

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Mutatók. Programozás II. Hatwágner F. Miklós március 4. Széchenyi István Egyetem, Gy r"

Átírás

1 Mutatók Programozás II. Széchenyi István Egyetem, Gy r március 4.

2 Dinamikus memóriakezelés A C fordító a memóriát három részre osztja: 1 els dleges adatterület konstansok, statikus objektumok 2 verem (stack) lokális objektumok, függvények paraméterei 3 heap dinamikusan, futásid ben foglalt, változó méret memóriablokkok Memóriakezel fv.-ekhez beszerkesztend : stdlib.h void* calloc(size_t darab, size_t meret) darab*meret bájt méret blokk lefoglalása és nullázása void* malloc(size_t meret) meret bájt méret blokk lefoglalása Tulajdonságok: V. t. érték: lefoglalt terület címe, vagy NULL, ha sikertelen volt a m velet Automatikus tárillesztés, méret illesztés bármilyen objektum elhelyezhet

3 Dinamikus memóriakezelés void* realloc(void* blokk, size_t uj_meret) Átméretezi a korábban lefoglalt blokk -ot. V. t. sikeres esetben az átméretezett terület címe (egyezhet a régi értékkel). A régi blokk tartalmát igyekszik meg rizni. Sikertelen esetben a v. t. érték NULL, de adat nem vész el. void free(void* blokk) Korábban lefoglalt blokk felszabadítása. NULL átadása esetén azonnal visszatér, de érvénytelen mutató átadása végzetes hibát okozhat!

4 Dinamikus memóriakezelés Egydimenziós tömb (vektor) használata #include <stdio.h> #define MERET 3 int main(void) { int tomb[meret] = {1, 2, 3}; int i; printf("'tomb' elemei: \n"); for(i=0; i<meret; i++) { printf("%d ", tomb[i]); } putchar('\n'); } Kimenet 'tomb' elemei: 1 2 3

5 Dinamikus memóriakezelés Dinamikus, egydimenziós tömb #include <stdio.h> #include <stdlib.h> #define MERET 3 int main(void) { int *dintomb, i; if((dintomb = (int*)malloc(meret*sizeof(int)))) { *dintomb = 1; *(dintomb+1) = 2; dintomb[2] = 3; printf("'dintomb' elemei: \n"); for(i=0; i<meret; i++) printf("%d ", *(dintomb+i)); putchar('\n'); free(dintomb); } else { fprintf(stderr, "Nem sikerült memóriát foglalni " "'dintomb' részére.\n"); } return 0; } Kimenet 'dintomb' elemei: 1 2 3

6 Dinamikus memóriakezelés Egydimenziós mutatótömb #include <stdio.h> #define MERET 3 int main(void) { char* muttomb[meret] = {"Egy", "két", "há"}; int i; printf("'muttomb' elemei: \n"); for(i=0; i<meret; i++) printf("%s (%p) (%p)\n", muttomb[i], &muttomb[i], &muttomb[i][0]); putchar('\n'); return 0; } Kimenet 'muttomb' elemei: Egy (0xbfa8e490) (0x80485b0) két (0xbfa8e494) (0x80485b4) há (0xbfa8e498) (0x80485b9)

7 Dinamikus memóriakezelés Dinamikus, egydimenziós mutatótömb (1/2) #include <stdio.h> #include <stdlib.h> #include <string.h> #define MERET 3 #define MACSEK "Lukrécia" int main(void) { char** dinmuttomb; int i; if((dinmuttomb = (char**)malloc(meret*sizeof*dinmuttomb))) { *dinmuttomb = "Frakk"; *(dinmuttomb+1) = "Szerénke"; if((dinmuttomb[2] = (char*)malloc(strlen(macsek)+1))) { strcpy(*(dinmuttomb+2), MACSEK); printf("'dinmuttomb' elemei: \n"); for(i=0; i<meret; i++) printf("%s ", *(dinmuttomb+i)); putchar('\n'); free(dinmuttomb[2]);

8 Dinamikus memóriakezelés Dinamikus, egydimenziós mutatótömb (2/2) } else { fprintf(stderr, "Nem sikerült memóriát foglalni %s " "részére.\n", MACSEK); } free(dinmuttomb); } else { fprintf(stderr, "Nem sikerült memóriát foglalni " "'dinmuttomb' részére.\n"); } return 0; } Kimenet 'dinmuttomb' elemei: Frakk Szerénke Lukrécia

9 Dinamikus memóriakezelés Kétdimenziós tömb (mátrix) #include <stdio.h> #define MERET 3 int main(void) { int mtx[meret][meret] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, i, j; printf("'mtx' elemei (és címeik): \n"); for(i=0; i<meret; i++) { printf("mtx[%d]: (%p)\n ", i, &mtx[i]); for(j=0; j<meret; j++) printf("[%d][%d]=%d (%p) ", i, j, mtx[i][j], &mtx[i][j]); putchar('\n'); } return 0; } Kimenet 'mtx' elemei (és címeik): mtx[0]: (0xbfcfde34) [0][0]=1 (0xbfcfde34) [0][1]=2 (0xbfcfde38) [0][2]=3 (0xbfcfde3c) mtx[1]: (0xbfcfde40) [1][0]=4 (0xbfcfde40) [1][1]=5 (0xbfcfde44) [1][2]=6 (0xbfcfde48) mtx[2]: (0xbfcfde4c) [2][0]=7 (0xbfcfde4c) [2][1]=8 (0xbfcfde50) [2][2]=9 (0xbfcfde54)

10 Dinamikus memóriakezelés Dinamikus, kétdimenziós tömb (mutatótömb) (1/2) #include <stdio.h> #include <stdlib.h> #define MERET 3 int main(void) { int** dinmtx, i, j; if((dinmtx = (int**)calloc(meret, sizeof(int*)))) { for(i=0; i<meret; i++) { if((*(dinmtx+i) = (int*)malloc(meret*sizeof**dinmtx))) { for(j=0; j<meret; j++) *(*(dinmtx+i)+j) = i*meret+j+1; } else { fprintf(stderr, "Nem sikerült memóriát foglalni " "'dinmtx[%d]' részére.\n", i); } } printf("'dinmtx' elemei (és címeik): \n"); for(i=0; i<meret; i++) { if(dinmtx[i]) { printf("dinmtx[%d]: (%p)\n ", i, &dinmtx[i]); for(j=0; j<meret; j++) printf("[%d][%d]=%d (%p) ", i, j, dinmtx[i][j],&dinmtx[i][j]); putchar('\n'); free(*(dinmtx+i)); } } free(dinmtx);

11 Dinamikus memóriakezelés Dinamikus, kétdimenziós tömb (mutatótömb) (2/2) } else { fprintf(stderr, "Nem sikerült memóriát foglalni " "'dinmtx' részére.\n"); } return 0; } Kimenet 'dinmtx' elemei (és címeik): dinmtx[0]: (0x8ee0008) [0][0]=1 (0x8ee0018) [0][1]=2 (0x8ee001c) [0][2]=3 (0x8ee0020) dinmtx[1]: (0x8ee000c) [1][0]=4 (0x8ee0028) [1][1]=5 (0x8ee002c) [1][2]=6 (0x8ee0030) dinmtx[2]: (0x8ee0010) [2][0]=7 (0x8ee0038) [2][1]=8 (0x8ee003c) [2][2]=9 (0x8ee0040)

12 Dinamikus memóriakezelés Dinamikus, kétdimenziós tömb (alternatív megoldás) #include <stdio.h> #include <stdlib.h> #define MERET 3 int main(void) { int* dinmtx2, i, j; if((dinmtx2 = (int*)calloc(meret*meret, sizeof(int)))) { for(i=0; i<meret; i++) *(dinmtx2+i*meret+i) = 1; printf("'dinmtx2' elemei: \n"); for(i=0; i<meret; i++) { for(j=0; j<meret; j++) printf("%d ", *(dinmtx2+i*meret+j)); putchar('\n'); } free(dinmtx2); } else { fprintf(stderr, "Nem sikerült memóriát foglalni " "'dinmtx2' részére.\n"); } return 0; }

13 Dinamikus memóriakezelés Kimenet 'dinmtx2' elemei:

14 Dinamikus memóriakezelés Karakterláncnak futásid ben memóriát foglaló getline() (1/2) #include <stdio.h> #include <stdlib.h> int dingetline(char** eredm) { int i = 0, meret = 16; char *s = NULL, *uj, c; if(!(s = (char*)malloc(meret))) { *eredm = NULL; return 0; } while((c=getchar())!='\n' && c!=eof) { *(s+i++) = c; if(i == meret-1) { meret *= 2; uj = (char*)realloc(s, meret); if(uj) s = uj; else break; } } *(s+i) = '\0'; *eredm = s; return i; }

15 Dinamikus memóriakezelés Karakterláncnak futásid ben memóriát foglaló getline() (2/2) int main(void) { char* s; printf("adjon meg egy tetsz leges hosszúságú szöveget!\n"); dingetline(&s); if(s) { printf("ezt adta meg: %s\n", s); free(s); } else { fprintf(stderr, "Sikertelen memóriafoglalás.\n"); } return 0; } Kimenet Adjon meg egy tetsz leges hosszúságú szöveget! Ezt adta meg: Ld. még: getline()

16 Tömb paramétert fogadó függvények Vektor átadása függvénynek #include <stdio.h> #define MERET 3 /* void nyomtat(int[], int); */ void nyomtat(int*, int); int main(void) { int tomb[meret] = {1, 2, 3}; /* tomb++; error: lvalue required as increment operand */ nyomtat(tomb, MERET); return 0; } void nyomtat(int* t, int db) { int* utso = t+db; while(t<utso) printf("%d ", *t++); putchar('\n'); } Kimenet 1 2 3

17 Tömb paramétert fogadó függvények Mutatótömb átadása függvénynek #include <stdio.h> #define MERET 3 void nyomtat(char* [], int); int main(void) { char* tomb[meret] = {"Nils Holgersson", "Pocok", "Márton"}; nyomtat(tomb, MERET); return 0; } void nyomtat(char* t[], int db) { int i; for(i=0; i<db; i++) printf("%s ", *t++); putchar('\n'); } Kimenet Nils Holgersson Pocok Márton

18 Tömb paramétert fogadó függvények Mátrix átadása függvénynek (1/2) #include <stdio.h> #define MERET 3 void nyomtat(int (*)[], int, int); /* void nyomtat(int [][MERET], int, int); */ /* void nyomtat(int [MERET][MERET], int, int); */ /* void nyomtat(int**, int, int); */ /* void nyomtat(int [][], int, int); error: array type has incomplete element type */ int main(void) { int tomb[meret][meret] = {{1, 2, 3}, {8, 9, 4}, {7, 6, 5}}; nyomtat(tomb, MERET, MERET); return 0; } void nyomtat(int (*t)[meret], int s, int o) { /* void nyomtat(int t[][meret], int s, int o) { */ /* void nyomtat(int t[meret][meret], int s, int o) { */ /* void nyomtat(int **t, int s, int o) { expected `int **' but argument is of type `int (*)[3]' */ /* void nyomtat(int (*t)[], int s, int o) { error: increment of pointer to unknown structure error: arithmetic on pointer to an incomplete type */

19 Tömb paramétert fogadó függvények Mátrix átadása függvénynek (2/2) int i, j, *elem; for(i=0; i<s; i++) { elem = *t++; for(j=0; j<o; j++) printf("%d ", *elem++); putchar('\n'); } } Kimenet

20 Tömböt visszaadó függvények Automatikus tárolási osztályú tömb (címe) nem adható vissza biztonságosan! Mátrixot visszaadó függvény #include <stdio.h> #define MERET 3 int mtx[meret][meret] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int (*vissza(void))[meret] { return mtx; } int main(void) { int (*pmtx)[meret], i, j; printf("'mtx' elemei:\n"); pmtx = vissza(); for(i=0; i<meret; i++) { for(j=0; j<meret; j++) printf("%d ", pmtx[i][j]); putchar('\n'); } return 0; }

21 Tömböt visszaadó függvények Ennél a megoldásnál az egymást követ hívások ugyanazt a puert használják; mi lenne, ha különféleképpen paraméterezett itoa() hívások szerepelnének ugyanannak a printf()-nek paramétereiként? Vektort visszaadó függvény #include <stdio.h> #define MAX 128 char* itoa(int i) { static char buf[max]; sprintf(buf, "%d", i); return buf; } #define ERTEK 123 int main(void) { printf("%d karakteres alakja: %s\n", ERTEK,itoa(ERTEK)); return 0; }

22 Tömböt visszaadó függvények Vektort visszaadó függvény (dinamikus változat) #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 128 char* itoa(int i) { char buf[max], *s; int hossz; sprintf(buf, "%d", i); hossz = strlen(buf); if((s = (char*)malloc(hossz+1))) { strcpy(s, buf); return s; } else return NULL; } #define ERTEK 123 int main(void) { char *s1, *s2; printf("%d és %d karakteres alakjai: %s, %s.\n", ERTEK, ERTEK*2, s1=itoa(ertek), s2=itoa(ertek*2)); free(s1); free(s2); return 0; }

23 Parancssori paraméterek Minden C programban lennie kell pontosan egy, programot indító main() fv.-nek (konzol alk. esetén). Paraméterei: elhagyhatóak, nem ANSI szabványosak. A main() lehetséges alakjai: int main(); Nem mondunk semmit a paraméterezésr l. int main(void); Nem fogad paramétereket. int main(int argc); Csak a paraméterek száma ismert (beleszámítja a program nevét is). int main(int argc, char* argv[]); A paraméterek száma és értéke is ismert; argv mutatótömb, melynek argc index eleme NULL mutató.

24 Parancssori paraméterek Parancssori paraméterek lekérdezése, 1. változat #include <stdio.h> int main(int argc, char* argv[]) { while(*argv) printf("%s\n", *argv++); return 0; } Parancssori paraméterek lekérdezése, 2. változat #include <stdio.h> int main(int argc, char* argv[]) { int i; for(i=0; i<argc; i++) printf("%s\n", argv[i]); return 0; } Kimenet./proba 42 Lolka "Batka manó"./proba 42 Lolka Batka manó

25 Parancssori paraméterek Microsoft-specikus megoldás: az stdlib.h bekapcsolása után elérhet ek: extern int argc extern char** argv Parancssori paraméterek lekérdezése, 3. változat #include <stdio.h> #include <stdlib.h> int main(void) { int i; for(i=0; i< argc; i++) printf("%s\n", argv[i]); return 0; } Megjegyzés: argv[0] azt a karakterláncot tartalmazza, amivel a programot elindították.

26 Példa parancssori paraméterek használatára pelda30m.c (1/3) /* pelda30m.c -- Adott szöveg keresése szöveg soronként Indítas: pelda30m -x -n keresend _szöveg */ #include <stdio.h> #include <string.h> #include <ctype.h> #define MAXSOR 1000 int getline(char s[], int lim); int main(int argc, char *argv[]) { char sor[maxsor+1]; /* Beolvasott sor */ char *k; /* Mutató a parancssor elemzéséhez */ long sorszam = 0L; /* Sorszámláló */ int kiveve = 0; /* Ha 1, azon szöveg sorok írandók ki, melyekben nincs benn a ker. szöveg */ int szam = 0; /* Ha 1, a kiírt szöveg sorokat sorszámmal kell ellátni. */

27 Példa parancssori paraméterek használatára pelda30m.c (2/3) /* A parancssor opcionális paramétereinek (-x -n) lekezelése */ while(--argc>0 && (*++argv)[0]=='-') for(k=argv[0]+1; *k!='\0'; k++) switch(tolower(*k)) { case 'x': kiveve = 1; break; case 'n': szam = 1; break; default: printf("\n\r\tkeresés: -%c illegális kapcsoló!\n", *k); argc = 0; break; } /* A keresett szöveg paraméter */ if(argc!=1) printf("\n\rindítás: pelda30m -x -n keresend _szöveg!!!\n"); else { printf("gépeljen be szöveg sorokat üres sorig vagy EOF-ig!\n" "Kiírjuk%s, melyikben %sszerepel %s!\n", szam?" sorszámával együtt":"",kiveve?"nem ":"",*argv);

28 Példa parancssori paraméterek használatára pelda30m.c (3/3) while(getline(sor, MAXSOR)>0) { sorszam++; if((strstr(sor, *argv))!= kiveve) { if(szam) printf("%ld: ", sorszam); printf("%s\n", sor); } } } return 0; } int getline(char s[], int lim) { /* */ } Kimenet./pelda30m -n alma Gépeljen be szöveg sorokat üres sorig vagy EOF-ig! Kiírjuk sorszámával együtt, melyikben szerepel alma! eper Balmazújváros 2: Balmazújváros

29 Környezeti változók Kulcs-érték párok = jellel elválasztva. Feladatuk lehet pl. programok m ködését befolyásoló paraméterek tárolása, programok keresési útvonalainak tárolása (PATH), stb. Ahány konzolt nyitunk, annyi halmaz jön létre a változókból! Környezeti változók használata C:\Users\hatwagner>set ALLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\hatwagner\AppData\Roaming CommonProgramFiles=C:\Program Files\Common Files C:\Users\hatwagner>set kulcs A következõ környezeti változó nem definiált: kulcs. C:\Users\hatwagner>set kulcs=ertek C:\Users\hatwagner>set kulcs kulcs=ertek C:\Users\hatwagner>set kulcs= C:\Users\hatwagner>set kulcs A következõ környezeti változó nem definiált: kulcs.

30 Környezeti változók Környezeti változók lekérdezésének módjai: a main() fv. harmadik paraméterén keresztül int main(int argc, char* argv[], char* env[]); char *getenv(const char *name); Beszerkesztend az stdlib.h, csak a kulcsot kell megadni; ha nem létezik a kulcs, NULL értéket ad vissza A visszaadott mutató nem alkalmas a változó értékének biztonságos módosítására! Módosítás és törlés: int putenv(char *string); Beszerkesztend az stdlib.h. string alakja: kulcs=érték. Ha nincs ilyen kulcs, létrehozza a megadott értékkel, egyébként módosítja az értéket. Csak kulcs megadásával lehet a változót törölni. 0 v. t. érték jelzi a sikeres módosítást, 1 pedig a hibát.

31 Környezeti változók Változók listázása #include <stdio.h> int main(int argc, char* argv[], char* env[]) { while(*env) printf("%s\n", *env++); return 0; } Változó lekérdezése, módosítása (1/2) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define KULCS "szereplo" #define ERTEK "Pumukli" #define CSERE "Eder mester" int main(void) { char* kv; char uj[128]; SetConsoleOutputCP(1250);

32 Környezeti változók Változó lekérdezése, módosítása (2/2) if((kv = getenv(kulcs))) { printf("%s értéke %s\n", KULCS, kv); if(!strcmp(kv, CSERE)) { sprintf(uj, "%s=%s", KULCS, ERTEK); putenv(uj); printf("%s értékét %s-ra cseréltük.\n", KULCS, ERTEK); } } else { printf("%s nem definiált.\n\n", KULCS); } return 0; }

33 Programbefejezés A main() fv. int típusú v. t. értéke a státusz kód, vagy kilépési kód. Megállapodás szerint 0 jelzi a sikeres programlefutást bármely más érték pedig a különféle hibákat. stdlib.h beszerkesztése szimbolikus állandók: EXIT_SUCCESS 0 EXIT_FAILURE 1 Státuszkód el állítható: main()-ben kiadott return segítségével bármely fv.-ben kiadott exit(), abort() hívásokkal (stdlib.h)

34 Programbefejezés void exit(int status); status értékét kapja meg a szül folyamat meghívja a regisztrált kilépési függvényeket (ld. atexit()) puereket üríti nyitott fájlokat lezárja void abort(void); stderr Abnormal program termination SIGABRT jelzést vált ki ha nincs regisztrált jelzéskezel (ld. signal()), 3-as státuszkóddal kilép

35 Programbefejezés vissza.c #include <stdio.h> int main(void) { char c; printf("adja meg a visszatérési értéket 0-9 között! "); while((c=getchar())<'0' c>'9'); return c-'0'; } off vissza.exe if ERRORLEVEL 2 goto ketto if ERRORLEVEL 1 goto egy if ERRORLEVEL 0 goto nulla :nulla ECHO A program hibamentesen lefutott. goto vege :egy ECHO Hibakod: 1. goto vege :ketto ECHO Hibakod: 2, vagy tobb. :vege

36 Függvény (kód) mutatók Függvények belépési pontját címz mutatók int fv(double, int); int (*pfv)(double, int); int *ipfv(double, int); egészet címz mutatóval visszatér függvény pfv: kódmutató változó, fv: konstans kódmutató Értékadás hozzárendeléssel: pfv = fv; Inicializációval: int (*pfv)(double, int) = fv; Prototípus is elég a hozzárendeléshez Meghatározatlan paraméterlistájú függvényt címz mutató is kaphat értéket: int (*mpfv)() = fv; Függvényhívás: int i = fv(1.2, 3); int i = (*pfv)(1.2, 3); Függvény bármilyen függvényre mutató kifejezéssel meghívható

37 Függvény (kód) mutatók Kódmutatókkal végezhet m veletek: címük képzése sizeof operátor operandusai lehetnek végrehajtható rajtuk az indirekció értéket kaphatnak meghívhatók velük függvények paraméterként átadhatók függvényeknek kódmutatótömbök hozhatók létre függvény visszatérési értéke lehet explicit típuskonverzióval más típusra alakíthatóak Nem alkalmazható rájuk mutatóaritmetika, kivéve egyenl ségi relációk (== és!=)

38 Kódmutató paramétert fogadó függvények Rekurzív gyorsrendezés: stdlib.h void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); Szövegsorok sorba rendezése (1/2) #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 int hasonlit(const void *, const void *); int getline(char*, int); int main(void) { char* sorok[max]; char sor[max]; int db, hossz, i;

39 Kódmutató paramétert fogadó függvények Szövegsorok sorba rendezése (2/2) printf("szövegsorok olvasása üres sorig vagy EOF-ig,\n" "majd sorba rendezett kiírása.\n"); for(db=0; (hossz=getline(sor, MAX)); db++) { if(!(sorok[db] = (char*)malloc(hossz+1))) break; strcpy(sorok[db], sor); } qsort(sorok, db, sizeof(char*), hasonlit); printf("sorba rendezve:\n"); for(i=0; i<db; i++) { printf("%s\n", sorok[i]); free(sorok[i]); } return 0; } int hasonlit(const void *p1, const void *p2) { return strcmp(*(const char**)p1, *(const char**)p2); } int getline(char *s, int lim) { /* */ }

40 Kódmutató paramétert fogadó függvények Kilépési fv. regisztrálása: stdlib.h int atexit(void (*function)(void)); Normál programbefejezéskor (main() return, exit()) meghívásra kerülnek Hívás a regisztrálással ellentétes sorrendben Hiba esetén nem zérus értéket ad vissza Kilépési függvények kipróbálása #include <stdio.h> #include <stdlib.h> void kfv1(void) { printf("els kilépési függvény!\n"); } void kfv2(void) { printf("második kilépési függvény!\n"); }

41 Kódmutató paramétert fogadó függvények Kilépési függvények kipróbálása int main(void) { printf("kilépési függvények\n"); if(atexit(kfv1)) { fprintf(stderr, "Hiba az 1. fv. regisztrálásakor!\n"); return 1; } if(atexit(kfv2)) { fprintf(stderr, "Hiba a 2. fv. regisztrálásakor!\n"); return 2; } return 0; } Kimenet Kilépési függvények Második kilépési függvény! Els kilépési függvény!

42 Kódmutatótömb, kódmutató visszatérési érték Kódmutatókból álló tömbök is létrehozhatók: Kódmutatótömb int fv1(double, int); int fv2(double, int); int fv3(double, int); int (*pfvt[])(double, int) = {fv1, fv2, fv3}; int i; i = (*pfvt[1])(1.2, 3); Kódmutató visszatérési érték: signal.h void ( *signal(int signum, void (*handler)(int)) ) (int); A függvény neve signal Paraméterei: int (jelzés azonosítója) és void(*handler)(int) (jelzéskezel fv., vagy SIG_IGN, SIG_DFL) V.t. érték: void(*)(int) (mint a 2. paraméter; régi jelzéskezel, vagy SIG_ERR hiba esetén)

43 Kódmutató visszatérési érték Jelzés kezelése #include <stdio.h> #include <stdlib.h> #include <time.h> #include <signal.h> void jk(int jelzes) { printf("%d: Kilépés a programból.\n", jelzes); exit(0); } int main(void) { printf("véletlenszámok el állítása CTRL+C-ig\n"); srand((unsigned)time(null)); if(signal(sigint, jk)==sig_err) { fprintf(stderr, "Jelzéskezel regisztrálása " "sikertelen.\n"); return 1; } while(1) printf("%d\t", rand()); return 0; }

44 Kódmutató visszatérési érték Kimenet./muvelet ^C : Kilépés a programból.

45 Explicit típuskonverzió, típusdeníció (typedef) Típuskonverzió int fv(double, int), i; int (*pfv)(double, int) = fv; void (*vpfv)(double); vpfv = ( void(*)(double) )pfv; (*vpfv)(1.2); /* Vajon m ködni fog? */ pfv = ( int(*)(double, int) )vpfv; i = (*pfv)(1.2, 3); /* OK */ Meglév típusokhoz új nevet deniálhatunk (szinonímák) a typedef segítségével. Általános alak: typedef tipus azonosito; Növeli a programkód hordozhatóságát (típusok paraméterezhet sége), olvashatóság javítása Az új típusnév elfedi a típus jellegét (tömb, függvény, egyszer változó, stb.) A típusdeníció korábbi típusdeníciókat is felhasználhat

46 Típusok és típusdeníció (typedef) Típusok megadása típusdenícióval és anélkül /* i1, i2 egészek */ int i1; typedef int ti; ti i2; /*pi1, pi2 egészet címz mutatók */ int *pi1; typedef int *tpi; tpi pi2; /* ia1, ia2 3 elem, egészekb l álló tömbök */ int ia1[3]; typedef int tia[3]; tia ia2; /* ipa1, ipa2 3 elem mutatótömbök */ int *ipa1[3]; typedef int *tipa[3]; tipa ipa2; /* pia1, pia2 3 elem, egészekb l álló tömböt címz mutatók */ int (*pia1)[3]; typedef int (*tpia)[3]; tpia pia2; /* pf1, pf2 egésszel visszatér, paramétert nem fogadó függvényt címz mutatók */ int (*pf1)(void); typedef int (*tpf)(void); tpf pf2;

47 Típusok és típusdeníció (typedef) Típusok megadása típusdenícióval és anélkül /* f1, f2 értéket vissza nem adó függvények, melyek olyan függvényt címz mutatót várnak paraméterként, mely egésszel tér vissza és double paramétert fogad */ void f1(int(*pf)(double)); typedef void tf(int(*pf)(double)); tf f2; /* fr1, fr2 paramétert nem fogadó függvények, melyek olyan függvényt címz mutatót adnak vissza, ami egész visszatérés és double paramétert fogad */ int (*fr1(void))(double); typedef int (*tfr(void))(double); tfr fr2; /* int atexit(void (*function)(void)); */ typedef void (*ft)(void); int atexit(ft function); /* void (*signal(int signum,void(*handler)(int)))(int); */ typedef void (*jt)(int); jt signal(int signum, jt handler);

48 Típusdeníció (typedef) Bináris keresés: stdlib.h void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); M velet végzése parancssorban megadott értékekkel (1/3) #include <stdio.h> #include <stdlib.h> #include <string.h> typedef double(*fv)(double, double); double osszeadas(double, double); double szorzas(double, double); int hasonlit(const void *, const void *); int main(int argc, char* argv[]) { double eredm; char **n, *nev[] = {"osszeadas", "szorzas"}; fv aktmuv, muvelet[] = {osszeadas, szorzas}; int i;

49 Típusdeníció (typedef) M velet végzése parancssorban megadott értékekkel (2/3) printf("m veletek végzése számokkal\n"); if(argc<3) { printf("használat:./muvelet osszeadas szorzas " "szam1 szam2 \n"); return 1; } n = bsearch(argv+1, nev, sizeof(nev)/sizeof(*nev), sizeof(char*), hasonlit); if(!n) { printf("ismeretlen m velet!\n"); return 2; } aktmuv = muvelet[n-nev]; eredm = atof(argv[2]); for(i=3; i<argc; i++) eredm = (*aktmuv)(eredm, atof(argv[i])); printf("eredmény: %.3f\n", eredm); return 0; }

50 Típusdeníció (typedef) M velet végzése parancssorban megadott értékekkel (3/3) double osszeadas(double a, double b) { return a+b; } double szorzas(double a, double b) { return a*b; } int hasonlit(const void *p1, const void *p2) { return strcmp(*(const char**)p1, *(const char**)p2); } Kimenet./muvelet osszeadas M veletek végzése számokkal Eredmény: /muvelet szorzas M veletek végzése számokkal Eredmény: /muvelet kivonas M veletek végzése számokkal Ismeretlen m velet!

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r Programozás I. Széchenyi István Egyetem, Gy r 2014. november 16. Áttekintés kel kapcsolatos fogalmak deklaráció Több, kompatibilis változat is elképzelhet. Meg kell el znie a fv. hívását. Mindenképp rögzíti

Részletesebben

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. április 4. Számok rendezése Feladat: Fejlesszük tovább úgy a buborék rendez algoritmust bemutató példát, hogy a felhasználó adhassa meg a

Részletesebben

Programozás 6. Dr. Iványi Péter

Programozás 6. Dr. Iványi Péter Programozás 6. Dr. Iványi Péter 1 Előfeldolgozás része Makrók A forrás kódban elvégzi a helyettesítéseket a fordító Csak egyszer végez helyettesítést Nem olyan makrók, mint a LISP vagy Scheme esetén Csak

Részletesebben

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés A C programozási nyelv V. Struktúra Dinamikus memóriakezelés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv V. (Struktúra, memóriakezelés) CBEV5 / 1 A struktúra deklarációja 1.

Részletesebben

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK Sapientia EMTE 2015-16 1 Felülnézet 1 Feltételes fordítás #if, #else, #elif, #endif, #ifdef, #ifndef stb. Felülnézet 2 #include: hatására a preprocesszor

Részletesebben

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

A C programozási nyelv III. Pointerek és tömbök. A C programozási nyelv III. Pointerek és tömbök. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv III. (Pointerek, tömbök) CBEV3 / 1 Mutató (pointer) fogalma A mutató olyan változó,

Részletesebben

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

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás 5.3. Mutatók,tömbök A mutató vagy pointer olyan változó, amely egy másik változó címét tartalmazza. A C nyelvű programokban gyakran használják a

Részletesebben

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

A C programozási nyelv III. Pointerek és tömbök. A C programozási nyelv III. Pointerek és tömbök. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv III. (Pointerek, tömbök) CBEV3 / 1 Mutató (pointer) fogalma A mutató olyan változó,

Részletesebben

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. május 6. Parancssori paraméterek Parancssorban történ programindításkor a program nevét követ en szóközökkel elválasztva paraméterek (command

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7. Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Dinamikus memóriakezelés Dinamikus tömbök Dinamikus stringek Program kapcsolata a

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 11. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja

Részletesebben

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism) Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény

Részletesebben

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor. Függvény pointer Több feladat közül futási időben döntöm el, hogy melyiket hajtom végre. A függvényre mutató pointer a függvény kódjának a címére mutat, azon keresztül meghívhatom a függvényt. A pointernek

Részletesebben

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

Szövegek C++ -ban, a string osztály Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2019. augusztus 29. Feladat: írjuk ki az els 10 természetes szám négyzetét! #i n c l u d e i n t main ( v o i d ) { p r

Részletesebben

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek

Részletesebben

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből

Részletesebben

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok

Részletesebben

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában Programozás alapjai C nyelv 8. gyakorlat Szeberényi mre BME T Programozás alapjai. (C nyelv, gyakorlat) BME-T Sz.. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény

Részletesebben

A C programozási nyelv VI. Parancssori argumentumok File kezelés

A C programozási nyelv VI. Parancssori argumentumok File kezelés A C programozási nyelv VI. Parancssori argumentumok File kezelés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv VI. (Parancssori argumentum, file kezelés) CBEV6 / 1 Parancssori

Részletesebben

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

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás Mérnöki programozás 7 Szerkesztette: dr. Vass Péter Tamás Függvények Függvény (function) egyedi azonosítónévvel ellátott számítási egység. A függvények formájában kidolgozott programkódok viszonylag egyszerűbb

Részletesebben

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

Programozás II. 4. Dr. Iványi Péter Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

C programozás. 6 óra Függvények, függvényszerű makrók, globális és C programozás 6 óra Függvények, függvényszerű makrók, globális és lokális változók 1.Azonosítók A program bizonyos összetevőire névvel (azonosító) hivatkozunk Első karakter: _ vagy betű (csak ez lehet,

Részletesebben

Programozas 1. Strukturak, mutatok

Programozas 1. Strukturak, mutatok Programozas 1 Strukturak, mutatok Strukturak Tömb: több egyforma típusú változó együttese Struktúra: több különböző típusú de logikailag egybetartozó változó együttese, amelyet az egyszerű kezelhetőség

Részletesebben

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union Programozás alapjai C nyelv 10. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.21. -1- Standard függvények Standard függvények amelyeket

Részletesebben

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main main int main(int argc, char* argv[]) { return 0; main main int int main int return 0; main (int argc, char* argv[]) main #include #include int main(int argc, char* argv[]) { double

Részletesebben

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I. Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Részletesebben

Programozás 5. Dr. Iványi Péter

Programozás 5. Dr. Iványi Péter Programozás 5. Dr. Iványi Péter 1 Struktúra Véges számú különböző típusú, logikailag összetartozó változó együttese, amelyeket az egyszerű kezelhetőség érdekében gyűjtünk össze. Rekord-nak felel meg struct

Részletesebben

Programozás I gyakorlat. 10. Stringek, mutatók

Programozás I gyakorlat. 10. Stringek, mutatók Programozás I gyakorlat 10. Stringek, mutatók Karakter típus A char típusú változókat karakerként is kiírhatjuk: #include char c = 'A'; printf("%c\n", c); c = 80; printf("%c\n", c); printf("%c\n",

Részletesebben

Objektumok tulajdonságai

Objektumok tulajdonságai Programozás I. Széchenyi István Egyetem, Gy r 2013. november 4. Objektumok attribútumai objektum Konstans vagy változó érték(ek)et tartalmazó, azonosítható memóriaterület. deklaráció Kapcsolatot teremt

Részletesebben

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán Keresés Rendezés Feladat Keresés és rendezés A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán 2016. november 7. Farkas B., Fiala

Részletesebben

Információs Technológia

Információs Technológia Információs Technológia A C programozási nyelv elemei, rendező algoritmusok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010.

Részletesebben

Programozás I. 5. Előadás: Függvények

Programozás I. 5. Előadás: Függvények Programozás I 5. Előadás: Függvények Függvény Egy alprogram Egy C program általában több kisméretű, könnyen értelmezhető függvényből áll Egy függvény megtalálható minden C programban: ez a main függvény

Részletesebben

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

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 31. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 31. Városok közötti távolság Feladat: két város nevének beolvasása, városok közötti távolság megjelenítése. Kilépés azonos városok

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények Dr. Bécsi Tamás 6. Előadás Bevezetés Egy idő után az egyetlen main(){ függvénnyel megírt programunk túl nagy méretű lesz. Vannak

Részletesebben

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3) Programozás alapjai C nyelv 5. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.17. -1- Tömbök Azonos típusú adatok tárolására. Index

Részletesebben

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre. C memóriakezelés Ez a kis segédanyag az adatszerkezetek órán használt eszközök megértését hivatott elősegíteni. A teljesség igénye nélkül kerül bemutatásra a mutató típus és a dinamikus memóriakezelés.

Részletesebben

Mutatók és mutató-aritmetika C-ben március 19.

Mutatók és mutató-aritmetika C-ben március 19. Mutatók és mutató-aritmetika C-ben 2018 március 19 Memória a Neumann-architektúrában Neumann-architektúra: a memória egységes a címzéshez a természetes számokat használjuk Ugyanabban a memóriában van:

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. szeptember 27. Háromszög szerkeszthet ségének ellen rzése ANSI C (C89) megvalósítás #i n c l u d e i n t main ( v

Részletesebben

10. gyakorlat. Pointerek Tárolási osztályok

10. gyakorlat. Pointerek Tárolási osztályok 10. gyakorlat Pointerek Tárolási osztályok Pointer A pointer egy mutató egy memóriacellára, egyfajta "parancsikon", csak nem fájlokra, hanem változókra. Létrehozás: tipus * név;, ahol a típus a hivatkozott

Részletesebben

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

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3 Darvay Zsolt Típusok és nevek a forráskódban Állandók és változók Hatókörök és az előfeldolgozó Bevitel és kivitel Kifejezések Utasítások Mutatók Függvények Struktúrák és típusok Állománykezelés C programozás

Részletesebben

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ; 1. Írjunk programot, amely függvény alkalmazásával meghatározza n a értékét, (a az n-edik gyök alatt), az általunk megadott pontossággal, iterációval. Az iteráció képlete a következő: ahol : n-1 x uj =

Részletesebben

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása A verem (stack) A verem egy olyan struktúra, aminek a tetejére betehetünk egy új (vagy sorban több) elemet a tetejéről kivehetünk egy (vagy sorban több) elemet A verem felhasználása Függvény visszatérési

Részletesebben

Típusok és konstansok

Típusok és konstansok Programozás I. Széchenyi István Egyetem, Gy r 2013. október 3. Szimbólumok Forráskód részei: szimbólumok (szintaktikai egységek, tokenek) fehér karakterek (összevonás, gyelmen kívül hagyás) Szimbólumok:

Részletesebben

Kivételkezelés a C++ nyelvben Bevezetés

Kivételkezelés a C++ nyelvben Bevezetés Kivételkezelés a C++ nyelvben Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Kivételkezelés a C++ nyelvben CPP9 / 1 Hagyományos hibakezelés Függvény visszatérési értéke (paramétere) hátrányai:

Részletesebben

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

Programozás alapjai 9.Gy: Struktúra 2. Programozás alapjai 9.Gy: Struktúra 2. Ördögi részletek P R O A L A G 35/1 B ITv: MAN 2018.11.10 Euró árfolyam statisztika Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR).

Részletesebben

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók Dr. Bécsi Tamás 7. Előadás 5.3. Mutatók,tömbök A mutató vagy pointer olyan változó, amely egy másik változó címét tartalmazza.

Részletesebben

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE 2015-16 1 Karakterláncok A karakterláncokat char-tömbökben tároljuk. Egy karakterlánc végét a karakterlánc-végjel jelzi: \0 char s[10] = sapi ;... s

Részletesebben

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

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -1- Mit tudunk már? Típus fogalma char, int, float,

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

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

A C programozási nyelv II. Utasítások. A függvény. A C programozási nyelv II. Utasítások. A függvény. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv II (Utasítások, fuggvények) CBEV2 / 1 Kifejezés utasítás Kifejezés utasítás, blokk

Részletesebben

Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék CPP0 / 1 Története A C++ programozási nyelv a C programozási nyelv objektum orientált kiterjesztése. Az ANSI-C nyelvet

Részletesebben

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa Miskolci Egyetem Általános Informatikai Tanszék Bevezetés a C programozási nyelvbe Az Általános Informatikai Tanszék C nyelvi kódolási szabványa Oktatási segédletek a levelező műszaki informatikus hallgatók

Részletesebben

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája: Struktúrák (struct) A struktúra egy olyan összetett adatszerkezet, amely nemcsak azonos típusú elemeket rendelhet össze. A struktúra definíciójában leírjuk, hogy a struktúra hogyan épül fel. A struktúra

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 15. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 15. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 15. Leghosszabb 3D vektorok kikeresése 1 #i n c l u d e 2 #i n c l u d e 3 #d e f i n e MAX 1000

Részletesebben

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 1. feladat: Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR). Írjon C programokat az alábbi kérdések

Részletesebben

M veletek és kifejezések

M veletek és kifejezések Programozás I. Széchenyi István Egyetem, Gy r 2013. szeptember 29. M veletek & kifejezések M veletek az operandusok száma szerint: Egyoperandusos, operátor operandus, pl. 6, sizeof(long) Kétoperandusos,

Részletesebben

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

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 10. gyakorlat C++: alprogramok deklarációja és paraméterátadása 2011.11.22. Giachetta Roberto groberto@inf.elte.hu

Részletesebben

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

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő

Részletesebben

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi. 11. gyakorlat Sturktúrák használata I. Új típus új műveletekkel 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi. typedef struct datum { int ev; int ho; int nap;

Részletesebben

Programozás C nyelven (9. ELŐADÁS) Sapientia EMTE

Programozás C nyelven (9. ELŐADÁS) Sapientia EMTE Programozás C nyelven (9. ELŐADÁS) Sapientia EMTE 2015-16 1 POINTEREK ismétlés double x = 3.14, *px = &x; unsigned char *p, *p1, *p2; p1 = (unsigned char*)px; p2 = p1 + sizeof(double); for ( p = p2-1 ;

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

7/8. gyakorlat Karaktertömbök és sztringkezelés

7/8. gyakorlat Karaktertömbök és sztringkezelés 7/8. gyakorlat Karaktertömbök és sztringkezelés 1. feladat: Karaktertömb kezelése Egy beolvasott karaktert lineáris kereső eljárással keressen meg az angol ábécében (az ábécé betűit tárolja inicializált

Részletesebben

Programozás I gyakorlat

Programozás I gyakorlat Programozás I. - 9. gyakorlat Sztringkezelés, mutatók Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Rendszer- és Számítástudományi Tanszék Utolsó frissítés: November 2, 2009 1 tar@dcs.vein.hu Tar

Részletesebben

10. gyakorlat Tömb, mint függvény argumentum

10. gyakorlat Tömb, mint függvény argumentum 10. gyakorlat Tömb, mint függvény argumentum 1. feladat: A 6. gyakorlat 1. feladatát oldja meg a strukturált programtervezési alapelv betartásával, azaz minden végrehajtandó funkciót külön függvényben

Részletesebben

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

Programozás II. 2. Dr. Iványi Péter Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c

Részletesebben

Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE

Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE 2015-16 1 const ódosító jelző int x = 1914; // I. világháború ++x; // HELYES, mert x változó Vedd észre, hogy bár: x *p ++x helyes és ++(*p) helytelen

Részletesebben

Informatika terméktervezőknek

Informatika terméktervezőknek Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások

Részletesebben

Programozási Nyelvek: C++

Programozási Nyelvek: C++ Programozási Nyelvek: C++ Gyakorló feladatkönyv Umann Kristóf #include "CppStudent.h" int main() { CppStudent *reader = new CppStudent(); reader->readbook(); while(!reader->doesunderstand()) { reader->exercise();

Részletesebben

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere 2012. április 10. A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Miről lesz ma szó? alaki szabályok használata - mintapélda használata - mintapélda

Részletesebben

Programozás alapjai 1. (BMEVIEEA100)

Programozás alapjai 1. (BMEVIEEA100) Programozás alapjai 1. (BMEVIEEA100) Gyakorlat anyaga az 6. oktatási héten (4-5. gyakorlat) A 7. oktatási hét péntekje előbbre csúszik a 6. hét szombatjára, ezért a 7. heti anyagot a szokottnál előbb kapjátok

Részletesebben

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

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3) Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Mit tudunk már? Típus fogalma char, int, float, double változók deklarációja operátorok (aritmetikai, relációs, logikai,

Részletesebben

A helyi információ és az id kezelése

A helyi információ és az id kezelése A helyi információ és az id kezelése Programozás II. Széchenyi István Egyetem, Gy r 2014. május 28. Helyi információ Helyi információ elemei ( helyi kategóriák): ország nyelv alkalmazott karakterkódolás

Részletesebben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

értékel függvény: rátermettségi függvény (tness function)

értékel függvény: rátermettségi függvény (tness function) Genetikus algoritmusok globális optimalizálás sok lehetséges megoldás közül keressük a legjobbat értékel függvény: rátermettségi függvény (tness function) populáció kiválasztjuk a legrátermettebb egyedeket

Részletesebben

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

Algoritmizálás + kódolás C++ nyelven és Pascalban Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban

Részletesebben

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. február 18. Minimum és maximumkeresés u s i n g n a m e s p a c e s t d ; i n t main ( ) { c o u t

Részletesebben

Apple Swift kurzus 3. gyakorlat

Apple Swift kurzus 3. gyakorlat Készítette: Jánki Zoltán Richárd Dátum: 2016.09.20. Apple Swift kurzus 3. gyakorlat Kollekciók: Tömb: - let array = [] - üres konstans tömb - var array = [] - üres változó tömb - var array = [String]()

Részletesebben

Információs Technológia

Információs Technológia Információs Technológia (Struktúra, mutatók, függvényhívás) Fodor Attila Pannon Egyetem Műszaki Informatika Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010 október 14/21. Struktúra

Részletesebben

Megoldott programozási feladatok standard C-ben

Megoldott programozási feladatok standard C-ben Megoldott programozási feladatok standard C-ben MÁRTON Gyöngyvér Sapientia Erdélyi Magyar Tudományegyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro Tartalomjegyzék

Részletesebben

Programozás C és C++ -ban

Programozás C és C++ -ban Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új

Részletesebben

Kivételek, kivételkezelés a C++ nyelvben

Kivételek, kivételkezelés a C++ nyelvben 2009. Kivételek, kivételkezelés a C++ nyelvben Haladó C++ programozás Kurucz Attila ELTE - IK 2009.06.09. Tartalomjegyzék Tartalomjegyzék... 2 Mi a kivételkezelés?... 3 Alapfogalmak... 3 Kivétel... 3 Try

Részletesebben

Alprogramok, paraméterátadás

Alprogramok, paraméterátadás ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi

Részletesebben

8. gyakorlat Pointerek, dinamikus memóriakezelés

8. gyakorlat Pointerek, dinamikus memóriakezelés 8. gyakorlat Pointerek, dinamikus memóriakezelés Házi ellenőrzés Egy számtani sorozat első két tagja A1 és A2. Számítsa ki a sorozat N- dik tagját! (f0051) Egy mértani sorozat első két tagja A1 és A2.

Részletesebben

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is A tétel (record) tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is A tétel elemei mezők. Például tétel: személy elemei: név, lakcím, születési

Részletesebben

Programozás alapjai 8.Gy: Program struktúra

Programozás alapjai 8.Gy: Program struktúra Programozás alapjai 8.Gy: Program struktúra Elvarázsolt matekóra P R O A L A G 32/1 B ITv: MAN 2018.11.02 Programozás történelem Kezdetben egy program egyetlen kódsorozat volt (ún. monolitikus program)

Részletesebben

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

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

5. Gyakorlat. struct diak {

5. Gyakorlat. struct diak { Rövid elméleti összefoglaló 5. Gyakorlat Felhasználó által definiált adattípusok: A typedef egy speciális tárolási osztály, mellyel érvényes típusokhoz szinonim nevet rendelhetünk. typedef létező_típus

Részletesebben

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT alapjai, bevezetés Vincze Dávid Miskolci Egyetem, IIT vincze.david@iit.uni-miskolc.hu PHP Personal Home Page (Tools) Script nyelv -> interpretált Elsősorban weboldal (dinamikus) tartalmak előállítására

Részletesebben

Országzászlók (2015. május 27., Sz14)

Országzászlók (2015. május 27., Sz14) Országzászlók (2015. május 27., Sz14) Írjon programot, amely a standard bemenetről állományvégjelig soronként egy-egy ország zászlójára vonatkozó adatokat olvas be! Az egyes zászlóknál azt tartjuk nyilván,

Részletesebben

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok Programozás alapjai gyakorlat 2. gyakorlat C alapok 2016-2017 Bordé Sándor 2 Forráskód, fordító, futtatható állomány Először megírjuk a programunk kódját (forráskód) Egyszerű szövegszerkesztőben vagy fejlesztőkörnyezettel

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok Adatszerkezetek és algoritmusok 1 Bevezetés Adatszerkezet egyszerű vagy összetett alapadatok rendszerének matematikai, logikai modellje elég jó ahhoz, hogy tükrözze a valós kapcsolatokat elég egyszerű

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 2. gyakorlat Függvények Általános prototípus Módosítószavak Láthatóság: public, protected, private. Ha nem definiált, akkor úgynevezett package-private láthatóság. Lehet abstract

Részletesebben