E' da un bel po che devo scrivere un programma che mi calcoli la radice cubica di un qualsiasi float inserito dall'utente a tempo di esecuzione.
Allora sono partito dall'idea di usare il metodo dicotomico,in questo modo:
x e' la radice cubica del numero y ( x = y^(1/3) )
Elevo entrambi i membri al cubo: x^3 = y
e quindi arrivo all'equazione x^3 -y = 0
con y come parametro e parto da qui.
Definisco una costante ERR:
#define ERR 0.00001
e dichiaro:
float a,b,m,y;
float fa,fb,fm;
Una bozza di codice potrebbe essere questa:
nel modello da cui ho tratto spunto e che serviva a trovare lo zero di una funzione, nel blocco che fa riferimentocodice:printf("Inserire y: "); scanf("%f",&y); /* validita a e b */ do { printf("Inserire a: "); scanf("%f",&a); printf("Inserire b: "); scanf("%f",&b); fa=a*a*a-y; /* calcolo di f per x=a */ fb=b*b*b-y; /* calcolo di f per x=b */ } while (fa*fb>0); /* calcolo zero f */ do { m=(a+b)/2; fm=m*m*m-y; /* calcolo di f per x=m */ if (fm!=0) { fa=a*a*a-y; /* calcolo di f per x=a */ fb=b*b*b-y; /* calcolo di f per x=b */ if (fa*fb<0) b=m; else a=m; } } while (fabs(fm)>ERR);
a if (fm!=0) come ultima istruzione c'era un secondo fm=m*m*m-y; /* calcolo di f per x=m */
che ho eliminato perche' secondo me non aveva senso.
Avevo fatto anche un disegno a mano libera, per capire come doveva essere impostato il programma.
Il mio dubbio riguarda principalmente la parte sulla validita' di a e b:
cioe' l'utente come fa a capire come mettere gli a e b giusti in modo da ottenere gli fa e fb discordi, per poi cosi cominciare con il metodo dicotomico?
C'e' un modo carino per risolvere questa cosa anche dal punto del dialogo del programma con l'utente?
Vi ringrazio se vorrete rispondere.

Rispondi quotando
(scherzo, ho capito)
