A struct, az union és az enum típus

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Naprendszerünk bolygói
Naprendszerünk bolygói. Merkúr  Átmérője: 4880 km  Keringési idő: 0,24 év  Sebesség: 48 km/s.
Tömbök C#-ban.
LEgyméretű tömbök, vektorok Alkalmazott Informatikai Tanszék SZÁMÍTÁSTECHNIKA I. dr.Dudás László 17./0. lVektorok definiálása lVektorok definiálása kezdőértékekkel.
Típusok, változók, konstansok
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
LRendezés minimális elem kiválasztással Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 19./0. lAz algoritmus működése lRávezető feladat.
Objective- C Bereczki Gréta Tamara
Sztringek.
Bevezetés a Java programozásba
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Függvények, mutatók Csernoch Mária.
Mutatók, tömbök, függvények
Borland C/C++ mintapéldák
Borland C/C++ mintapéldák tömbökre
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Borland C/C++ mintapéldák struktúrákra. 1. példa /* Egyszerû példa a struktúrák használatára */ #include #define SIZE 5 struct szemely { char nev[26];
Borland C/C++ mintapéldák mutatókra
Programozás I. Horváth Ernő.
Programozás I. Horváth Ernő.
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Programozás I. Ciklusok
Programozás I. Adatállományok dr Póder Margit f. docens Rendszer és Szoftvertechnológia Tanszék.
További vektor, mátrix algoritmusok
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Tömbök Csernoch Mária.
Összetett adattípusok
Készítette: Csíki Gyula
Naprendszerünk bolygói
Naprendszerünk bolygói. Merkúr Átmérője: 4880 km Keringési idő: 0,24 év Sebesség: 48 km/s.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Bolygók és holdak.
Objektum orientált programozás
Programozás I. Típus algoritmusok
A Visual Basic nyelvi elemei
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
C Programozási alapok.
© Tóth Ákos, Óbudai Egyetem, 2010
Programtervezés, programozás I. 2.5 tömbök,stringek
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Struktúrák a C nyelvben 1 Akkor használjuk, ha az egy egyedre jellemző különböző típusú adatokat együtt akarjuk tárolni. Lényegében típusdeklaráció. A.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
A C++ programozási nyelv
Kifejezések C#-ban.
Programozási alapismeretek
A C++ programozási nyelv
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Változók.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Könyvtári függvények I. Input / output kezelés függvényei
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Naprendszerünk bolygói
Naprendszerünk bolygói
Konverziós operátorok
Típusok, változók, konstansok
Függvénysablonok használata
Előadás másolata:

A struct, az union és az enum típus Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./0. A struct, az union és az enum típus A struktúra adattípus Struktúra típus definiálása Struktúra típusú változó definiálása Hivatkozás a struktúratagokra Mintapélda struktúrák alkalmazására Az enum típus Mintaprogram enum típus alkalmazására

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./1. A struktúra adattípus A struktúra adattípus egy egyed logikailag összetartozó, viszonylag kisszámú, különböző adattípusokkal ábrázolható jellemzőinek meg-adására szolgál. A jellemzők tárolására önállóan is használható struktúratagok szolgálnak. A struktúra összes adattagjával egyetlen egységként is kezelhető, pl. értékátadásban, függvények paraméterátadásában vagy visszatérő értékeként.

Példaként a Nap bolygói: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./2. Példaként a Nap bolygói: A bolygó neve Átmérője [km] Távolsága a Naptól [km] Keringési ideje év/ nap Merkúr Vénusz Föld Mars Jupiter Szaturnusz Uránusz Neptunusz Plútó 4 880 12 756 6 790 52 000 142 800 3 000 48 400 120 860 12 100 58 millió 150 millió 778 millió 2870 millió 4497 millió 1427 millió 5950 millió 228 millió 108 millió 88 687 365 225 29,5 165 84 248 12 nap év egy struktúra a struktúra adattagjai

Struktúra típus definiálása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./3. Struktúra típus definiálása Több lehetőség: struct <struktúra_típusnév> { <típus1> struktúratag1 ; <típus2> struktúratag2 ; . . . <típusK> struktúratagK ; } ; vagy typedef utasítással kétféle alakban: typedef struct <struktúra_típusnév> { <típus1> struktúratag1 ; <típus2> struktúratag2 ; . . . <típusK> struktúratagK ; } ; vagy typedef struct{ <típus1> struktúratag1 ; } <STRUKTÚRA_TÍPUSNÉV>;

Struktúra változó definiálása Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./4. Példák struct típus definiálására: struct ponttipus { float x ; float y ; } ; typedef struct komplextip { double Re ; double Im ; } ; typedef struct { char nev[ 40 ] ; char tankor [ 6 ] ; } HALLGATOREKTIP ; Struktúra változó definiálása a típus-definiálási formától függően eltérő, a struct szó után megadott típusnév csak a struct szóval együtt jelenti az adott struktúratípust, míg a harmadik alak típusneve önállóan szerepelhet struktúraváltozók definiálásában: struct <struktúra_típusnév> <változónév> ; <STRUKTÚRA_TÍPUSNÉV> <változónév> ;

Hivatkozás a struktúratagokra Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./5. Példák struktúraváltozók definiálására: struct ponttipus P1, P2 ; struct komplextip cmp , * cmpmut ; HALLGATOREKTIP hallgatovekt [120] ; Az utolsó példa egy struktúrákból álló vektort definiál. Hivatkozás a struktúratagokra A hivatkozás operátora a . (pont). Példák: P1.x = 6.234; P1.y = 12*34.5 ; cmp.Re = cmp.Re + 4.67 ; cmp.Im = 12.45 ; strcpy( hallgatovekt [12] . nev , "Nagy Tamás" ); strcpy( hallgatovekt [12] . tankor , "G1BV3" ); Megj.: Az strcpy() függvénnyel másolhatjuk át a szövegeket a struktúratagokba, mivel karaktervektorok számára nincs értelmezve az egyben történő értékadás.

Azonos típusú struktúrák között értelmezve van az értékadás, pl.: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./6. Mutatóval elérhető struktúrák tagjainak hivatkozása hagyományos módon, vagy a -> nyíl operátorral történhet: (*cmpmut) . Re = 34.7; cmpmut ->Re = 34.7; Azonos típusú struktúrák között értelmezve van az értékadás, pl.: P1 = P2 ; A struktúrák is elláthatók definiáláskor kezdőértékkel, pl.: HALLGATOREKTIP diak = {"Gál Éva" ,"G1BG1" }; struct komplextip cmp = { -123.44 , 254.3 } ;

Mintapélda struktúrák alkalmazására: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./7. Mintapélda struktúrák alkalmazására: Hozzuk létre a Nap bolygóinak adatait tároló struktúra-vektort, majd irassuk ki a Mars adatait! #include <stdio.h> #include <conio.h> #define bsz 9 // bolygók száma typedef struct { char nev [15 ] ; unsigned int atmero ; long int tavolsag ; float kering_ido ; char evvagynap[ 4 ] ; } BOLYGOTIP ; BOLYGOTIP bolygok[ bsz ] ;

printf("Bolygók adatbázisa\n\n"); for (i = 0; i < bsz ; i++) Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./8. main() { int i; char nev [15]; clrscr(); printf("Bolygók adatbázisa\n\n"); for (i = 0; i < bsz ; i++) printf( " \nA bolygó neve: " ); scanf( "%s", bolygok[ i ].nev ); printf( "Átméröje=" ); scanf( "%u", &bolygok[ i ].atmero ); printf( "Naptól való távolsága=" ); scanf( "%ld", &bolygok[ i ].tavolsag ); printf("Keringési idö="); scanf("%f",&bolygok[ i ].kering_ido); printf("Években, vagy napokban? (év/nap):"); scanf("%s",bolygok[ i ].evvagynap); }

printf( "\n\nA keresett bolygó neve:" ); scanf( "%s", nev ); Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./9. printf( "\n\nA keresett bolygó neve:" ); scanf( "%s", nev ); for (i = 0; i < bsz ; i++) { int j = 0; while (nev[ j ] == bolygok[ i ].nev[ j ] && nev[ j ] && bolygok[ i ].nev[ j ] ) j++; /* a while ciklus magja */ if (nev[ j ] == bolygok[ i ].nev[ j ]) /* a két név azonos */ { printf( "\nA bolygó átmérője= %u", bolygok[i].atmero ); printf( "\nNaptól való távolsága= %ld millió km", bolygok[i].tavolsag ); printf( "\nKeringési ideje= %f %s", bolygok[ i ].kering_ido, bolygok[ i ].evvagynap); break; /* kiugrik a for ciklusból */ } getch();

Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./10. Az enum típus Az enum típus felsorolt azonosítók automatikus sorszámozására, konstans sorszámérték hozzárendelésére alkalmas. A 0-val kezdődő automatikus értékhozzárendelést megváltoztathatjuk, ha valamelyik azonosító számára előírjuk az értéket, mely int típusú lehet. A nem megadott értékű azonosítók az előttük levőtől eggyel nagyobbak. Az enum típus konstansai egész értékekként viselkednek. Amennyiben önálló típusnévvel látjuk el, a felsorolt értékek egy ilyen típusú adat értékkészleteként foghatók fel. hétfő kedd szerda csütörtök péntek szombat vasárnap

Példák enum típusú definíciókra: Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./11. Példák enum típusú definíciókra: enum { false, true } ; /* false = 0, true = 1 értékű */ enum fibonacci { a, b, c = 1, d = 2, e = 3, f = 5 }; Definiálás önálló típusnévvel: typedef enum evszaktip { tavasz, nyar, osz, tel }; enum evszaktip evszak; /* evszak változó definiálása */ Mintaprogram enum típus alkalmazására Egy két TV-szaküzlettel rendelkező vállalatnál ismertek boltonként egy-egy mátrix alakjában a naponta forgalmazott készülék-darabszámok típusonként, valamint az egyes típusok egységárai. Határozzuk meg az egyes munkanapok két boltra és típusokra nézve összesített forgalmát forintban!

/* Forgalomszámítás */ #include <stdio.h> Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./12. /* Forgalomszámítás */ #include <stdio.h> #include <conio.h> void main() { const char Nap[5][10]= {"Hétfo","Kedd","Szerda","Csütörtök","Péntek"}, Gyarto[4][10]={"Sony","Panasonic", "Grundig","Philips"}; typedef enum naptip {Hetfo,Kedd,Szerda,Csutortok,Pentek}; typedef enum gyartotip {Sony,Panasonic,Grundig,Philips}; unsigned int darab1[Pentek+1][Philips+1], darab2[Pentek+1][Philips+1], osszes[Pentek+1][Philips+1]; enum naptip nap; enum gyartotip gyarto; float egysegarak[Philips+1]; float bevetelek[Pentek+1];

clrscr(); puts("Forgalomszámítás\n"); /* Feltöltés billentyüzetről: */ Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./13. clrscr(); puts("Forgalomszámítás\n"); /* Feltöltés billentyüzetről: */ for (nap = Hetfo; nap <= Pentek ; nap++) for (gyarto = Sony; gyarto <= Philips; gyarto++) { printf("\nAdja meg a %si napon eladott\n", Nap[nap]); printf("%s típusú készülékek darabszámát:\n", Gyarto[gyarto]); printf(" Az első üzletnél = "); scanf("%u",&darab1[nap][gyarto]); printf(" A második üzletnél= "); scanf("%u",&darab2[nap][gyarto]); } /* Az egységárak beolvasása: */ printf("\n"); printf("Adja meg a %s típusú TV árát (Ft/db)= ",Gyarto[gyarto]); scanf("%f",&egysegarak[gyarto]); clrscr(); puts("Forgalomszámítás\n"); /* Feltöltés billentyüzetről: */ for (nap = Hetfo; nap <= Pentek ; nap++) for (gyarto = Sony; gyarto <= Philips; gyarto++) { printf("\nAdja meg a %si napon eladott\n", Nap[nap]); printf("%s típusú készülékek darabszámát:\n", Gyarto[gyarto]); printf(" Az első üzletnél = "); scanf("%u",&darab1[nap][gyarto]); printf(" A második üzletnél= "); scanf("%u",&darab2[nap][gyarto]); } /* Az egységárak beolvasása: */ printf("\n"); printf("Adja meg a %s típusú TV árát (Ft/db)= ",Gyarto[gyarto]); scanf("%f",&egysegarak[gyarto]);

/* A két bolt forgalmának (mátrixoknak) összegzése: */ Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 25./14. /* A két bolt forgalmának (mátrixoknak) összegzése: */ for (nap = Hetfo; nap <= Pentek; nap++) for (gyarto = Sony; gyarto <= Philips; gyarto++) osszes[nap][gyarto] = darab1[nap][gyarto] + darab2[nap][gyarto]; /* Napi bevétel számítása (mátrix szorzása vektorral): */ for (bevetelek[nap] = 0, gyarto = Sony; gyarto <= Philips;  gyarto++) bevetelek[nap] += osszes[nap][gyarto] * egysegarak[gyarto]; /* Napi összesített bevételek kiíratása: */ printf("\nA %si összesített bevétel: \t %13.2f Ft", Nap[nap],bevetelek[nap]); getch(); }