PDA

View Full Version : [C] Calcolo equazione quadratica


Bubblegum
01-02-2013, 17:44
#include <stdio.h>

float absoluteValue (float x) {
if (x < 0)
x = -x;
return x;
}


float squareRoot (float x) {

const float limit = 0.0001;
float guess = 1;
while (absoluteValue (guess * guess - x) >= limit)
guess = (x / guess + guess) / 2;
return guess;
}


int main (void) {

int a;
int b;
int c;
float det;
float root1;
float root2;

printf ("Inserisci variabile intera a: ");
scanf ("%i", &a);
printf ("Inserisci variabile intera b: ");
scanf ("%i", &b);
printf ("Inserisci variabile intera c: ");
scanf ("%i", &c);


det = (b * b) - (4 * (a * c));

root1 = ( -b + squareRoot (det)) / (2 * a);
root2 = ( -b - squareRoot (det)) / (2 * a);

if (det < 0)
printf ("Le radici sono immaginarie");
else
printf ("x1 = %f | x2 = %f \n", root1, root2);

return 0;

}

Qualcuno sa spiegarmi come mai quando eseguo riesco a inserire le variabili ma il resto del programma non viene eseguito?? Non riesco proprio a venirci fuori.. :confused:

kwb
01-02-2013, 20:47
L'ho provato. In realtà credo funzioni, l'ho debuggato un po' e ho notato che non riesco ad uscire da questo while:

float squareRoot (float x) {

const float limit = 0.0001;
float guess = 1;
while (absoluteValue (guess * guess - x) >= limit)
guess = (x / guess + guess) / 2;
return guess;
}

La condizione viene sempre soddisfatta, quindi va avanti all'infinito.
Cerca di capire tu perchè...
Io ti ho detto dove sbaglia :D

sottovento
01-02-2013, 20:55
Qualcuno sa spiegarmi come mai quando eseguo riesco a inserire le variabili ma il resto del programma non viene eseguito?? Non riesco proprio a venirci fuori.. :confused:

Non esci mai dal calcolo della radice quadrata. Non converge a nessun valore.
Prova a stampare ogni passo del ciclo

Bubblegum
02-02-2013, 10:39
Grazie mille a tutti e due, ho modificato un po' e risolto il problema ;)