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

Hasonló dokumentumok
Ha meg akarod tudni, hogy az egyes típusok milyen méretűek a te rendszereden, a következő program megmutatja:

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. 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 alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 15. Széchenyi István Egyetem, Gy r

Óbudai Egyetem. C programozási nyelv

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)

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

C programozási nyelv

Programozás I gyakorlat

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

5. Gyakorlat. struct diak {

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

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

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

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

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

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

Bevezetés a C++ programozási nyelvbe

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.

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

Programozás C++ -ban

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

Java II. I A Java programozási nyelv alapelemei

OOP #14 (referencia-elv)

Forráskód formázási szabályok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

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

Programozás C és C++ -ban

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

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

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

A programozás alapjai 1 Rekurzió

A C programozási nyelv I. Bevezetés

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

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

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

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

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

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. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

A C programozási nyelv I. Bevezetés

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:

Java II. I A Java programozási nyelv alapelemei

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Nagy HF u tmutato 2011/2012 II. fe le v

C++ programozási nyelv

Objektumok inicializálása

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

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

C++ programozási nyelv Struktúrák a C++ nyelvben

Pénzügyi algoritmusok

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

C++ programozási nyelv Konstruktorok-destruktorok

Készítette: Nagy Tibor István

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

Alprogramok, paraméterátadás

és az instanceof operátor

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

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Pénzügyi algoritmusok

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Algoritmizálás és adatmodellezés tanítása 1. előadás

Java programozási nyelv

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

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Kifejezések. Kozsik Tamás. December 11, 2016

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Programozás C++ -ban 2007/4

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

C programozási nyelv

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

SZÁMÍTÁSOK A TÁBLÁZATBAN

17. előadás: Vektorok a térben

Információs Technológia

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

Programozási Nyelvek: C++

Programozás I gyakorlat

A C programozási nyelv IV. Deklaráció és definíció

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

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

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

Szoftvertechnológia alapjai Java előadások

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

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

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

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

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

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

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

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

BASH script programozás II. Vezérlési szerkezetek

1. Alapok. #!/bin/bash

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Vezérlési szerkezetek

Osztályok. 4. gyakorlat

Átírá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 el. Néhány nyelvben az így értelmezett struktúrát rekordnak nevezik. A struktúra bevezetése segíti az összetett adathalmazok szervezését, ami különösen nagy programok esetén előnyös, mivel lehetővé teszi, hogy az egymással kapcsolatban lévő változók egy csoportját egyetlen egységként kezeljük, szemben az egyedi adatkezeléssel. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 2

6.1. Alapfogalmak A struktúra deklarációját a struct kulcsszó vezeti be, amelyet kapcsos zárójelek között a deklarációk listája követ. A struct kulcsszót opcionálisan egy név, az ún. struktúracímke követheti (mint a példánkban a pont). Ez a címke vagy név azonosítja a struktúrát és a későbbiekben egy rövidítésként használható a kapcsos zárójelek közötti deklarációs lista helyett. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 3

6.1. Alapfogalmak A struktúrában felsorolt változóneveket a struktúra tagjainak nevezzük. Egy struktúra címkéje (neve), ill. egy tagjának a neve és egy közönséges (tehát nem struktúratag) változó neve lehet azonos, mivel a programkörnyezet alapján egyértelműen megkülönböztethetők. Továbbá ugyanaz a tagnév előfordulhat különböző struktúrákban, bár célszerű azonos neveket csak egymással szoros kapcsolatban lévő adatokhoz használni. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 4

6.1. Alapfogalmak Példa: címkézett struktúra struct pont{ int x; int y; }; A kifejezés egy típust definiál, ahol a pont a struktúracímke, x és y a tagok. Ha a struktúra címkézett volt, akkor a címke a későbbi definíciókban a struktúra konkrét előfordulása helyett használható: struct pont pt; Amely egy pont típusú változót definiál, amely akár közvetlenül inicializálható a tagok értékeinek felsorolásával: struct pont pt={ 320, 200 }; 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 5

6.1. Alapfogalmak Példa: nem címkézett struktúra Egy struct deklaráció egy típust is definiál. A jobb oldali, záró kapcsos zárójel után következhet a változók listája, hasonlóan az alapadattípusok megadásához. Így pl. a struct {...} x, y, z; Közvetlenül hoz létre x,y,z struktúra változókat, és foglal le helyet számukra a tárterületen. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 6

6.1. Alapfogalmak Egy kifejezésben az adott struktúra egy tagjára úgy hivatkozhatunk, hogy struktúra-név.tag A pont struktúratag operátor összekapcsolja a struktúra és a tag nevét. A pt pont koordinátáit pl. úgy írathatjuk ki, hogy printf("%d, %d", pt.x, pt.y); 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 7

6.1. Alapfogalmak A struktúrák egymásba ágyazhatók. Például egy téglalap az átlója két végén lévő pontpárral írható le: struct tegla { struct pont pt1; struct pont pt2; }; Ennek alapján a tegla struktúra két pont struktúrából áll. Ha az abra struktúrát úgy deklaráljuk, hogy struct tegla abra; akkor az abra.pt1.x hivatkozás az abra pt1 tagjának x koordinátáját jelenti. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 8

6.2. Struktúrák és függvények A struktúrák esetén megengedett művelet a struktúra másolása vagy értékadása, ill. a struktúra címéhez való hozzáférés az & operátorral és a struktúra tagjaihoz való hozzáférés. Ezek a műveletek a struktúrát egy egységként kezelik, és a másolás vagy értékadás magában foglalja a struktúrák függvényargumentumkénti átadását, ill. a struktúra típusú függvényvisszatérés lehetőségét is. Struktúrák egy egységként nem hasonlíthatók össze. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 9

6.2. Struktúrák és függvények Példa 1 /* makepoint: egy pont struktúrát csinál az x és y komponensekből*/ struct pont makepoint (int x, int y) { struct pont temp; temp.x = x; temp.y = y; return temp; } struct tegla abra; abra.pt1 = makepoint(0, 0); 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 10

6.2. Struktúrák és függvények Példa 2 /* addpoint: két pont összeadása */ struct pont addpoint(struct pont p1, struct pont p2) { p1.x += p2.x; p1.y += p2.y; return p1; } Ennek a függvénynek a két argumentuma és a visszatérési értéke egyaránt struktúra. A függvényben átmeneti változó bevezetése nélkül, közvetlenül a p1 komponenst növeltük, hogy kihangsúlyozzuk, a struktúra típusú paraméterek éppen úgy érték szerint adódnak át, mint bármely más változó. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 11

6.2. Struktúrák és függvények Struktúra mutatók Ha nagy struktúrát kell átadnunk egy függvénynek, akkor sokkal hatékonyabb, ha a struktúra mutatóját adjuk át és nem pedig a teljes struktúrát másoljuk át. A struktúra mutatójának deklarációja: struct pont *pp; Ez egy struct pont típusú struktúrát kijelölő mutatót hoz létre. Ha pp egy pont struktúrát címez, akkor *pp maga a struktúra, és (*pp).x, ill. (*pp).y pedig a struktúra tagjai. A pp értékét felhasználva pl. azt írhatjuk, hogy struct pont kezdet, *pp; pp = &kezdet; printf("kezdet: (%d, %d)\n", (*pp).x, (*pp).y); 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 12

6.2. Struktúrák és függvények Struktúra mutatók A zárójelre a (*pp).x kifejezésben szükség van, mert a. struktúratag operátor precedenciája nagyobb, mint a * operátoré. A *pp.x kifejezés azt jelentené, mint a *(pp.x), ami viszont szintaktikailag hibás, mivel jelen esetben x nem mutató. A struktúrák mutatóit gyakran használjuk rövidített jelölési formában. Ha p egy struktúra mutatója, akkor a p-> struktúratag kifejezés közvetlenül a struktúra megadott tagját címzi. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 13

6.2. Struktúrák és függvények Struktúra mutatók A. és -> struktúraoperátorok a függvény argumentumát tartalmazó () kerek és az indexet tartalmazó [] szögletes zárójelekkel együtt a legmagasabb precedenciájú operátorok, így rendkívül szorosan kötnek. Például, ha adott a struct { int hossz; char *str; } *p; deklaráció, akkor a ++p->hossz kifejezés a hossz változót inkrementálja és nem a p-t, mivel a precedencia-szabályoknak és a végrehajtási sorrendnek megfelelő alapértelmezés ++(p->hossz). A kötés zárójelezéssel változtatható meg, pl. a (++p)->hossz a hossz változóhoz való hozzáférés előtt inkrementálja a pértékét, a (p++)->hossz pedig a hozzáférés után inkrementál. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 14

6.2. Struktúrák és függvények Struktúra mutatók A fordítás idején hatásos sizeof unáris operátor bármilyen C nyelvű objektum méretének meghatározására használható. A sizeof objektum és sizeof (típusnév) kifejezések egy egész számot adnak eredményül, ami a megadott objektum vagy adattípus bájtokban mért mérete. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 15

6.2. Struktúra mutatók Példa int main(int argc, char *argv[]) { struct tpont p1={1,2}, *p, *pp1; p=(struct tpont*)malloc(sizeof(struct tpont)); *p=p1; pp1=&p1; p->x--; p->y--; p1.x++; printf("p1 : %d %d\n",p1.x,p1.y); printf("pp1: %d %d\n",pp1->x,pp1->y); printf("p : %d %d\n",(*p).x,p->y); system("pause"); return 0; } 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 16

6.5. Önhivatkozó struktúrák Láncolt lista példa definíció struct node { int x; struct node *next; }; struct node *root,*actual; root=(struct node*) malloc(sizeof (struct node)); root->x=0; root->next=null; 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 17

6.5. Önhivatkozó struktúrák Láncolt lista példa add struct node* addnode(struct node *root, int value ) { root->next=(struct node*)malloc(sizeof (struct node)); root->next->x=value; root->next->next=null; return root->next; } 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 18

6.5. Önhivatkozó struktúrák Láncolt lista példa list void listnodes(struct node *root) { while (root!=null) { printf("%d ",root->x); root=root->next; } printf("\n"); } 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 19

6.5. Önhivatkozó struktúrák Láncolt lista példa search struct node* searchnode(struct node *root,int value) { while (root!=null) { if (root->x==value) return root; else root=root->next; } return NULL; } 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 20

6.5. Önhivatkozó struktúrák Láncolt lista példa insert int insertnode(struct node *root,int position, int value) { struct node *savenext; while (--position) { root=root->next; if (!root) return 1; } savenext=root->next; root=addnode(root,value); root->next=savenext; return 0; } 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 21

6.5. Önhivatkozó struktúrák Láncolt lista példa delete int deletenode(struct node *root,int position) { struct node *temp; while (--position) { root=root->next; if (!root->next) return 1; } temp=root->next; root->next=root->next->next; free(temp); return 0; } 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 22

6.5. Önhivatkozó struktúrák Láncolt lista példa main struct node *root,*actual; int i; root=(struct node*)malloc(sizeof (struct node)); root->x=0; root->next=null; actual=root; for (i=1;i<10;i++) actual=addnode(actual,i); listnodes(root); //0 1 2 3 4 5 6 7 8 9 if (actual=searchnode(root,5)) actual->x=0; listnodes(root); //0 1 2 3 4 0 6 7 8 9 printf("%d\n",insertnode(root,3,0)); //0 printf("%d\n",insertnode(root,12,0)); //1 listnodes(root); //0 1 2 0 3 4 0 6 7 8 9 deletenode(root,1); listnodes(root); //0 2 0 3 4 0 6 7 8 9 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 23

6.8. Unionok Az union egy olyan változó, amely különböző időpontokban különböző típusú és méretű objektumokat tartalmazhat úgy, hogy a fordítóprogram ügyel az objektumok méretére és tárbeli elhelyezésére vonatkozó előírások betartására. Az unionok alkalmazásával lehetővé válik, hogy azonos tárterületen különböző fajta adatokkal dolgozzunk, anélkül, hogy a programba géptől függő információkat kellene beépíteni. 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 24

6.8. Union példa Egy CAN üzenet typedef union{ unsigned char BYTES[8]; struct { unsigned short EAD; unsigned char ND1 : 2; unsigned char CONTROL_MODE : 2; unsigned char PRIORITY : 2; unsigned char EBI_MODE : 2; unsigned char URGENCY; unsigned char ND2; unsigned char ND3; unsigned char ND4; unsigned char CHECKSUM :4; unsigned char MESSCOUNT : 4; } message; } xbr_message_t; 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 25

6.8. Union példa Egy CAN üzenet xbr_message_t xbrmessage; xbrmessage.bytes[0]=0; xbrmessage.bytes[1]=0; printf("\n%x %x\n",xbrmessage.bytes[0], xbrmessage.bytes[1]); //0 0 xbrmessage.message.ead=0x1234; printf("\n%x %x\n",xbrmessage.bytes[0], xbrmessage.bytes[1]); //34 12 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 26

Vége Köszönöm a figyelmet! 2013.05.08. Dr. Bécsi Tamás: Járműfedélzeti rendszerek II. 27