Mutatók. Programozás I. Hatwágner F. Miklós február 26. Széchenyi István Egyetem, Gy r

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

Download "Mutatók. Programozás I. Hatwágner F. Miklós február 26. Széchenyi István Egyetem, Gy r"

Átírás

1 Mutatók Programozás I. Széchenyi István Egyetem, Gy r február 26.

2 Mutatók (pointer) Áttekintés Memóriacím tárolására szolgáló adattípus Címezhet függvényt (kódot) és adatot (objektumot) is Mutató típusa megcímzett objektum típusa Technikailag: unsigned int, különféle korlátozásokkal Mutatódeklarációk Mint más típusoknál: azonosító + (mutatott obj.) típus meghatározása Általánosan: típus* azonosító; (fehér karakterek használata tetsz leges a * körül) Speciális eset: void* meghatározatlan típusra mutat (bármilyen cím hozzárendelhet explicit típuskényszerítés nélkül, és fordítva)

3 Mutatódeklarációk Példa int* pi; /* egészet címz mutató */ /* hozzáf zi src-t a dest végéhez, és annak címével tér vissza (string.h) Visszatérési érték: char*, karaktert címz mutató Paraméterek: karaktert címz mutatók, utóbbinál a mutatott érték konstans, azaz az src értékét nem tudja módosítani */ char *strcat(char *dest, const char *src); Statikus élettartam: tiszta zérus kezd érték, lokális: memóriaszemét stdio.h NULL Ezen a címen semmit nem helyeznek el különleges esetek, pl. hibák jelzésére Ugyanúgy használható cím, mint a többi (összehasonlítás, hozzárendelés,... )

4 Cím operátor (&) Példa Általános alak: &el tag-kifejezés, ahol az el tag-kifejezés lehet függvény nem register tárolási osztályú objektumot elér balérték de nem lehet bitmez (ld. struktúrák), ált. kifejezés, konstans tipikusan: egyszer változók, tömbelemek cím tárolása: hozzárendeléssel, inicializációval int i, *pi=&i; int j=3, *pj=&j; /* int* k, l=k; warning: initialization makes integer from pointer without a cast */ char c='a'; char* pc; /* pc = &'A'; error: lvalue required as unary `&' operand */ pc = &c; pi = pj; /* pc = pi; warning: assignment from incompatible pointer type */ pc = (char*)pi; /* függvény és adatmutatók között nincs konv.! */

5 Indirekció operátor (*) Feladata: adott címen lév érték elérése Általános alak: *el tag-kifejezés Eredménye balérték Nem használható, ha el tag-kifejezés nem értékelhet ki címmé void* típusú (címzett objektum mérete ismeretlen) Meghatározatlan az eredménye, ha a mutató NULL épp nem látható lokális objektum címe program által nem használható címet tartalmaz

6 Indirekció operátor (*) Forrás #include<stdio.h> #include<math.h> int main(void) { double d=0.; double* pd=&d; void* pv=pd; printf("'d' értéke: %f, címe: %p, 'pv' értéke: %p\n" "'pd' értéke: %p\n", d, (void*)&d, pv, (void*)pd); d = *(double*)pv + M_PI_2; printf("'d' szinusza: %f\n", sin(d)); *pd += M_PI; printf("'*pd' szinusza: %f\n", sin(*pd)); return 0; } Kimenet 'd' értéke: , címe: 0xbfce7f90, 'pv' értéke: 0xbfce7f90 'pd' értéke: 0xbfce7f90 'd' szinusza: '*pd' szinusza:

7 Mutatók inicializálása Statikus mutató nem inicializálható automatikus objektum címével, mert annak címe minden végrehajtáskor más és más lehet. Példa #include<stdio.h> int gi; int main(void) { int li; int* pli=&li; int* pgi=&gi; /* static int* spli=&li; error: initializer element is not constant */ static int* spgi=&gi; return 0; }

8 Konstans mutatók Mutató deklarálás ált. alakja: <deklaráció-specikátorok> típus * <típusmódosító-lista> deklarátor ahol a <típusmódosító-lista> tartalmazhatja: const volatile Ne keverjük össze a konstanst címz nem konstans mutatót a nem konstanst címz konstans mutatóval! Konstans objektumot címz konstans mutató is létrehozható Konstans objektumot csak olyan mutató címezhet, melynek cél típusa is konstans min sít nem hatástalanítható

9 Konstans mutatók Példa #include<stdio.h> int main(void) { int i; int* pi=&i; int* const cpi=&i; const int ci = 1; /* int* pci=&ci; warning: initialization discards `const' qualifier from pointer target type */ const int* pci=&ci; const int* const cpci=&ci; i=12; *pi<<=3; pi=0; *cpi = 5; /* cpi=null; error: assignment of read-only variable `cpi' */ /* ci = 6; error: assignment of read-only variable `ci' */ /* *pci = 7; error: assignment of read-only location `*pci' */ pci = NULL; printf("'ci' értéke: %d\n", *cpci); /* 'ci' értéke: 1 */ return 0; }

10 Mutatók és függvényparaméterek A paraméterátadás alapvet en érték szerint történik, vermen keresztül. #include<stdio.h> void fv(int j) { printf("'j' címe: %p, értéke: %d\n", (void*)&j, j); } void fvp(int* pi) { printf("'pi' címe: %p, értéke: %p, " "mutatott érték: %d\n", (void*)&pi, (void*)pi, *pi); } int main(void) { int i=5; printf("'i' címe: %p, értéke: %d\n", (void*)&i, i); fv(i); fvp(&i); return 0; } Kimenet 'i' címe: 0xbfe0fc2c, értéke: 5 'j' címe: 0xbfe0fc10, értéke: 5 'pi' címe: 0xbfe0fc10, értéke: 0xbfe0fc2c, mutatott érték: 5

11 Mutatók és függvényparaméterek Adatok felcserélése, 1. rész #include<stdio.h> void csere1(int i, int j) { int cs; printf("(i==%d, j==%d)\n", i, j); cs = i; i = j; j = cs; printf("(i==%d, j==%d)\n", i, j); } void csere2(int* i, int* j) { int cs; printf("(*i==%d, *j==%d)\n", *i, *j); cs = *i; *i = *j; *j = cs; printf("(*i==%d, *j==%d)\n", *i, *j); }

12 Mutatók és függvényparaméterek Adatok felcserélése, 2. rész int main(void) { int a=2, b=5; printf("'a' értéke: %d, 'b' értéke: %d\n", a, b); csere1(a, b); printf("'a' értéke: %d, 'b' értéke: %d\n", a, b); csere2(&a, &b); printf("'a' értéke: %d, 'b' értéke: %d\n", a, b); return 0; } Kimenet 'a' értéke: 2, 'b' értéke: 5 (i==2, j==5) (i==5, j==2) 'a' értéke: 2, 'b' értéke: 5 (*i==2, *j==5) (*i==5, *j==2) 'a' értéke: 5, 'b' értéke: 2

13 Mutatók és tömbök Ha (rész)kifejezés típus tömbje, akkor a (rész)kifejezés értékét a fordító a tömb els elemét címz konstans mutatóvá (típus * const) alakítja Kivételek: (rész)kifejezés cím operátor (&), ++,,. (struktúratag-kiválasztás), sizeof operandusa, hozzár. bal oldalán áll Tömbök címe, elemeik, azok címzése... #include<stdio.h> #define MERET 5 int main(void) { int ai[meret] = {1, 2, 3, 4, 5}; char ac[meret] = "Gyor"; int i; char* pc; for(i=0; i<meret; i++) { printf("ai[%d] értéke: %d, címe: %p\n", i, ai[i], (void*)&ai[i]); } for(pc=ac; pc-ac<meret; pc++) { printf("ac[%d] értéke: '%c', kódja: %d, címe: %p\n", pc-ac, *pc, *pc, pc); } return 0; }

14 Mutatók és tömbök Kimenet ai[0] értéke: 1, címe: 0xbfaf9ab8 ai[1] értéke: 2, címe: 0xbfaf9abc ai[2] értéke: 3, címe: 0xbfaf9ac0 ai[3] értéke: 4, címe: 0xbfaf9ac4 ai[4] értéke: 5, címe: 0xbfaf9ac8 ac[0] értéke: 'G', kódja: 71, címe: 0xbfaf9ad7 ac[1] értéke: 'y', kódja: 121, címe: 0xbfaf9ad8 ac[2] értéke: 'o', kódja: 111, címe: 0xbfaf9ad9 ac[3] értéke: 'r', kódja: 114, címe: 0xbfaf9ada ac[4] értéke: '', kódja: 0, címe: 0xbfaf9adb

15 Tömbök indexelése ([]) Tömbindexelés általános alakja: utótag-kifejezés[kifejezés] utótag-kifejezés és kifejezés közül az egyiknek mutatónak, a másiknak egésznek kell lennie Fordító átalakítja: *((utótag-kifejezés) + (kifejezés)) (konverziók) tömbelemcíme = tömbkezd címe + index*sizeof(tömbelemeinektípusa)

16 Tömbök indexelése ([]) Indexelés #include<stdio.h> int main(void) { char ac[] = {1, 2, 3, 4, 5}; char* pac = ac; /* pac = &ac; warning: assignment from incompatible pointer type */ /* ac = pac; error: incompatible types when assigning to type `char[5]' from type `char *' */ /* ac++; error: lvalue required as increment operand */ pac++; printf("%d\n", *pac); printf("ac[2] == %d\n", ac[2]); printf("ac[2] == %d\n", 2[ac]); printf("ac[2] == %d\n", *(ac+2)); printf("ac[0] címe: %p, ac[2] címe: %p\n", ac, ac+2); return 0; } Kimenet 2 ac[2] == 3 ac[2] == 3 ac[2] == 3 ac[0] címe: 0xbfe60ce7, ac[2] címe: 0xbfe60ce9

17 Néhány korábbi példa mutatókat használó változatai Példa #include<stdio.h> int hossz(const char* s) { const char* save = s; while(*s) s++; return s-save; } void fordit(char* s) { char* t = s+hossz(s)-1; while(s < t) { char cs = *s; *s++ = *t; *t-- = cs; } } int main(void) { char szo[] = "Irgumburgum"; printf("%s hossza: %d\n", szo, hossz(szo)); fordit(szo); printf("megfordítva: %s\n", szo); return 0; } Kimenet Irgumburgum hossza: 11 Megfordítva: mugrubmugri

18 Tömbök deklarálása Általános alak: típus deklarátor[<konstans-kifejezés>]<={inicializátorlista}> konstans-kifejezés: nemnegatív egész típusú konstans (vagy expliciten azzá alakított, ill. karakteres, felsorolás és sizeof) Méretet nem adják meg? Inicializátorlista elemeinek megszámolása, ha van. Inicializátorlista elemszáma nem egyezik a tömb elemszámával? Se elemszám, se inicializátorlista? (nem teljes típusú tömb) kés bbi deklarációban adják meg az elemszámot vagy az inicializátorlistát vagy mindkett t vagy másik forrásmodulban történik a deníció (extern) Függvény honnan tudhatja a paraméter tömb elemszámát? azt is átadjuk neki ismert, a tömb elemeire vonatkozó szabály alapján meghatározható (pl. lánczáró nulla)

19 Egészek tömbbe olvasása és visszaírása pelda24.c, 1. rész #include <stdio.h> #define SIZE 50 int getint(int *); void main(void) { int i, n, array[size]; printf("egészek tömbbe olvasása és visszaírása " "címeikkel együtt\nlegfeljebb %d egész van " "vagy végül EOF-ot megadva kevesebb!\nadja " "meg az egész számokat!\n\n", SIZE); for(n=0; n<size&&getint(&array[n])!=eof; n++); printf("\n\na tömbelemek címei rendre:\n\n"); for(i=0; i<n; i++) printf("%16p", &array[i]); printf("\n\na tömbelemek értékei rendre:\n\n"); for(i=0; i<n; i++) printf("%16d", array[i]); }

20 Egészek tömbbe olvasása és visszaírása pelda24.c, 2. rész int getch(void); int ungetch(int); /* A következ egész beolvasása a bemenetr l */ int getint(int *pn) { int c, sign=1; /* Az elöl lev üres karakterek átlépése */ while((c=getch())==' ' c=='\n' c=='\t'); /* Az el jel feljegyzése */ if(c=='+' c=='-') { sign=(c=='+')?1:-1; c=getch(); } /* A szám behozatala és konverziója */ for(*pn=0; c>='0' && c<='9'; c=getch()) *pn=10**pn+c-'0'; *pn*=sign; if(c!=eof) ungetch(c); return(c); }

21 Egészek tömbbe olvasása és visszaírása pelda24.c, 3. rész #define BUFSIZE 100 char buf[bufsize]; int bufp=0; int getch(void) { return((bufp>0)?buf[--bufp]:getchar()); } int ungetch(int c) { if(bufp>=bufsize){ printf("\n\t\tungetch: Túl sok karakter!\n"); return EOF; } else return buf[bufp++]=c; }

22 Egészek tömbbe olvasása és visszaírása Kimenet Egészek tömbbe olvasása és visszaírása címeikkel együtt Legfeljebb 50 egész van vagy végül EOF-ot megadva kevesebb! Adja meg az egész számokat! A tömbelemek címei rendre: 0xbfb xbfb xbfb xbfb3869c A tömbelemek értékei rendre:

23 Mutatóaritmetika (címaritmetika) Mutatók értékével végzett aritmetikai m veletek növelés/csökkentés, összeadás/kivonás, relációk Feltevés: ugyanannak az obj.-nak a részeit címzik a mutatók Figyelembe veszik a mutatott típus méretét Növelés/csökkentés és összeadás/kivonás tulajdonságai Cím változása: sizeof(típus) többszörösével típus tömbje esetén csak [0; elemszám] index elemek címezhet ek void* mutatóval nem végezhet Eredmény típusa: mutató Összeadás operandusainak típusai: mutató és egész Kivonásnál a kisebbítend : mutató, kivonandó: egész egyazon obj. másik részét címz mutató indexkülönbség ptrdiff_t típusban (ld. stdio.h, ált. signed int) Növelés/csökkentés: tömbök következ /el z elemének címét adja

24 Mutatóaritmetika (címaritmetika) Relációk Egyazon obj. részeit címz mutatók (címek) összehasonlítása Egyenl ségi relációknál: mutató hasonlítható a NULL értékhez is 0 érték egész kifejezéshez void* mutató más típusú mutatóhoz Feltételes kifejezés ha az operandusok mutatók, melyek közül legalább az egyik void*, az eredmény is az lesz mutató és 0 érték konstans kif. esetén az eredmény a mutató típusa az eredmény megörökli az operandusok módosítóit (const, volatile)

25 Mutatóaritmetika (címaritmetika) pelda24.c módosítása #define BUFSIZE 100 char buf[bufsize]; char* bufp=buf; int getch(void) { return((bufp>buf)?*--bufp:getchar()); } int ungetch(int c){ if(bufp>=buf+bufsize) { printf("\n\t\tungetch: Túl sok karakter!\n"); return EOF; } else return *bufp++=c; }

26 Mutatók átalakítása Explicit típuskonverzió: (típus*) A 0 érték konstans egész kif., és a NULL érték void* mutató bármilyen más típusú mutatóvá konvertálható Többi típus: potenciális tárillesztési, bájt határra igazítási problémák (pl. char* 1x, short* 2x, int* 4x) void* bármib l és bármivé alakítható mutató konvertálható elég nagy egésszé, pl. ha kisebb az egésznél, nagyobb egésszé alakítja majd unsigned-ként tekint rá lebeg pontos típusra nem lehet átalakítani egész mutató, pl. mutató méret egésszé alakítás, ha szükséges majd ismét unsigned-ként tekint rá

27 Karakterláncok kezelése Karakterlánc konstans konstans karaktertömb konstans karaktert címz mutató Karakterlánc konstansok #include<stdio.h> int main(void) { const char s1[] = "Karakterlánc konstans.\n"; const char* s2 = "Karakterlánc konstans.\n"; const char* s3 = s1; /* Mi a címe ennek a karakterláncnak? */ printf("karakterlánc konstans.\n"); printf(s1); printf(s2); printf(s3); return 0; }

28 Karakterláncok kezelése Karakterlánc kezel függvények string.h str...() paraméter és vt. érték típusa: char* mem...() paraméter és vt. érték típusa: void*, nem várnak el '\0'-t Az eredmény címét adják vissza Egymást átfed memóriaterületek deniálatlan viselkedés, kivéve memmove()

29 Karakterláncok összef zése char *strcat(char *dest, const char *src); char *strncat(char *dest, const char *src, size_t n); Hozzáf zi src-t dest végéhez, lezáró '\0'-t megfelel en elhelyezi size_t ált. unsigned int, strncat() legfeljebb n karaktert f z hozzá dest-hez Elegend helynek (azaz strlen(dest)+strlen(src)+1, ill. strlen(dest)+n+1) kell lennie dest-t l kezd d en! Egy lehetséges strncat() megvalósítás char *strncat(char *dest, const char *src, size_t n) { char *save = dest; /* Pozícionálás dest lezáró '\0' karakterére: */ while(*dest) ++dest; /* src dest végére másolása a záró '\0'-ig, vagy legfeljebb n karakterig: */ while(n-- && (*dest++ = *src++)); /* Vissza az egyesített karakterlánc kezd címe: */ return save; }

30 Karakterek keresése char *strchr(const char *s, int c); c-nek s-en belüli els elfordulásának címével tér vissza, vagy NULL-lal, ha nem találja Akkor is m ködik, ha c=='\0' void *memchr(const void *s, int c, size_t n); Mint strchr(), de csak az els n bájtban keres char *strrchr(const char *s, int c); void *memrchr(const void *s, int c, size_t n); Mint strchr() és memchr(), de az utolsó elfordulás címét adják vissza

31 Karakterek keresése Egy lehetséges strchr() megvalósítás #include<stdio.h> const char *strchr(const char *s, int c) { while(*s!=c && *s) s++; if(*s) return s; else return NULL; } int main(void) { char* str = "ABC"; char c = 'B'; printf("\"%s\" címe: %p, '%c' címe: %p\n", str, str, c, strchr(str, c)); c = 'X'; printf("'%c' el fordul benne? %s\n", c, strchr(str, c)?"igen":"nem"); return 0; } Kimenet "ABC" címe: 0x80485a0, 'B' címe: 0x80485a1 'X' el fordul benne? Nem

32 Karakterek keresése Megállapítjuk, hogy egy szöveg mely karakterei magánhangzók, mássalhangzók és egyéb karakterek #include<stdio.h> #include<ctype.h> #include<string.h> int main(void) { char* szoveg = "Commodore 64 Basic V2"; char* magan = "euioa"; printf("magánhangzók (G), mássalhangzók (S) és egyéb " "jelek (-) keresése\n%s\n", szoveg); for(; *szoveg; szoveg++) { if(isalpha(*szoveg)) { /* Bináris <--> soros keresés? */ if(strchr(magan, tolower(*szoveg))) putchar('g'); else putchar('s'); } else putchar('-'); } putchar('\n'); return 0; } Kimenet Magánhangzók (G), mássalhangzók (S) és egyéb jelek (-) keresése Commodore 64 Basic V2 SGSSGSGSG----SGSGS-S-

33 Karakterláncok összehasonlítása int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t n); int memcmp(const void *s1, const void *s2, size_t n); Összehasonlítják az unsigned char-ként értelmezett s1 és s2 paramétereket. Vt. érték negatív, ha s1 < s2, pozitív, ha s1 > s2, különben nulla. strncmp() és memcmp() legfeljebb az els n karakterig/bájtig végzik az összehasonlítást strcmp() egy lehetséges megvalósítása int strcmp(const char *s1, const char *s2 ) { for(; *s1 == *s2; ++s1, ++s2) if(!(*s1)) return 0; /* s1 == s2 */ return(*s1 - *s2); } /* s1 < s2 vagy s1 > s2 */

34 Karakterláncok másolása char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); void *memcpy(void *dest, const void *src, size_t n); void *memmove(void *dest, const void *src, size_t n); Karakterek/bájtok másolása src helyr l dest-re Az eredmény (dest) címével térnek vissza strncpy() legfeljebb n karaktert másol, és ha src rövidebb n-nél, akkor a lánczáró nullát is kiteszi, de különben nem. memcpy() és memmove() pontosan n bájtot másolnak át Nem ellen rzik, hogy el fog-e férni az eredmény a dest helyen Egymást átfed memóriaterületekkel csak a memmove() birkózik meg Hibát jelz visszatérési érték egyiknél sincs

35 Másolás, keresés, hossz strcpy() egy lehetséges megvalósítása char *strcpy(char *dest, const char *src) { char *save = dest; /* src dest-be másolása lezáró '\0' karakterével: */ while(*dest++ = *src++); /* Vissza a másolat karakterlánc kezd címe: */ return save; } char *strstr(const char *haystack, const char *needle); needle els el fordulásának címét adja meg haystack-en belül, vagy NULL értéket, ha nem található. Ha needle üres karakterlánc, akkor haystack-kel tér vissza. A keresésbe természetesen nem értend k bele a lánczáró karakterek. size_t strlen(const char *s); s hosszát adja (lánczáró nulla nélkül)

36 Keresés és csere (helyben) Feltesszük, hogy az eredmény el fog férni miben helyen! void kercsere(char* miben, const char* mit, const char* mire) { char* hely = miben; char* vege = miben + strlen(miben); int mithossz = strlen(mit); int mirehossz = strlen(mire); int eltolas = mirehossz - mithossz; while((hely=strstr(hely, mit))) { memmove(hely+mirehossz, hely+mithossz, vege-hely-mithossz+1); memcpy(hely, mire, mirehossz); vege+=eltolas; hely+=mirehossz; } }

37 Karakterhalmaz bármely elemének keresése char *strpbrk(const char *s, const char *accept); Az accept bármely karakterének els el fordulását keresi s-ben, és annak címével tér vissza, vagy NULL-lal, ha nincsenek közös karakterek. (Lánczáró nullákkal nem foglalkozik.) Szöveg mondatokra tördelése (minden szempontból helyes szöveget feltételezve). Elrontja a szöveget! #include<stdio.h> #include<string.h> int main(void) { char szoveg[] = "Szép volt. Jó volt. Köszönöm, ennyi."; char* eleje = szoveg; char* vege; while(vege=strpbrk(eleje, ".!?")) { if(!*++vege) break; *vege = '\0'; printf("%s\n", eleje); eleje = ++vege; } printf("%s\n", eleje); return 0; }

38 Memóriaterület feltöltése void *memset(void *s, int c, size_t n); s címt l kezdve n bájtot feltölt c értékével, majd visszaadja s-et Szöveg jobbra igazítása helyben #include<stdio.h> #include<string.h> char* jobbra(char* s, int szelesseg) { int hossz = strlen(s); int tol = szelesseg-hossz; if(tol>0) { *(s+szelesseg) = '\0'; memmove(s+tol, s, hossz); memset(s, ' ', tol); } return s; } #define SZ 20 int main(void) { int i; char szoveg[128] = "Kis patak"; /* printf(" %*s \n", SZ, szoveg); */ printf(" %s \n ", jobbra(szoveg, SZ)); for(i=0; i<sz; i++) putchar(i%10+'0'); printf(" \n"); return 0; }

39 Adott halmazba es karaktereket (nem) tartalmazó rész-karakterlánc hosszának megállapítása size_t strspn(const char *s, const char *accept); Meghatározza s azon kezd szegmensének hosszát, amely csak accept-beli karaktereket tartalmaz size_t strcspn(const char *s, const char *reject); Meghatározza s azon kezd szegmensének hosszát, amely csak reject-ben nem szerepl karaktereket tartalmaz Robot irányítása: csak a négy iránynak megfelel (J - jobbra, B - balra, F - fel, L - le) karaktereket engedjük meg a vezérl karakterláncban #include<stdio.h> #include<string.h> int main(void) { char irany[] = "JJJJFJFJFFJJFJJJLJLJLLJLLLJLLLBBB"; printf("%s ellen rzése: %s\n", irany, *(irany+strspn(irany, "JBFL"))?"hibás":"rendben"); return 0; }

40 Karakterlánc tokenekre bontása char *strtok(char *str, const char *delim); Egymást követ hívásokra a karakterláncban lév szimbólumok címeit adja vissza. Az els hívás alkalmával str a vizsgált karakterlánc kezdetét határozza meg, de minden további hívás alkalmával NULL érték adandó át. delim az (akár hívásonként eltér ) elválasztó karaktereket adja meg. Ha nem talál több szimbólumot, NULL értékkel tér vissza. Módosítja str tartalmát, '\0'-kat szúr be a szimbólumok mögé. A visszaadott területen egyetlen elválasztó karakter sem található.

41 Karakterlánc tokenekre bontása Lekérdez karakterlánc elemzése #include<stdio.h> #include<string.h> #define SEP "&" int main(void) { char url[] = " char* pk = strchr(url, '?'); char* pv; if(pk && (pk=strtok(pk+1, SEP))) { do { pv = strchr(pk, '='); if(pv) *pv = '\0'; else continue; printf("kulcs: %s, érték: %s\n", pk, pv+1); } while(pk=strtok(null, SEP)); } else { printf("az URL nem tartalmaz lekérdez karakterláncot.\n"); } return 0; }

42 Változó paraméterlista Legalább egy rögzített formális paraméter, majd... ezeket úgy kezeli a fordító, mintha nem adtak volna meg prototípust stdarg.h va_list típust (mutatót) és a következ függvényszer makrókat tartalmazza: void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); Használat: 1 va_list típusú, pl. ap nev változó deklarálása. 2 va_start hívása ap-vel és az utolsó rögzített formális paraméter nevével (nem lehet register tárolási osztályú). Ez inicializálja ap-t. 3 Paraméterek értékének kinyerése annyi va_arg(ap, type); hívással, amennyi paramétert fogad a függvény. Ennek számát és a típusokat (type) a rögzített paraméter(ek)b l lehet tudni. ap-t automatikusan lépteti type-nak megfelel en. 4 Végül va_end(ap); hívása (ap-t is NULL-ra állítja).

43 Változó paraméterlista Paraméterek értékének összeadása és megjelenítése. Az utolsó aktuális paraméternek 0 érték nek kell lennie! #include <stdio.h> #include <stdarg.h> void sum(char *uzen,...) { int osszeg = 0, tag; va_list param; va_start(param, uzen); while(tag = va_arg(param, int)) osszeg += tag; va_end(param); printf(uzen, osszeg); } void main(void) { sum(" = %d\n", 1, 2, 3, 4, 0); }

44 Változó paraméterlista Formátumsztring feldolgozása (Forrás: man 3 stdarg) #include <stdio.h> #include <stdarg.h> void foo(char *fmt,...) { va_list ap; int d; char c, *s; va_start(ap, fmt); while(*fmt) switch(*fmt++) { case 's': /* string */ s = va_arg(ap, char*); printf("string %s\n", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("int %d\n", d); break; case 'c': /* char */ /*need a cast here since va_arg only takes fully promoted types*/ c = (char)va_arg(ap, int); printf("char %c\n", c); break; } va_end(ap); }

45 Néhány printf()-hez hasonló függvény int vprintf(const char *format, va_list ap); Hasonlóan m ködik printf()-hez, de a hívó függvény változó paraméterlistáját dolgozza fel, önállóan lépteti ap értékét va_arg hívásokkal. Egyszer példa vprintf() használatára #include<stdio.h> #include<stdarg.h> int nyomtat(const char* fmt,...) { int n; va_list ap; va_start(ap, fmt); n = vprintf(fmt, ap); va_end(ap); return n; } int main(void) { nyomtat("%s és a %d törpe\n", "Hófehérke", 7); return 0; }

46 Néhány printf()-hez hasonló függvény int fprintf(file *stream, const char *format,...); Mint printf(), de a szabványos kimenet helyett a stream folyamba ír. int vfprintf(file *stream, const char *format, va_list ap); Mint fprintf(), de maga dolgozza fel a hívó változó paraméterlistáját. Példa a szabványos kimenet és hibacsatorna használatára (kimenet.c) #include<stdio.h> int main(void) { printf("szabvány kimenetre.\n"); fprintf(stdout, "Szabvány kimenetre.\n"); fprintf(stderr, "Szabvány hibacsatornára.\n"); return 0; }

47 Néhány printf()-hez hasonló függvény kimenet-et elindítva: Szabvány kimenetre. Szabvány kimenetre. Szabvány hibacsatornára. Újabb indítás: kimenet >stdout.txt 2>stderr.txt A konzolon semmi nem jelenik meg! stdout.txt Szabvány kimenetre. Szabvány kimenetre. stderr.txt Szabvány hibacsatornára.

48 Néhány printf()-hez hasonló függvény int sprintf(char *str, const char *format,...); Mint printf(), de a szabvány kimenet helyett str címen helyezi el az eredményt. Az eredménynek el kell férnie ezen a helyen! int vsprintf(char *str, const char *format, va_list ap); Mint sprintf(), de maga dolgozza fel a hívó változó paraméterlistáját. A szabványos függvénykönyvtár nem tartalmaz pl. itoa() függvényt! #include<stdio.h> int main(void) { char s[128]; sprintf(s, "%d", 12345); printf("%s\n", s); return 0; }

49 Mutatótömbök Mutatókból álló tömbök típus* azonosító[<konstans-kifejezés>]<=inicializátorlista>; tehát az azonosító egy típus** típusú konstans mutató 'H' 'i' 'b' 'á' 's' ' ' 'é' 'r' 't' 'é' 'k' '\0' 'V' 'a' 's' 'á' 'r' 'n' 'a' 'p' '\0'

50 Mutatótömbök *napok napok[0] **napok *napok[0] 'H' Hét napjai #include<stdio.h> static char* napok[] = {"Hibás érték", "Hétf ", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"}; char* napnev(int i) { if(i<1 i>7) return *napok; return *(napok+i); } int main(void) { int i; for(i=1; i<9; i++) printf("%s\n", napnev(i)); return 0; }

51 Többdimenziós tömbök Tömbök tömbje, pl. mátrix: vektorokat tartalmazó vektor típus azonosító[<méret1>][méret2]...[méretn]<=inicializátorlista>; Elemek elérése: azonosító[index1][index2]...[indexn], ahol 0 <= index1 < méret1, 0 <= index2 < méret2,..., 0 <= indexn < méretn Elhelyezkedés a tárban: pl. int mtx[2][3]; esetén &mtx[0][0] < &mtx[0][1] < &mtx[0][2] < &mtx[1][0] <... < &mtx[1][2] matrix[1][2] m m m matrix[0] matrix[1] matrix[n]

52 Többdimenziós tömbök mtx[i][j] *(mtx[i]+j) *(*(mtx+i)+j) Inicializálás: int mtx[4][3] = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 }, { 4, 4, 4 } }; int mtx[4][3] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 }; int mtx[4][3] = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } }; /* mtx[3][0] == mtx[3][1] == mtx[3][2] == 0 */ int mtx[4][3] = { { 1 }, { 2 }, { 3 } } /* mtx[0][0] == 1, mtx[1][0] == 2, mtx[2][0] == 3 */ Az elemszámot csak az els dimenziónál tudja megállapítani! int mtx1[][] = { { 1, 1 }, { 2, 2 }, { 3, 3 } }; /* Hiba */ int mtx1[][2] = { { 1, 1 }, { 2, 2 }, { 3, 3 } }; /* OK */

53 Mátrixszorzás Mátrixszorzás: az A[a i,j ] m n és B[b i,j ] n p mátrixok szorzatán azt a C[c i,j ] m p mátrixot értjük, amelyre c i,j = a i,1 b1,j + a i,2 b2,j + + a i,n b n,j = n k=1 a i,k b k,j pelda25.c #include <stdio.h> int main(void) { int a[3][4] = { { 5, 3, -21, 42}, {44, 15, 0, 6}, {97, 6, 81, 2} }; int b[4][2] = { {22, 7}, {97, -53}, {45, 0}, {72, 1} }; int c[3][2], i, j, k; printf("mátrixok szorzása:\n\n"); for(i=0; i<3; i++) { for(j=0;j<2;j++) { c[i][j]=0; for(k=0; k<4; k++) c[i][j] += a[i][k]*b[k][j]; } } for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("c[%d][%d] = %5d ", i, j, c[i][j]); printf("\n"); } return 0; }

54 Dátumból év napjának meghatározása és fordítva pelda26.c, 1. rész #include <stdio.h> int day_of_year(int ev, int ho, int nap); void month_day(int ev, int nap, int* pho, int* pnap); void main(void) { int ev=1992, ho=4, nap=30, evnap; evnap = day_of_year(ev, ho, nap); printf("\n%4d.%02d.%02d dátum az év %3d. napja\n", ev, ho, nap, evnap); evnap = 300; month_day(ev, evnap, &ho, &nap); printf("\n%4d év %3d. napja = %02d.%02d\n", ev, evnap, ho, nap); } static int day_tab[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}};

55 Dátumból év napjának meghatározása és fordítva pelda26.c, 2. rész /* Éven belüli napsorszám meghatározása a dátumból */ int day_of_year(int year, int month, int day) { int i, leap; leap = year%4==0 && year%100!=0 year%400==0; for(i=1; i<month; i++) day += day_tab[leap][i]; return(day); } /* Hónap, nap meghatározása az éven belüli napsorszámból */ void month_day(int year, int yearday, int* pmonth, int* pday) { int i, leap; leap = year%4==0 && year%100!=0 year%400==0; for(i=1; yearday>day_tab[leap][i]; i++) yearday -= day_tab[leap][i]; *pmonth = i; *pday = yearday; }

56 B vös négyzet (magic square) Olyan (ált. 1 és n 2 közötti) egész számokat tartalmazó négyzetes mátrix, melynek minden sorösszege, minden oszlopösszege, f átlójában és mellékátlójában lév számok összege azonos. További érdekességek Albrecht Dürer: Melencolia I (részlet)

57 B vös négyzet (magic square) Páratlan rend b vös négyzetek konstrukciója 1 A mátrix els sorának középs oszlopába írjunk 1-et! 2 A mátrix minden további elemének értéke legyen eggyel nagyobb a korábbinál (2, 3,..., n 2 )! 3 A következ elemet úgy választjuk ki, hogy jobbra és felfelé lépünk egyet. Ha a meghatározott elem már korábban ki lett töltve, akkor az utoljára kitöltött elem alatti elemmel kell folytatni a m veletet. Ha az így meghatározott elem kívül esne a mátrixon, akkor a szemközti oldalon lév els elemet kell használni (pl. a legfels feletti sor esetén a legalsót). 1. lépés 1 6. lépés lépés lépés lépés lépés lépés lépés lépés

58 B vös négyzet (magic square) Páratlan rend b vös négyzet el állítása és megjelenítése #include<stdio.h> #include<stdlib.h> #include<time.h> #define MERET 3 char varazs[meret][meret]; /* Csak páratlan rend nullmátrixszal m ködik! */ void eloallit(void) { int s=0, o=meret/2, n, i, j; for(n=1; n<=meret*meret; n++) { varazs[s][o] = n; i = s-1; if(i==-1) i=meret-1; j = o+1; if(j==meret) j=0; if(varazs[i][j]) s++; else { s = i; o = j; } } } void nyomtat(void) { int s, o; for(s=0; s<meret; s++) { for(o=0; o<meret; o++) printf("%d\t", *(*(varazs+s)+o)); putchar('\n'); } }

59 Véletlenszám generálás Álvéletlen számok (pseudo-random numbers) Szükséges fejfájl: stdlib.h Kezd érték: void srand(unsigned int seed);, ahol seed a kezd érték Véletlen számok: 0 int rand(void); RAND_MAX Pl. x = (double)rand()/rand_max ahol {x x R, 0 x 1} vagy x = MIN + rand()%(max-min+1) ahol {x x Z, MIN x MAX } Eltér számsorozatok el állítása eltér kezd érték pontos id! Szükséges fejfájl: time.h time_t time(time_t *t); V.t. érték: time_t (long) típusban az :00: (UTC) óta eltelt másodpercek száma, amit t címen is eltárol, ha az nem NULL

60 B vös négyzet (magic square) Ellen rzés és véletlenszer el állítás int ellenoriz(void) { int sor[meret] = {0}, oszlop[meret] = {0}, fo=0, mellek=0, s, o; for(s=0; s<meret; s++) for(o=0; o<meret; o++) { int elem = *(*(varazs+s)+o); *(sor+s) += elem; *(oszlop+o) += elem; if(s==o) fo += elem; if(o==meret-s-1) mellek += elem; } for(s=1; s<meret; s++) { if(*sor!=*(sor+s)) return 0; if(*oszlop!=*(oszlop+s)) return 0; } return *sor==*oszlop&&*oszlop==fo&&fo==mellek; } void veletlen(void) { int s, o; for(s=0; s<meret; s++) for(o=0; o<meret; o++) *(*(varazs+s)+o) = rand()%128; }

61 B vös négyzet (magic square) Tesztprogram int main(void) { srand(time(null)); eloallit(); nyomtat(); printf("b vös mátrix? %s\n", ellenoriz()?"igen":"nem"); veletlen(); nyomtat(); printf("b vös mátrix? %s\n", ellenoriz()?"igen":"nem"); return 0; } Kimenet B vös mátrix? Igen B vös mátrix? Nem

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

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 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 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

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

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 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

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 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

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

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

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

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

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

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

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

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 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

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

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

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

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

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 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

5. gyakorlat. Konstansok Tömbök Stringek

5. gyakorlat. Konstansok Tömbök Stringek 5. gyakorlat Konstansok Tömbök Stringek Konstansok A C nyelvben a konstansok preprocesszor makrókkal vannak megvalósítva. Konstansdefiniálás alakja: #define NÉV érték Az érték bármi lehet, később a fordítás

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

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

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

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

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. (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

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

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

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

Programozás I gyakorlat

Programozás I gyakorlat Programozás I. - 2. gyakorlat Változók, kiiratás, bekérés Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Számítástudomány Alkalmazása Tanszék Utolsó frissítés: September 24, 2007 1 tar@dcs.vein.hu

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

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

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

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

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

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 I gyakorlat

Programozás I gyakorlat Programozás I. - 2. gyakorlat Változók, típusok, bekérés Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Rendszer - És Számítástudományi Tanszék Utolsó frissítés: September 21, 2009 1 tar@dcs.vein.hu

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

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

C string műveletek (string.h alkalmazása)

C string műveletek (string.h alkalmazása) C string műveletek (string.h alkalmazása) A 3. előadás ZH során a string.h-ban található függvények alkalmazásával kell különböző, string kezeléssel kapcsolatos feladatokat megoldani. Ehhez szükséges ezen

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 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

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

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

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 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

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. (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 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

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

Programozás alapjai 2.Gy: A C nyelv alapjai P R O Programozás alapjai 2.Gy: A C nyelv alapjai. P R O A L A G 1/32 B ITv: MAN 2018.10.02 Code::Blocks Indítsa el mindenki! 2/32 1 Code::Blocks Új projekt 2 3 4 5 3/32 Code::Blocks Forráskód Kód fordítása:

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

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

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

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

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

Mutatók. Programozás II. Hatwágner F. Miklós március 4. Széchenyi István Egyetem, Gy r Mutatók Programozás II. Széchenyi István Egyetem, Gy r 2014. március 4. 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

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

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 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

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 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

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

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

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

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális

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á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

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

Mintavételes szabályozás mikrovezérlő segítségével Automatizálási Tanszék Mintavételes szabályozás mikrovezérlő segítségével Budai Tamás budai.tamas@sze.hu http://maxwell.sze.hu/~budait Tartalom Mikrovezérlőkről röviden Programozási alapismeretek ismétlés

Részletesebben

Példák tematikus csoportosításban

Példák tematikus csoportosításban 1. fejezet Példák tematikus csoportosításban 1.1. A legegyszerűbb feladatok 1.1. feladat. Írjon programot, amely billentyűzetről látható karaktereket olvas mindaddig, amíg a @ karaktert meg nem kapja.

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

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: C++ referencia Izsó Tamás 2017. február 17. 1. Bevezetés A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: Sokan összetévesztik a pointerrel. Keveset alkalmazzák

Részletesebben

INFORMATIKA tétel 2018

INFORMATIKA tétel 2018 INFORMATIKA tétel 2018 ELIGAZÍTÁS: 1 pont hivatalból; Az 1-4 feladatokban (a pszeudokód programrészletekben): (1) a kiír \n utasítás újsorba ugratja a képernyőn a kurzort; (2) a minden i = n,1,-1 végezd

Részletesebben

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

Programozás 1. Dr. Iványi Péter Programozás 1. Dr. Iványi Péter 1 C nyelv B.W. Kernighan és D.M. Ritchie, 1978 The C Programming language 2 C nyelv Amerikai Szabványügy Hivatal (ANSI), 1983 X3J11 bizottság a C nyelv szabványosítására

Részletesebben

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

Karakter- és sztringkezelő függvények, matematikai függvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.dudás László 30/0. Karakter- és sztringkezelő függvények, matematikai függvények Karakterkezelő könyvtári függvények Mintaprogram a karakterosztályozásra

Részletesebben

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával) Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával) I. A nyelv története C++ C (ős: B???) 1972 Ritchie AT&T Bell laboratórium UNIX 1978 Kernighan & Ritchie az első tankönyv,

Részletesebben

Stack Vezérlés szerkezet Adat 2.

Stack Vezérlés szerkezet Adat 2. Stack Vezérlés szerkezet Adat 2. Kód visszafejtés. Izsó Tamás 2013. november 14. Izsó Tamás Stack Vezérlés szerkezet Adat 2./ 1 Változó típusú paraméterekátadása 1. #include < s t d i o. h> int64 myfunc

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

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 9. gyakorlat Intelligens tömbök, mátrixok, függvények Surányi Márton PPKE-ITK 2010.11.09. C++-ban van lehetőség (statikus) tömbök használatára ezeknek a méretét fordítási időben

Részletesebben

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

Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás 6. Struktúrák A struktúra egy vagy több, esetleg különböző típusú változó együttese, amelyet a kényelmes kezelhetőség céljából önálló névvel látunk

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

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

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

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

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

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

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás 4.11. A C előfeldolgozó rendszer A fordítás első lépése a C esetében a különböző nyelvi kiterjesztések feldolgozása: másik állomány tartalmának

Részletesebben

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

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() { C változók Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! float valos; char karakter; int egesz1, egesz2; /* Tobb valtozo ugyan olyan tipusu lehet, ezek deklaraciojat csoportosthatjuk.

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

Programozás I. - 11. gyakorlat

Programozás I. - 11. gyakorlat Programozás I. - 11. gyakorlat Struktúrák, gyakorlás Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Rendszer- és Számítástudományi Tanszék Utolsó frissítés: November 16, 2009 1 tar@dcs.vein.hu Tar

Részletesebben

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

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás A tárgy órái Előadás hetente (St101) csüt. 8:15 Bécsi Tamás C elmélet Ajánlott irodalom Dennis Ritchie: A C programozási nyelv Gyakorlat hetente

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 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

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Az Integrált Fejlesztői Környezet C++ alapok Az Integrált Fejlesztői Környezet Visual Studio 2013 Community Edition Kitekintés: fordítás Preprocesszor Fordító

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