Ecco un esempio pratico di applicazione dei suggerimenti che ho dato:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define LMAX 100
#define EPSILON 1.0e-5
int equal (double a, double b)
{
return b >= a-EPSILON && b<= a+EPSILON;
}
int main()
{
int a, b, c;
float x1, x2,delta;
char buffer[LMAX];
printf("Inserire il valore di a:\n");
fgets(buffer,100,stdin);
a=atoi(buffer);
printf("Inserire il valore di b:\n");
fgets(buffer,100,stdin);
b=atoi(buffer);
printf("Inserire il valore di c:\n");
fgets(buffer,100,stdin);
c=atoi(buffer);
if(a==0)
{
printf("Risultato: %f\n", -(double)c/b);
}
else
{
delta=pow(b,2.0) - 4 * a * c;
if(equal(delta,0.0))
{
printf("Risultato: %f\n", -(double)b/ (2*a));
}
else if(delta < 0.0)
{
printf("Non ci sono risultati\n");
}
else
{
x1= (-b + sqrt(delta)) / (2*a);
x2= (-b - sqrt(delta)) / (2*a);
printf("Risultati:\n1) %f\n1) %f\n",x1,x2);
}
}
return 0;
}
Viene un codice più leggibile e scritto in meno righe.
PS: La funzione equal non è delle migliori, l' ho scritta così solo per brevità.