Információs Technológia

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

Információs Technológia

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

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

Programozás I gyakorlat. 5. Struktúrák

Feladat: Hogyan tudunk létrehozni egy olyan vector nevű tömb típust, amely egy háromdimenziós térbeli vektort reprezentál?

Osztály és objektum fogalma

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

3. Gyakorlat Ismerkedés a Java nyelvvel

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

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

Információs Technológia

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

Körkörös listák. fej. utolsó. utolsó. fej

C programozás. 6 óra Függvények, függvényszerű makrók, globális é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.

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)

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

Programozas 1. Strukturak, mutatok

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

2.3. A C nyelv utasításai

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

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

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Programozás C++ -ban 2007/4

5. Gyakorlat. struct diak {

C programozási nyelv

Programozás. C++ típusok, operátorok. Fodor Attila

Programozás alapjai 1. (BMEVIEEA100)

Óbudai Egyetem. C programozási nyelv

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Elôszó a magyar kiadáshoz A Kiadó Elôszó

Bevezetés a C++ programozásba

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

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

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

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

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

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

117. AA Megoldó Alfréd AA 117.

Bevezetés, a C++ osztályok. Pere László

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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

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

Programozás C és C++ -ban

C# gyorstalpaló. Készítette: Major Péter

C# osztályok. Krizsán Zoltán

Bevezetés a mikrovezérlők programozásába: WS2812 RGB LED-ek vezérlése

OOP #14 (referencia-elv)

Programozás I gyakorlat

Programozás II. Fájlkezelés

C programnyelv 1. Kedves Kollegina, Kolléga!

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

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

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

1. Alapok. Programozás II

Objektumorientált programozás C# nyelven

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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

Hibadetektáló és javító kódolások

Objektumorientált programozás C# nyelven

Információs Technológia

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

INFORMATIKAI ALAPISMERETEK

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

Pénzügyi algoritmusok

A Számítógépek felépítése, mőködési módjai

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

PROGRAMOZÁS ALAPJAI (ANSI C NYELVEN)

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

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

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

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

Bánsághi Anna

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

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

Töltögetés és kannibálok

Labor gyakorlat Mikrovezérlők

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

C programozási nyelv

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

Programozási Nyelvek: C++

15. Programok fordítása és végrehajtása

Magas szintű programozási nyelvek 2 Előadás jegyzet

ISA szimulátor objektum-orientált modell (C++)

Osztályok. 4. gyakorlat

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

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

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

Alkalmazott modul: Programozás

1 Rev 4. A C++ programozás alapjai- segédlet

Típusok és konstansok

Adatbázisok* tulajdonságai

Átírás:

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 szűkségessége Struktúra Tömb Azonos típusú adatok tárolására alkalmas Ezek az adatok nem feltétlenül tartoznak össze Struktúra Logikailag összetartozó adatok tárolása Lehetnek különböző típusúak Például azonos típusúak: Pontok koordinátái, Körök adatai (középpont, sugár), komplex számok Például különböző típusúak: Hallgatók adatai (Pl.: Név, Születési dátum, Születési hely, Lakcím, stb.) Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 2 / 31

Struktúra Struktúra Logikailag összetartozó adatok tárolására alkalmas összetett adattípus Megadása: struct struct_tip_azon deklar_lista } Megadása: struct deklar_lista } Példa: struct float re, im; } comp1, comp2, comp3[12]; struct szem_adatok char nev[60]; int sz_ev, sz_ho, sz_nap; double magassag, tomeg; } sza1, sza2, sza3[10]; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 3 / 31

Struktúra 2. Struktúra Értékkészlet megegyezik a tagok értékkészletével Művelethalmaz értékadás szelekció (hivatkozás egy struktúra tagra) átadható fv. paraméterként hivatkozhatunk a címére Hivatkozás az adattagokra valtozo_neve. adattag_neve pointer_neve -> adattag_neve Példa: comp1.re = 1.123; comp1.im = 2.345; comp3[0].re = 1.123; szem_adatok uj_adat; sza1.sz_ev=1998; sza1.sz_ho=2; sza3[5] = uj_adat; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 4 / 31

Struktúra Kezdeti érték megadása struktúrának A változókhoz és a tömbökhöz hasonlóan van rá lehetőség Megadása: struct struct_tip_azon deklar_lista = értékek Megadása: struct deklar_lista = értékek Példa: struct POINT // POINT struktúra int x; int y; } p1 = 20, 40 }; // x = 20, y = 40 struct POINT pontocska; //struktúra tömb esetében struct POINT int x; int y; } p[2] = 20, 40}, 10, 5}}; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 5 / 31

Bitmező megadása Struktúra Alkalmazása: valamilyen nem byte szervezésű memóriaterület hatékony kezelése Megadása a deklaracios_listában lehetséges: valtozo_tipusa valtozo_neve : nagysag_bitben Példa (képernyőmemória megcímzéséhez struktúra): struct CELL // CELL bit mező létrehozása unsigned character : 8; // 00000000???????? unsigned foreground : 3; // 00000??? 00000000 unsigned intensity : 1; // 0000?000 00000000 unsigned background : 3; // 0???0000 00000000 unsigned blink : 1; //?0000000 00000000 } screen[25][80]; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 6 / 31

Struktúra mérete Struktúra Struktúra mérete nem mindig egyenlő adattagok méretének összegével!!! Fontos, hogy 8/16/32/64 bites rendszert használunk Elérésre optimalizálja a struktúrát a fordító Lekérdezése: sizeof operátor Példa (32 bites rendszerben): struct strukt_neve int a, b; } struktura; printf("\nméret: %d\n", sizeof struktura); -> Méret: 8 printf("\nméret: %d\n", sizeof strukt_neve); -> Méret: 8 struct strukt_neve int a, b; char c1, c2; } struktura; printf("\nméret: %d\n", sizeof struktura); -> Méret: 12 Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 7 / 31

Struktúra mérete 2 Struktúra Elérésre optimalizálja a struktúrát a fordító Példa (32 bites rendszerben): struct strukt_neve char c1; int a, b; char c2; } struktura; printf("\nméret: %d\n", sizeof struktura); -> Méret: 16 \\Lefoglalási egység beállítása 1 byte-ra #pragma pack(1) // Nem ANSI C!!!! struct strukt_neve char c1; int a, b; char c2; } struktura; printf("\nméret: %d\n", sizeof struktura); -> Méret: 10 Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 8 / 31

Memóriafoglalás Mutatók Minden változó a memóriában helyezkedik el A változók memórifoglalása a változó típusátol függ Minden programkód a memóriában helyezkedik el Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 9 / 31

Mutatók Mutatók Minden változó memóriában levő helye (címe) képezhető Minden függvény memóriában levő helye (címe) képezhető Ez a cím mutató típusban (pointerben) tárolható A pointer típus értékkészlete egy memória cím A pointer mindig egy meghatározott típusú objektumra mutat Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 10 / 31

Mutatók használata Mutatók Mutató típus definiálása: pointer_tipusa *pointer_neve Változó címének meghatározása: &valtozo_neve Mutató által mutatott változó értéke: *pointer_neve int i, *ip; i = 123; ip = &i; *ip = 123; double d, *dp double* dp2; void *p; int **ipp; int* *ipp2; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 11 / 31

Pointerek alkalmazása Mutatók Alacsony színtű (hardver közeli megoldások) Nem kell címekkel hivatkozni memóriaterületekre (olvasható assembly) Memóriába ágyazott I/O-k kezelése Dinamikus memóriakezelés Akkor alkalmazzuk, ha a program fordításának pillanatában nem tudjuk, hogy mekkora memóriaterület szükséges Lista adattípus kezelése Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 12 / 31

Mutatók Memóriába ágyazott I/O-k (PIC 16F87xx mikrokontroller memória felosztása) Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 13 / 31

Pointer típus jellemzői Mutatók Értékkészlet: adott objektum memóriacíme Konstansok: NULL (0) Művelethalmaz: Értékadás Indirekció Címaritmetika Relációk Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 14 / 31

Címaritmetika Mutatók C nyelv egyik jellegzetessége Gépközeli jelleget erősíti Példa: i egész szám p tetszőleges típusú pointer p = p+i p = p-i p = p+1 p += 1 p++ Új memóriacím értéke --> (unsigned long)p + i*sizeof(tetsz_tipus) --> (unsigned long)p - i*sizeof(tetsz_tipus) --> (unsigned long)p + sizeof(tetsz_tipus) --> (unsigned long)p + sizeof(tetsz_tipus) --> (unsigned long)p + sizeof(tetsz_tipus) Pointer növelése, hogy a következő objektumra mutason: p=p+1 vagy p+=1 vagy p++ vagy ++p Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 15 / 31

Címaritmetika példák Mutatók #define N 10 int *ip, s, i, v[n]; for(s=0, i=0; i<n; i++) s+=v[i]; for(s=0, ip = &v[0]; ip < &v[n]; *ip++) s+=*ip; for(s=0, ip = &v[0]; ip < &v[n]; s+=*ip++); double *dp, d[10]; for (s=0, dp = &d[0]; dp < &d[n]; s+=*dp++); ip és dp pointer növelésével (ip++ és dp++)végig lépkedünk a vektorokon. ip értéke 4 byte-al növekszik ( sizeof(int) ) dp értéke 8 byte-al növekszik ( sizeof(double) ) Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 16 / 31

Címaritmetika példák 2 Mutatók A tömb azonosítója mindig a 0. elem címe tomb_azonosito &tomb_azonosito[0] Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 17 / 31

Címaritmetika példák 3 Mutatók #define N 10 int *ip, v[n], j; *(v+1) = 1234; // v[1] = 1234; ip = v; ip = &v[5]; j = ip-t; // ip = &v[0]; j=2; *(v+j) = 123; // v[j] = 123; ip = v+j; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 18 / 31

Mutatók Struktúra adattagjaira való hivatkozás pointer_azonosito = &struktura_azonosito pointer_azonositoja -> struktura_adattag struct struktura_tipus int x,y; } struktura2, *str_p; str_p = &struktura2; str_p->x = 1; str_p->y = 5; printf("x=%d y=%d\n", str_p->x, str_p->y) ; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 19 / 31

Példák mutató alkalmazására Mutatók int j=2, v[6]; int *ip, *vp[6]; int **p; double *dp; // valtozo // mutato // mutatora mutato mutato v[1] = 1; v[j] = 2; // v[2] = 2; ip = v; ip += 3; *ip = 3; // v[3] = 3; *(ip-3) = 0; // v[0] = 0; vp[0] = &v[4]; p = vp; **p = 4; // v[4] = 4; dp = (double*)&v[5]; *(int*)dp = 5; // v[5] = 5; Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 20 / 31

Példák mutató alkalmazására 2 Mutatók int *ip, i=0, v[n]; ip = v; *ip++ = 123; // v[0] = 123 ip v[1]-re mutat *++ip = 123; // v[2] = 123 ip v[2]-re mutat (*ip)++; // v[2]++ *ip++ = *ip++; // v[] nem valtozik ip v[4]-re mutat v[i++] = i++; //v[0]=0 és i=2 char *cpp, c[]=1, 2, 3, 4, 5}; cpp = c; c[0] = *cpp+++*cpp; //c[0]= c[0]+c[0] cpp c[1]-re mutat *i = *cpp+++*cpp; //Miert hibas??? Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 21 / 31

Függvények Függvények és a program kapcsolata A program végrahajtása függvények egymás utáni végrahajtása A program szétbontható átlátható részekre (részprogragram / alprogram) (moduláris programozás) A részprogramokat valósítják meg a függvények Az ANSI C program a main() függvényel indul el A függvények paramétereken vagy visszatérési értékek segítségével kommunikálnak a környezetükkel Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 22 / 31

Függvények Függvények A függvények paramétereken, visszatérési értékek vagy külső adatok segítségével kommunikálnak a környezetükkel Paraméterátadás Értéke szerint (csak ez van a C nyelvben) Cím szerint Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 23 / 31

Függvény deklaráció Függvények A fordító számára megadjuk a függvény visszatérési típusát, a függvény nevét és paramétereinek a típusát visszateresi_ertek_tipusa fuggveny_neve( parameter1_tipusa, parameter2_tipusa,...); Példa: char IsSamePacket(char *pdata1, char *pdata2, int NumData); void CRC16(unsigned char* pdata, int NumData); char CheckCRC16(unsigned char *pdata, int NumData); char IsSamePacket(char*, char*, int); void CRC16(unsigned char*, int); char CheckCRC16(unsigned char*, int); Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 24 / 31

Függvény definició Függvények A fordító számára megadjuk a függvény forráskódját, visszatérési típusát, a nevét, a paramétereinek a típusát és nevét visszateresi_ertek_tipusa fuggveny_neve( param1_tipusa param1_azonosito, param2_tipusa param2_azonosito,...)...fuggveny_forraskodja... } Példa: void GenerateCRC( unsigned char *pdata, char DataCount) unsigned char i,j; CRC=0xFFFF; for(j=0; j<datacount; j++) CRC^=*pData++; for(i=0; i<8; i++) if (CRC & 0x1) CRC>>=1; CRC^=0xA001; } else CRC>>=1; } } } Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 25 / 31

Érvényességi tartomány Függvények A változókra és a függvényekra vonatkozik Lexikális érvényességi tartomány A programkód olyan részlete, ahol az azonosító ismert Külső: fordítási egység végéig Blokk: a blokkon belül Egyéb tartományok (typedef, címkék, felsorolások, struktúrák, függvények, stb.) Külső csatolású objektumok A fordítási egységek közötti kapcsolatot határozza meg Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 26 / 31

Érvényességi tartomány (példa) Függvények #include <...> double atlag(double *p, int N) int i; double s; for(i=0, s=0; i<n ;s+=p[i++]); return s/n; } double szoras(double *p, int N, double atl) int i; double s; for(i=0,s=0;i<n;i++) s+=(p[i]-atl)*(p[i]-atl); return sqrt(s)/(n-1); } void main(void) int N=10, i; double v[10], atl, szor; srand( (unsigned)time(null) ); for(i=0; i<n; i++) v[i]=rand(); printf("%lf\n", v[i]); } atl=atlag(v, N); szor=szoras(v, N, atl); printf("\natlag: %lf \nszoras: %lf", atl, szor); } Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 27 / 31

A C program szerkezete Függvények Különböző modulokból / fordítási egységekből állhat össze a program Nagyobb programok esetében mindig több modulból / fordítási egységből áll a program Interface definiciók szükségesek a fordítási egységek közötti kapcsolathoz A kapcsolatot általában a header file-ok teremtik meg Függvények prototípusai Globális változók definiciói Struktúrák deklarációi Makrók Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 28 / 31

Program modulokra bontása Függvények atlag.c double atlag(double *p, int N) int i; double s; } for(i=0, s=0; i<n ;s+=p[i++]); return s/n; atlag.h double atlag(double *p, int N); szoras.c #include <math.h> double szoras(double *p, int N, double atl) int i; double s; } for(i=0,s=0;i<n;i++) s+=(p[i]-atl)*(p[i]-atl); return sqrt(s)/(n-1); Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 29 / 31

Program modulokra bontása Függvények szoras.h double szoras(double *p, int N, double atl); foprogram.c #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include "szoras.h" #include "atlag.h" void main(void) int N=10, i; double v[10], atl, szor; srand( (unsigned)time(null) ); for(i=0; i<n; i++) v[i]=rand(); printf("%lf\n", v[i]); } } atl=atlag(v, N); szor=szoras(v, N, atl); printf("\natlag: %lf \nszoras: %lf", atl, szor); Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 30 / 31

Függvényparaméterek Függvények Információátadás módja alapján érték (nem módosítható) változó (megváltoztatható az értéke) Érték átadás esetén: A paraméterek nem változhatnak meg (csak értéke adódik át) A paraméterek eredeti tartalma az eredeti helyen megmarad Ebben az esetben a függvény csak a függvényértéken keresztül tud a külvilágnak eredményt szolgáltatni Változó átadás esetén: (cím szerinti átadás) A paraméter címe adódik át (annak tartalma felhasználható és megváltoztatható) Csak a paraméter jellegét (változó) kell megadni a definíciókor C nyelvben a tömb átadásától eltekintve jelölni kell a cím átadását és használatát Fodor Attila (Pannon Egyetem) Információs technológia 2010 október 31 / 31