120 likes | 320 Views
Struktuurid vol2. Risto Heinsar & Ott Madis Ozolit. Struktuuride initsialiseerimisest. Struktuuri initsialiseerimine, kui andmed on järjest esitatud: toode kaup1 ={ 4.00 , " Kurk " };
E N D
Struktuurid vol2 Risto Heinsar & Ott Madis Ozolit
Struktuuride initsialiseerimisest • Struktuuri initsialiseerimine, kui andmed on järjest esitatud:toode kaup1={4.00, "Kurk"}; • Struktuuri initsialiseerimine, kui andmed on suvalises järjekorras:toode kaup2={.hind=0.50, .nimetus="Kapsas"}; • Struktuuride massiivi initsialiseerimine esimesel meetodil:toodekaubad[]={{0.40, "Kiirnuudlid"}, {0.70,"Pelmeenid"}}; Risto Heinsar & Ott Madis Ozolit
Näide 1 1 #include <stdio.h> 2 3 typedefstruct{ 4 float hind; 5 char nimetus[30]; 6 } toode; 7 8 intmain(void){ 9 toodekaup= {.hind=0.50, .nimetus="Kapsas"}; 10 toodekaubad[]={ 11 {0.40, "Kiirnuudlid"}, {0.70,"Pelmeenid"} 12 }; 13 printf("%.2f eur - %s\n", kaup.hind, kaup.nimetus); 14 printf("%.2f eur - %s\n", kaubad[0].hind, kaubad[0].nimetus); 15 printf("%.2f eur - %s\n", kaubad[1].hind, kaubad[1].nimetus); 16 return 0; 17 } Risto Heinsar & Ott Madis Ozolit
Struct tagastusega funktsioon • Meenutame, et struktuur oli andmetüüp – seega ka funktsiooni tagastus võib olla struktuur • Struktuur tüüpi funktsioon tagastab ühetervikliku struktuuri. Loome struktuuri tüübidefinitsiooni Loome funktsiooni prototüübi Loome funktsiooni typedefstruct{ intx, y; } punkt; punktsisestaPunkt(); punktsisestaPunkt(){ punktajutine; ajutine.x = 5; ajutine.y = 7; return ajutine; } Risto Heinsar & Ott Madis Ozolit
Näide 2 1 #include <stdio.h> 2 #include <math.h> 3 4 typedefstruct{ 5 intx, y; 6 } punkt; 7 8 punktsisestaPunkt(intnr); 9 10 intmain(){ 11 punktsirge[2]; 12 sirge[0]=sisestaPunkt(1); 13 sirge[1]=sisestaPunkt(2); 14 printf("Loigupikkus on %.2f", sqrt(pow(sirge[1].x - sirge[0].x, 2) + pow(sirge[1].y - sirge[0].y, 2))); 15 return 0; 16 } 17 18 punktsisestaPunkt(intnr){ 19 punktajutine; 20 printf("Sisestapunkti %d x ja y kordinaat\n> ", nr); 21 scanf("%d %d", &ajutine.x, &ajutine.y); 22 return ajutine; 23 } Risto Heinsar & Ott Madis Ozolit
Viitamisega seotud operatsioonid • int *p // viida deklareerimine • &muutuja // muutujalt aadressi pärimine • *p // viidatava väärtuse poole pöördumine • p=&muutuja // viidale muutuja aadressi omistamine • *p=55 // viidatavale mälupesale andmete kirjutamine • printf("%p", p) // viidal salvestatud aadressi trükkimine • printf("%d", *p) // viidataval aadressil olevate andmete trükkimine Risto Heinsar & Ott Madis Ozolit
Viitadest visuaalselt #include <stdio.h> intmain(void){ intnum=25, *p; p=# return 0; } *p0199FF8A num 25 Risto Heinsar & Ott Madis Ozolit
Viidad ja massiivid visuaalselt *p48F9AC91 intarray[]={5,3,7,3,5}; int*p; p=array; array[0]5 array[1]3 array[2]7 array[3]3 array[4]5 *(p+0) *(p+1) *(p+2) *(p+4) *(p+3) Risto Heinsar & Ott Madis Ozolit
Viidad ja struktuurid • Struktuuridele annab samamoodi viidata structtootaja{ inttootajaKood; char eesnimi[20]; char perenimi[20]; float tunnitasu; }; structtootaja indrek; structtootaja *strPtr; strPtr=&indrek; Risto Heinsar & Ott Madis Ozolit
Viida kaudu pöördumine Need 2 kirjutusviisi on samaväärsed! (*strPtr).tootajakood; (*strPtr).eesnimi; (*strPtr).perenimi; (*strPtr).tunnitasu; strPtr->tootajakood; strPtr->eesnimi; strPtr->perenimi; strPtr->tunnitasu; Peab meeldima! Risto Heinsar & Ott Madis Ozolit
Näide 3 1 #include <stdio.h> 2 #include <string.h> 3 4 typedefstruct{ 5 inttootajaKood; 6 char eesnimi[20]; 7 char perenimi[20]; 8 float tunnitasu; 9 } tootaja; 10 11 void trykiInfo(tootaja*ptr); 12 13 intmain(void) { 14 tootajaindrek={75, "Indrek", "Tamm", 2.75}; 15 trykiInfo(&indrek); 16 return 0; 17 } 18 19 void trykiInfo(tootaja*ptr){ 20 printf("Tootaja %06d, %s %s teenibtunnis %2.2f", 21 ptr->tootajaKood, ptr->eesnimi, ptr->perenimi, ptr->tunnitasu); 22 } Risto Heinsar & Ott Madis Ozolit
Tunnitöö • Loe sisse failidest ja salvesta struktuuridesse: • Tooted – tootekood, toote nimetus • Laoseis – tootekood, laoseis • Sorteeri tooted toote nime alusel tähestikulises järjekorras • Väljasta ainult need tooted, mille laojääk on alla 5 ühiku • Kasuta vähemalt ühes funktsioonis viitasid struktuurile! Risto Heinsar & Ott Madis Ozolit