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

Hasonló dokumentumok
Programozás 6. Dr. Iványi Péter

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

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

Programozás I. gyakorlat

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

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

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.

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

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.

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

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

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

1. Alapok. Programozás II

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

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

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

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

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

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

5. gyakorlat. Konstansok Tömbök Stringek

/* 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 ) ;

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

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

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

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

Bevezetés a programozásba I.

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

C programozás. 1 óra Bevezetés

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

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

Programozási Nyelvek: C++

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

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

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

C programozási nyelv

Programozás C és C++ -ban

Vezérlési szerkezetek

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

Karakter- és sztringkezelő függvények, matematikai függvények

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

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

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

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

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

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.

Programozás alapjai 1. (BMEVIEEA100)

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

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

Példák tematikus csoportosításban

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

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

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

Információs Technológia

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

3 A C programozási nyelv szintaktikai egységei

9.fejezet: Függvények és külső eljárások

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. Függvények. Függvények(2)

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

Elemi alkalmazások fejlesztése I. Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

7. gyakorlat Sorozatok, Fájlkezelés

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

A programozás alapjai 1 Rekurzió

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

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

7. fejezet: Mutatók és tömbök

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Programozás C++ -ban 2007/1

Pénzügyi algoritmusok

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Bevezetés a programozásba. 8. Előadás: Függvények 2.

3. Osztályok II. Programozás II

int tokeletes(int szam) { int i,oszto=0; for(i=1; i<szam; i++) { if(szam %i == 0) { oszto+=i; }

5. Gyakorlat. struct diak {

Bevezetés a programozásba I.

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

A C# programozási nyelv alapjai

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

INFORMATIKA tétel 2018

Programozas 1. Strukturak, mutatok

Mintavételes szabályozás mikrovezérlő segítségével

Megoldott programozási feladatok standard C-ben

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

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

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Alprogramok, paraméterátadás

Java II. I A Java programozási nyelv alapelemei

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozás C++ -ban

Példatár a Programozás 1 tárgyhoz

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

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

Átírás:

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 tudnia kell a függvény típusát (paraméterek és visszatérési érték típusa). Pl.: double fgv(double, double); /* függvény deklarációja */ double (*fptr)(double, double); /* ilyen típusú függvényre mutató pointer deklarációja */ fptr = fgv; /* a függvény nevét adom kezdőértékül, a fordító persze ebből címet állít elő */ fptr(x, y); /* meghívom a függvényt a pointeren keresztül */ Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

#include <math.h> /* sinus négyzet - beépített függvénnyel */ double sin2(double x) double sinx = sin(x); return sinx*sinx; /* kettes alapú logaritmus - beépített függvénnyel */ double log2(double x) return log(x) / log(2); /* cosinus négyzet - beépített függvénnyel */ double cos2(double x) double cosx = cos(x); return cosx*cosx; typedef double (*fgvtip)(double); /* függvényre mutató pointer típusa */ /* melynek double a visszatérési értéke és double típust vár a paraméterlistában */ fgvtip tabla[] = /* ilyen pointerek tömbje */ sin2, /* a függvény neve értékül adható függvényre mutató pointernek */ log2, cos2 ; int main() int f, x; char* valasztek = " 1: sin2x \n 2: log2x \n 3: cos2x \n"; /* karakterekre mutató pointer, lényegileg egy string */ printf("melyik fuggveny legyen?:\n%s?:\t", valasztek); scanf("%d", &f); printf("argumentum erteke?:\t"); scanf("%d", &x); printf("a fuggveny erteke az adott pontban:\t%lf\n", tabla[f-1](x) ); /* a tömbben lévő pointeren keresztül hívom a függvényt */ /* 1-től 3-ig várt bemenetet a program. 0-tól való indexelés miatt levon 1-et [f-1] és paraméterként átadódik az úgyszint beolvasott érték (x) */

Feladat: Egy tömbbe olvassunk be, majd írassuk ki az elemeket úgy, hogy a tömb bejárását egy függvény végezze, ami megkapja a műveletet. #define N 10 typedef void (*muvelettipus)(int*); /* függvényre mutató pointer típusa */ /* melynek nincs visszatérési értéke (void) és int-re mutató pointert vár a paraméterlistában */ /* egy tömböt vár illetve a bejar függvény alatt található művelet függvények egyikét */ void bejar(int* tomb, muvelettipus muvelet) int i; for(i=0; i<n; i++) (*muvelet)(tomb+i); // ide kerül behelyettesítésre a paraméterként kapott művelet-függvény, mely saját bemeneti paraméterét is megkapja. // azért kerül 'tomb+i' a paraméterlistába, mert a 'tomb' alapjáraton a paraméterként kapott tömb kezdőpozíciójára mutat, // így a for ciklusban végig haladva, mindig i-t hazzáadva mindig a tömb rákövetkező elemét kapjuk void beolvas(int* v) scanf("%d", v); void kiir(int* v) printf("%d\n", *v); void duplaz(int* v) (*v) *= 2; int main() int t[n]; bejar(t, beolvas); bejar(t, kiir); bejar(t, duplaz); bejar(t, kiir);

Parancssori paraméterek A main függvénynek három paramétere lehet. Az első egy int, a parancssorban kapott argumentumok száma + 1 (a program neve maga is egy argumentum). A második egy olyan pointer-tömb, mely azokra a memóriaterületekre mutat, ahol sztringként vannak letárolva a parancssori argumentumok. A harmadik hasonló a másodikhoz, csak ez a környezeti változók címeit tartalmazza. Feladat: Írjuk ki a parancssorban lévő argumentumokat. main(int argc, char **argv) // vagy így is lehet az argv-t deklarálni: // main(int argc, char *argv[]) int i; printf("argc = %d\n\n",argc); for (i=0; i<argc; ++i) printf("argv[%d]: %s\n", i, argv[i]); Majd fordítsuk le, és futtassuk az alábbi módon: $ gcc -o arg arg.c $./arg alma korte szilva barack palinka argc = 6 argv[0]:./arg argv[1]: alma argv[2]: korte argv[3]: szilva argv[4]: barack argv[5]: palinka Feladat: Írj egy programot, mely összeadja a parancssori paramétereket.

#include <stdlib.h> int main(int argc, char* argv[]) int i; int arg = 0; printf("osszesen %d programargumentumot kaptam!\n",argc); for(i = 0; i< argc; i++) printf("%d : %s\n",i, argv[i]); if(argc > 1) for(i = 1; i< argc; i++) arg += atoi(argv[i]); printf("az argumentumok osszege : %d\n", arg); Feladat: Írj egy programot, amely n-szer egymás után fűzi ugyanazt az s sztringet, ahol n és s is parancssori paraméter.

#include <stdlib.h> #include <string.h> int main(int argc, char* argv[]) int i; char *er; if(argc < 3) printf("használat: %s <valami szám> <valami sztring>\n", argv[0]); return 1; er = (char*) calloc ( atoi(argv[1]) + 1, strlen(argv[2]) ); strcpy(er,argv[2]); for(i=0;i<atoi(argv[1])-1;i++) strcat(er,argv[2]); printf("%s\n",er); free(er); Makrók A #define direktívákat arra használjuk, hogy "beszédes" azonosítókkal lássunk el C konstansokat, kulcsszavakat, illetve gyakran használt utasításokat és kifejezéseket. A makrónevekre ugyanaz a képzési szabály vonatkozik, mint más azonosítókra. A makróneveket csupa nagy betűvel ajánlott írni, hogy a szövegben elkülönüljenek a programban használt azonosítóktól. Az alábbi program meghatározza két szám közül, hogy melyik a kisebb. #include <math.h> #define min(x,y) ((X)<(Y)?(X):(Y)) // makró - paraméterben kaphat két számot. A visszatérési értéke az utóbbi zárojelben lévő kiértékelés eredménye int main() printf("min(e^3, 3^2):\t%f\n", min( exp(3), pow(3, 2) ) ); - a paraméterben kapott szám a hatványkitevője e-nek a paramáterben kapott első számnak a hatványa. a paraméterben kapott második szám a hatványkitevő // exp - math.h-ból jön // pow - math.h-ból jön - // -

Az előfeldolgozó (preprocesszor) minden programsort átvizsgál, hogy az tartalmaz-e valamilyen korábban definiált makrónevet. Ha igen, akkor azt lecseréli a megfelelő helyettesítő szövegre, majd halad tovább a vizsgálattal. A preprocesszálás eredménye megtekinthető (mindig a frissen létrejövő *.i fájl végén található a saját kódunk - ez a mi esetünkben az utolsó 4 sor): gcc -E makrofgv.c tail -4>makrofgv.i Használat függvényen belül: #include <math.h> int main() printf("min(e^3, 3^2):\t%f\n", ((exp(3))<(pow(3, 2))?(exp(3)):(pow(3, 2))) ); A zárójelek fontosságára az alábbi példa mutat rá: #define MAX(a,b) (((a) > (b) )? (a) : (b)) #define MIN(a,b) (((a) > (b) )? (b) : (a)) #define MIN3(a,b,c) (((a) < (b))? MIN(a,c) : MIN(b,c)) /* * MINDENT zárójelezni kell, ugyanis ha így írnánk: * #define MAX(a,b) a > b? a : b * * akkor MIN( a-3, a?1:3 ) esetén az eredmény: * a-3 > a?1:3? a-3 : a?1:3, ami nem az, amit szeretnénk! * */ int main() int a,b,c; a = -23; b = 44; c = 0; printf("max(%d,%d)=%d\n",a,b,max(a,b)); printf("min(%d,%d)=%d\n",b,c,min(b,c)); printf("min3(%d,%d,%d)=%d\n",a,b,c,min3(a,b,c)); Írjuk meg a negyzet(a) makrót!

#define negyzet(a) (a*a) int main() int a = 5; printf("negyzet(%d) = %d",a,negyzet(a));