17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

}<br />

sprintf (result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",wday[tp→tm_wday],<br />

mon[tp→tm_mon], tp→tm_mday, tp→tm_hour, tp→tm_min, tp→tm_sec,<br />

1900 + tp→tm_year);<br />

return result;<br />

Pe de altã parte, functiile cu argumente pointeri la structuri, ca si functiile cu<br />

argumente de orice tip pointer, pot produce efecte secundare (laterale) nedorite, prin<br />

modificarea involuntarã a unor variabile din alte functii (pentru care s-a primit adresa).<br />

Structuri cu continut variabil<br />

Cuvântul cheie union se foloseste la fel cu struct, dar defineste un grup de variabile<br />

care nu se memoreazã simultan ci alternativ. In felul acesta se pot memora diverse<br />

tipuri de date la o aceeasi adresã de memorie. Alocarea de memorie se face (de cãtre<br />

compilator) <strong>în</strong> functie de variabila ce necesitã maxim de memorie. O uniune face parte<br />

de obicei dintr-o structurã care mai contine si un câmp discriminant, care specificã<br />

tipul datelor memorate (alternativa selectatã la un moment dat). Exemplul urmãtor<br />

aratã cum se poate lucra cu numere de diferite tipuri si lungimi, reunite <strong>în</strong>tr-un tip<br />

generic :<br />

// numar de orice tip<br />

struct numar {<br />

char tipn; // tip numar (un caracter)<br />

union {<br />

int ival; long lval; float fval; double dval;<br />

} v;<br />

};<br />

// afisare numar<br />

void write (struct numar n) {<br />

switch (n.tipn) {<br />

case 'i': printf ("%d ",n.v.ival);break;<br />

case 'l': printf ("%ld ",n.v.lval);break;<br />

case 'f': printf ("%f ",n.v.fval);break;<br />

case 'd': printf ("%.15lf ",n.v.dval);break;<br />

}<br />

}<br />

int main () {<br />

struct numar a,b,c,d;<br />

a = read('i'); b=read('l');<br />

c = read('f'); d=read('d');<br />

write(a); write(b); write(c); write(d);<br />

}<br />

Pentru câmpul discriminant se poate defini un tip prin enumerare, împreunã cu<br />

valorile constante (simbolice) pe care le poate avea. Exemplu:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!