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

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

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

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

1. Alapok. Programozás II

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

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

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

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

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

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.

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 C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

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

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

Pénzügyi algoritmusok

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

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

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

INFORMATIKA tétel 2017

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

Programozás C++ -ban

INFORMATIKA tétel 2018

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

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

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

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

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

Stack Vezérlés szerkezet Adat 2.

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

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

Bevezetés a C++ programozási nyelvbe

INFORMATIKA javítókulcs 2016

Programozas 1. Strukturak, mutatok

3. Osztályok II. Programozás II

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

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

malloc free malloc free int sum(int a[4]) { return a[0] + a[1] + a[2] + a[3]; }

INFORMATIKA tétel 2019

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

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

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

Programozás II gyakorlat. 6. Polimorfizmus

Pénzügyi algoritmusok

Maximum kiválasztás tömbben

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

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

Programozás I gyakorlat

/* 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. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

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

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ási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

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

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

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

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

Programozás C nyelven 6. ELŐADÁS. Sapientia EMTE

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

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

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

Programozás C++ -ban

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Információs Technológia

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

5. Gyakorlat. struct diak {

Programozás alapjai 1. (BMEVIEEA100)

Informatika terméktervezőknek

Minimum feladat: Teljes feladat: Minimum feladat: Teljes feladat: Minimum feladat:

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

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

Alprogramok, paraméterátadá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 alapjai 2.Gy: A C nyelv alapjai P R O

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Programozás C és C++ -ban

Bevezetés a programozásba I.

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

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

Információs Technológia

Megoldott programozási feladatok standard C-ben

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

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

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozás II gyakorlat. 4. Öröklődés

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

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Adatszerkezetek és algoritmusok

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

Példák tematikus csoportosításban

Objektumorientált Programozás VI.

500. AA Megoldó Alfréd AA 500.

PROGRAMOZÁSI NYELVEK - CPP. ELŐADÁS JEGYZET

e) Írj kódrészletet, mely az int d változó utolsó előtti bitjét 1-re állítja.

Felvételi tematika INFORMATIKA

Java II. I A Java programozási nyelv alapelemei

Átírás:

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 ; p >= p1 ; --p ){ binarisan(*p); cout << ; px p1 p2 3.14 void binarisan (unsigned char c){ int n = sizeof(unsigned char) * 8; int i, b[n]; for ( i = 0 ; i < n ; ++i ) { b[i] = c%2; c /= 2; for ( i = n-1 ; i >= 0 ; --i ) { cout << b[i]; 00011111 10000101 11101011 01010001 10111000 00011110 00001001 01000000 01000000 00001001 00011110 10111000 01010001 11101011 10000101 00011111 x

POINTER-ek alkalmazásai (címszerinti paraméterátadás) 75001 Paris, France 75001 Paris, France

POINTER-ek alkalmazásai (címszerinti paraméterátadás) Írj függvényt két változó tartalmának kicserélésére! void csere_1(int,int); int a = 2, b = 3; csere_1(a,b); cout << a << << b; 2 3_ void csere_1(int x, int y){ int v; v = x; x = y; y = v; void csere_2(int*,int*); int a = 2, b = 3; csere_2(&a,&b); cout << a << << b; 3 2_ void csere_2(int *pa, int *pb){ int v; v = *pa; *pa = *pb; *pb = v; a 2 b 3 x 2 y 3 main v csere_1 a 2 b 3 pa &a *pa *pb main pb &b v csere_2

POINTER-ek alkalmazásai (1D-tömbök átadása függvénynek) Írj függvényeket számsorozat beolvasására/kiírására! void beolvas(int*,int*); void kiir(int*,int); int n, a[100]; beolvas(a,&n); kiir(a,n); a n???? b a pn &n *pn main beolvas void beolvas(int *b, int *pn){ ifstream fin; fin.open( szamsor.txt ); if ( ) {... int i; fin >> *pn; for( i = 0 ; i < *pn ; ++i ){ fin >> b[i]; fin.close(); szamsor.txt 5 2 3 51 0-6 A tömbök implicite címszerint adódnak át!

POINTER-ek alkalmazásai (1D-tömbök átadása függvénynek) Írj függvényeket számsorozat beolvasására/kiírására! void beolvas(int*,int*); void kiir(int*,int); int n, a[100]; beolvas(a,&n); kiir(a,n); void kiir(int *a, int n){ int i; for( i = 0 ; i < n ; ++i ){ cout << a[i] << ; cout << \n ; 2 3 51 0-6 _ szamsor.txt 5 2 3 51 0-6 n 5 a 2 3? a a n 5 main kiir

POINTER-ek alkalmazásai (2D-tömbök átadása függvénynek) Írj függvényt 2D-tömbben tárolt mátrix kiírására! void kiir ( int(*)[100], int, int ); b int n, m, b[50][100];... kiir(b,n,m);... void kiir ( int(*b)[100], int n, int m ){ int i,j; for( i = 0 ; i < n ; ++i ){ for( j = 0 ; j < m ; ++j ){ cout << b[i][j] << ; cout << \n ; int *x[100];// int-pointer TÖMB int (*x)[100];// POINTER int-tömbre

Generálj n hosszú véletlen-számsorozatot (n<10000), melynek elemei a [0,10) intervallumba essenek. Készíts szám-előfordulási statisztikát! #include <stdlib.h> #include <time.h> int n,i,a[10000],st[10]={0; srand(time(null)); cin >> n; for( i = 0 ; i < n ; ++i ){ a[i] = rand() % 10; ++st[a[i]]; for(i=0;i<10;++i){cout << i << : << st[i] << \n ;??????? 0 1 2 3 4 5 9999 0 0 0 0 0 0 0 0 1 2 3 4 5 0 0 1 3 0 1 0 0 1 2 3 4 5 0 0 0 6 7 8 9 pazarlás 2 3 5 3 3?? 0 1 2 3 4 5 9999 0 0 0 6 7 8 9 5 0:0 1:0 2:1 3:3 4:0 5:1 6:0 7:0 8:0 9:0 _

Dinamikus helyfoglalás/változók (malloc,calloc,realloc,free) #include <stdlib.h> // tartalmazza malloc, deklarációit #include <time.h>?? a st int n, i, *a, *st; srand(time(null)); cin >> n; a = (int*)malloc(n*sizeof(int)); if(a==null){ st = (int*)calloc(10,sizeof(int)); if(st==null){ for( i = 0 ; i < n ; ++i ){ a[i] = rand() % 10; ++st[a[i]]; for(i=0;i<10;++i){cout << i << : << st[i] << \n ; free(a); free(st);????? 0 1 2 3 4 2 3 5 3 3 0 1 2 3 4 0 0 1 3 0 1 0 0 1 2 3 4 5 0 0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 6 7 8 9 0 0 0 6 7 8 9 5 0:0 1:0 2:1 3:3 4:0 5:1 6:0 7:0 8:0 9:0 _

Dinamikus helyfoglalás/változók (malloc,calloc,realloc,free) void* malloc (size_t size); Size of the memory block, in bytes size_t is an unsigned integral type If the function failed to allocate the requested block of memory, a null pointer is returned void* calloc (size_t num, size_t size); and initializes all its bits to zero void* realloc (void* ptr, size_t size); Changes the size of the memory block pointed to by ptr The function may move the memory block to a new location (whose address is returned by the function) void free (void* ptr); // ptr = NULL;

Dinamikus helyfoglalás/változók (malloc,calloc,realloc,free) Minden malloc/calloc/realloc-ot kövessen NULL-tesztelő if. Minden malloc/calloc/realloc-nak legyen meg a free párja. Tanácsos a free utasítást követőe a poi ter nullázni. Megtévesztő, ha egy poi ter e 0, égse utat lefoglalt területre. Biztonságosabb, ha a NULL makró helyet 0-t használunk. C++ -ban a null kulcsszót.

2D dinamikus b 0 int** int* 0 1 j m int int int int tömbök 1 int* int int int int b[i][j] b[i] i int* int int int int n int* int int int int int n, m, i, **b; cin >> n >> m; b = (int**)malloc(n*sizeof(int*)); for( i = 0 ; i < n ; ++i ){ b[i] = (int*)malloc(m*sizeof(int)); for( i=0 ; i<n ; ++i ){ free(b[i]); free(b)

int double_cmp ( const void *, const void * );... int n, i; double *a; fin >> n; a = (double*)malloc(n*sizeof(double)); for ( i = 0 ; i < n ; ++i ){ fin >> a[i]; qsort ( a, n, sizef(double), double_cmp ); for ( i = 0 ; i < n ; ++i ){ fout << a[i] << ; Függvénypointerek (qsort) int double_cmp ( const void *p1, const void *p2 ){ free(a); double *q1 = (double *)p1; double *q2 = (double *)p2; if ( *q1 < *q2 ) { return -1; else if ( *q1 > *q2 ) { return 1; else {

Összefoglalás Címszerinti-paraméterátadás A tömbök implicite címszerint adódnak át A 2D-tömbök nevei, mint pointerek, a 0. sor címét tárolják Dinamikus helyfoglalás: malloc, calloc, realloc, free dinamikus 1D, 2D-tömbök qsort void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))