Sono una studentessa di un liceo, stiamo facendo le basi del linguaggio C.
La richiesta dell'esercizio è quella di creare un programma in C che risolva un'equazione col metodo della bisezione.
Ho impostato il programma in questo modo, ma funziona solo quando gli pare.
Ad esempio, io pongo il grado a 2 e metto coefficienti 1 e 2, avendo quindi l'equazione x^2+2x=0. Nel momento in cui metto intervallo (-1;-5) mi trova la soluzione -2, se al contrario metto intervallo (-5;-1) (che ha comunque più senso visto che -5<-1) non funziona. Si blocca proprio il programma prima di arrivare alla fine del codice. Idem se metto valori intervallo tipo (-1,2)..
#include <stdio.h>
#include <math.h>
int main()
{
int x=0;
int i=0;
float vett[100];
int n=1;
float a=0;
float b=0;
float fa=0; /*funzione in a*/
float fb=0; /*funzione in b*/
float m=0;
float fm=0; /*funzione in m*/
float fm_1=0;
float prod;
printf("Inserire Il grado della funzione ");
scanf("%d",&x);
for(i=x; i>0; i--)
{
printf("Inserisci il coefficiente n %d: ",n);
n+=1;
scanf("%f",&vett[i]);
}
printf("\nInserisci l'estremo sinistro a dell'intervallo: ");
scanf("%f",&a);
printf("Inserisci l'estremo destro b dell'intervallo: ");
scanf("%f",&b);
for(i=x; i>0; i--)
{
fa+=vett[i]*pow(a,i);
fb+=vett[i]*pow(b,i);
}
printf("\nLa funzione in a vale %f",fa);
printf("\nLa funzione in b vale %f",fb);
prod=fa*fb;
if((fa*fb)<0)
{
do {
fa=0;
fb=0;
fm_1=0;
for(i=x; i>0; i--)
{
fa+=vett[i]*pow(a,i);
fb+=vett[i]*pow(b,i);
}
m=(a+b)/2;
for(i=x; i>0; i--)
{
fm_1+=vett[i]*pow(m,i);
}
if((fm*fa)>0)
a=m;
else
b=m;
fm=fm_1;
}
while(fm!=0);
printf("\nLa soluzione nell'intervallo e' x=%f\n",m);
}
else
{
printf("\nNon ci sono soluzioni nell'intervallo inserito\n");
}
return 0;
}