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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Dacã cei doi operanzi diferã ca tip atunci tipul “inferior” este automat promovat la<br />

tipul “superior” <strong>în</strong>ainte de efectuarea operatiei. Un tip T1 este superior unui tip T2<br />

dacã toate valorile de tipul T2 pot fi reprezentate <strong>în</strong> tipul T1 fãrã trunchiere sau<br />

pierdere de precizie. Ierarhia tipurilor aritmetice din C este urmãtoarea:<br />

char < short < int < long < long long < float < double < long double<br />

Subexpresiile cu operanzi <strong>în</strong>tregi dintr-o expresie care contine si reali au rezultat<br />

<strong>în</strong>treg, deoarece evaluarea subexpresiilor se face <strong>în</strong> etape. Exemple:<br />

float x = 9.8, y = 1/2 * x; // y=0.<br />

y= x / 2; // y=4.9;<br />

In <strong>limbajul</strong> C existã operator de atribuire ‘=‘, iar rezultatul expresiei de atribuire<br />

este valoarea atribuitã (copiatã). In partea stângã a unei atribuiri se poate afla o<br />

variabilã sau o expresie de indirectare printr-un pointer; <strong>în</strong> partea dreaptã a<br />

operatorului de atribuire poate sta orice expresie. Exemple:<br />

k=1; i=j=k=0; d = b*b-4*a*c; x1=(-b +sqrt(d))/(2*a);<br />

La atribuire, dacã tipul pãrtii stânga diferã de tipul pãrtii dreapta atunci se face<br />

automat conversia de tip (la tipul din stânga), chiar dacã ea necesitã trunchiere sau<br />

pierdere de precizie. Exemplu:<br />

int a; a= sqrt(3.); // a=1<br />

Exemplu de conversii dorite de programator:<br />

float rad,grd,min; // radiani, grade, minute<br />

int g,m; // nr intreg de grade, minute<br />

grd = 180*rad/M_PI; // nr de grade (neintreg)<br />

g=grd; // sau g= (int)grd;<br />

min=60*(grd-(float)g); // min=60*(grd-g)<br />

m=min; // sau m= (int)min;<br />

Conversiile automate pot fi o sursã de erori (la executie) si de aceea se preferã<br />

conversii explicite prin operatorul de conversie (“cast”= fortare tip), care are forma<br />

(tip) si se aplica unei expresii. Exemple:<br />

float x; int a,b;<br />

x= (float)a/b; // câtul exact<br />

float x; int k;<br />

k= (int)(x+0.5); // rotunjire x la intregul apropiat

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

Saved successfully!

Ooh no, something went wrong!