10. gyakorlat 7. kis ZH megirasa Strukturak ---------- Logikailag ossze tartozo, de nem azonos tipusu adatok kozos kezelese. Az adatok tipusa fuggveny nem lehet! struktura definicio struct tipus{ tipus1 adattag1; tipusn adattagn } nev1, nev2,...; Nevi lehet pointer is. Hivatkozas: statikus esetben: nevi.adattagj=ertek; pointer eseten" (*nevi).adatagk=ertek; nevi->adattagk=ertek; Lehetseges a struktura fuggvenyargumentum legyen vagy fuggvenyvisszateresi ertek. Lehetseges lokalis valtozokent deklaralni es erteket adni neki. struct tipus nevk = {ertek1, ertek2, ...}; FA: Keszitsunk egy strukturat mely mobiltelefonok adatait tarja nyilvan: -nevjegyzek merete (egesz) -sms kapacitas (egesz) -gyarto neve (50 karakter) -gyarto orszag (50 karakter) -gyarto varos neve (50 karakter) -gyartasi ev (egesz) struct telefon{ int nevek; int smscap; char gyarto[51]; char orszag[51]; char varos[51]; int evjarat; }nokia, siemens; Typedef hasznalata strukturak eseten: uj adattipus definialasara hasznalhatjuk. typedef struct tipus{ tipus1 adattag1; tipusn adattagn } adattipus; Tipus es adattipus neve megegyzhet. Struktura tipusa is lehet struktura: typedef char szoveg[51]; struct telefon{ int nevek; int smscap; szoveg gyarto; szoveg orszag; szoveg varos; int evjarat; }nokia, siemens; Mezok a definialaskor osszevonhatok. Strukturak egymasba agyazhatok. struct telefon{ int nevek, smscap, evjarat; struct {szoveg nev, orszag, varos} gyarto; }nokia, siemens; nokia.gyarto.nev="Nokia Inc." FA: Keszitsunk egy programot, mely szamitogepek adatait tarolja. A program max 10 szamitogep adatait kepes kezelni. A program tarolja el a szamitogepek kovetkezo adatait: -Bill nyelve -Monitor tipus, meret, evjarat -Processzor gyarto, sebesseg -Hattertar merete -Memoria merete A program az adatok beadasa utan biztositson lehetoseget arra, hogy megkereshessuk van-e adott tipusu monitor, adott sebessegnel gyorsabb processzor. Ha talalunk a kriteriumnak megfelelot, akkor azt irassuk ki eyg fuggveny segitsegevel. (A feladat oran be nem fejezett resze HF, mert filekezelesnel fel fogjuk hasznalni!!!) Pointeraritmetika ----------------- egy t tipusra mutato pointer eseten megengedettek a: ++, -- muveletek, melyek a pointer erteket a sizeof(t)-vel csokkentik vagy novelik, ez egy tomb bejarasanal hasznos lehet. +=x, -=x muveletek, x*sizeof(t) ertekkel csokkenti/noveli a mutato erteket. megengedett meg:" -a pointerhez egesz szam hozzaadasa -pointerek osszeadasa, kivonasa minden mas muvelet TILOS a pointerkkel: -szorzas, osztas, valos szamokkal torteno muveletek. Feladat: Szamoljuk ki egy sztring hosszat pointerek segitsegevel: /**************************************** * Sztring hosszanak kiszamitasa ****************************************/ int strlen1(char *s){ int n; for (n = 0; *s != '\0'; s++, n++); return (n); } int strlen2(char *s){ char *a; a=s; for (; *s; s++); return (s-a); } int main(int argc, char* argv[]){ char a[]="Sziasztok"; printf("%d\n", strlen2(a)); return 0; } Tipuskenyszerites ----------------- Konverzios muvelet, a ()-be zart tipusura alakitja az utana allo kifejezest. Fa: alakitsunk at egy valos szamot egessze, majd vissza Valtozo hosszusagu parameteres fuggvenyek ----------------------------------------- Tudnunk kell milyen tipusu es mennyi adatot kaptunk parameterkent. Fa: fuggveny amley n db szamot kap es kiszamolja a szamtani kozepuket majd viiszater. #include #include using namespace std; double osszeg(int n, ...) { int * pmasodik = &n+1; int * q = pmasodik; int ii, ss=0; for (ii = 0; ii < n; ii++) { ss += *q++; } return (double)ss/n; } int main() { cout << "szamtani kozep = "; cout << osszeg(3,3,9,12); cout << endl; system("PAUSE"); return 0; }