Struktuurid vol 2 Risto Heinsar Ott Madis Ozolit

  • Slides: 12
Download presentation
Struktuurid vol 2 Risto Heinsar & Ott Madis Ozolit

Struktuurid vol 2 Risto Heinsar & Ott Madis Ozolit

Struktuuride initsialiseerimisest • Struktuuri initsialiseerimine, kui andmed on järjest esitatud: toode kaup 1={4. 00,

Struktuuride initsialiseerimisest • Struktuuri initsialiseerimine, kui andmed on järjest esitatud: toode kaup 1={4. 00, "Kurk"}; • Struktuuri initsialiseerimine, kui andmed on suvalises järjekorras: toode kaup 2={. hind=0. 50, . nimetus="Kapsas"}; • Struktuuride massiivi initsialiseerimine esimesel meetodil: toode kaubad[]={ {0. 40, "Kiirnuudlid"}, {0. 70, "Pelmeenid"} }; 2013 Risto Heinsar & Ott Madis Ozolit 2

Näide 1 1 #include <stdio. h> 2 3 typedef struct { 4 float hind;

Näide 1 1 #include <stdio. h> 2 3 typedef struct { 4 float hind; 5 char nimetus[30]; 6 } toode; 7 8 int main(void) { 9 toode kaup = {. hind = 0. 50, . nimetus="Kapsas"}; 10 toode kaubad[] = { 11 {0. 40, "Kiirnuudlid"}, {0. 70, "Pelmeenid"} 12 }; 13 printf("%. 2 f eur - %sn", kaup. hind, kaup. nimetus); 14 printf("%. 2 f eur - %sn", kaubad[0]. hind, kaubad[0]. nimetus); 15 printf("%. 2 f eur - %sn", kaubad[1]. hind, kaubad[1]. nimetus); 16 return 0; 17 2013 } Risto Heinsar & Ott Madis Ozolit 3

Struct tagastusega funktsioon • Meenutame, et struktuur oli andmetüüp – seega ka funktsiooni tagastus

Struct tagastusega funktsioon • Meenutame, et struktuur oli andmetüüp – seega ka funktsiooni tagastus võib olla struktuur • Struktuur tüüpi funktsioon tagastab ühe tervikliku struktuuri. 2013 1. Loome struktuuri tüübidefinitsiooni typedef struct { int x, y; } punkt; 2. Loome funktsiooni prototüübi punkt sisesta. Punkt(); 3. Loome funktsiooni punkt sisesta. Punkt(){ punkt ajutine; ajutine. x = 5; ajutine. y = 7; return ajutine; } Risto Heinsar & Ott Madis Ozolit 4

Näide 2 1 #include <stdio. h> 2 #include <math. h> 3 4 typedef struct

Näide 2 1 #include <stdio. h> 2 #include <math. h> 3 4 typedef struct { 5 int x, y; 6 } punkt; 7 8 punkt sisesta. Punkt(int nr); 9 10 int main(){ 11 punkt sirge[2]; 12 sirge[0]=sisesta. Punkt(1); 13 sirge[1]=sisesta. Punkt(2); 14 printf("Loigu pikkus on %. 2 f", sqrt(pow(sirge[1]. x - sirge[0]. x, 2) + pow(sirge[1]. y - sirge[0]. y, 2))); 15 return 0; 16 } 17 18 punkt sisesta. Punkt(int nr){ 19 punkt ajutine; 20 printf("Sisesta punkti %d x ja y kordinaatn> ", nr); 21 scanf("%d %d", &ajutine. x, &ajutine. y); 22 return ajutine; 23 } 2013 Risto Heinsar & Ott Madis Ozolit 5

Viitamisega seotud operatsioonid • int *p • &muutuja • *p • p=&muutuja • *p=55

Viitamisega seotud operatsioonid • int *p • &muutuja • *p • p=&muutuja • *p=55 • printf("%p", p) • printf("%d", *p) 2013 // viida deklareerimine // muutujalt aadressi pärimine // viidatava väärtuse poole pöördumine // viidale muutuja aadressi omistamine // viidatavale mälupesale andmete kirjutamine // viidal salvestatud aadressi trükkimine // viidataval aadressil olevate andmete trükkimine Risto Heinsar & Ott Madis Ozolit 6

Viitadest visuaalselt #include <stdio. h> *p 0199 FF 8 A 2013 num 25 int

Viitadest visuaalselt #include <stdio. h> *p 0199 FF 8 A 2013 num 25 int main(void){ int num=25, *p; p=&num; return 0; } Risto Heinsar & Ott Madis Ozolit 7

Viidad ja massiivid visuaalselt *p int array[]={5, 3, 7, 3, 5}; int *p; p=array;

Viidad ja massiivid visuaalselt *p int array[]={5, 3, 7, 3, 5}; int *p; p=array; 48 F 9 AC 91 array[0] array[1] array[2] array[3] array[4] 5 3 7 3 5 *(p+0) *(p+1) *(p+2) *(p+3) *(p+4) 2013 Risto Heinsar & Ott Madis Ozolit 8

Viidad ja struktuurid • Struktuuridele annab samamoodi viidata struct tootaja{ int tootaja. Kood; char

Viidad ja struktuurid • Struktuuridele annab samamoodi viidata struct tootaja{ int tootaja. Kood; char eesnimi[20]; char perenimi[20]; float tunnitasu; }; struct tootaja indrek; struct tootaja *str. Ptr; str. Ptr=&indrek; 2013 Risto Heinsar & Ott Madis Ozolit 9

Viida kaudu pöördumine Need 2 kirjutusviisi on samaväärsed! (*str. Ptr). tootajakood; str. Ptr->tootajakood; (*str.

Viida kaudu pöördumine Need 2 kirjutusviisi on samaväärsed! (*str. Ptr). tootajakood; str. Ptr->tootajakood; (*str. Ptr). eesnimi; str. Ptr->eesnimi; (*str. Ptr). perenimi; str. Ptr->perenimi; (*str. Ptr). tunnitasu; str. Ptr->tunnitasu; Peab meeldima! 2013 Risto Heinsar & Ott Madis Ozolit 10

Näide 3 1 #include <stdio. h> 2 #include <string. h> 3 4 typedef struct{

Näide 3 1 #include <stdio. h> 2 #include <string. h> 3 4 typedef struct{ 5 int tootaja. Kood; 6 char eesnimi[20]; 7 char perenimi[20]; 8 float tunnitasu; 9 } tootaja; 10 11 void tryki. Info(tootaja *ptr); 12 13 int main(void) { 14 tootaja indrek={75, "Indrek", "Tamm", 2. 75}; 15 tryki. Info(&indrek); 16 return 0; 17 } 18 19 void tryki. Info(tootaja *ptr){ 20 printf("Tootaja %06 d, %s %s teenib tunnis %2. 2 f", 21 22 2013 ptr->tootaja. Kood, ptr->eesnimi, ptr->perenimi, ptr->tunnitasu); } Risto Heinsar & Ott Madis Ozolit 11

Tunnitöö • Loe sisse failidest ja salvesta struktuuridesse: • Tooted – tootekood, toote nimetus

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! 2013 Risto Heinsar & Ott Madis Ozolit 12