#include #include /* Calcola b^2 - 4ac */ int delta(int a, int b, int c){ return b*b - 4 * a *c; } /* Data l'equazione a.x^2 + b.x + c = 0 con a,b,c interi e a != 0, calcola (se esistono) le soluzioni *x1 e *x2 e restituisce il numero k di soluzioni trovate (k=0,1,2) */ // NOTA: essendo k un numero piccolo, il tipo del valore restituito da root() // puo' essere char (anziche' int) int root(int a, int b, int c, double* x1, double *x2){ int d; double sqd; d = delta(a,b,c); if(d < 0) return 0; else if(d == 0){ *x1 = -b / 2*a; *x2 = *x1; return 1; } else{ sqd = sqrt(d); // NOTA: il compilatore inserisce un cast a dooble di d *x1 = (-b -sqd) / (2*a); *x2 = (-b +sqd) / (2*a); return 2; } } int main(){ int a,b,c,k; double x1,x2; scanf("%d", &a); while(a !=0){ scanf("%d%d",&b,&c); printf("a = %d, b = %d, c = %d -----> ",a,b,c); k = root(a,b,c,&x1,&x2); if(k == 0) printf("non ha soluzione\n"); else if(k == 1) printf("x1 = x2 = %.3f\n",x1); // stampa x1 usando 3 cifre decimali else // k == 2 printf("x1 = %.3f x2 = %.3f\n",x1,x2); scanf("%d", &a); } return 0; }