Ciao a tutti, devo presentare un programma che utilizzi il metodo di bisezione per trovar gli zeri nelle funzioni polinomiche di terzo grado.
Il programma l'avrei aahce fatto ma dopo qualche errore ho dovuto mollare il colpo e tornarmente a casa, il problema è che ora credo di averlo corretto bene ma non ho un pc per testarlo, sto scrivendo da uno non mio su cui non posso installare nulla!!
So che è una scemenza, ma qualcuno sarebbe così cortese da dargli un'occhiata e dirmi se funziona?
grazie mille in anticipo!!
Sara
codice:
#include <cmath>
#include <iostream.h>
#include <stdlib.h>
main()
{ float precis, y, a, estrinf, estrsup, b, z, e, f, g, h;
cout<< "il programma restituisce gli zeri di una funzione di terzo grado/n";
cout<< "inserisci il coefficente di terzo grado della funzione/n"; // assegnazione funzione 3° grado
cin>> e;
cout<< "inserisci il coefficente di secondo grado della funzione";
cin>> f;
cout<< "inserisci il coefficente di primo grado della funzione";
cin>> g;
cout<< "inserisci il termine noto della funzione";
cin>> h;
cout << " inserisci l'estremo inferiore"; //assegnazione estremi
cin>> estrinf;
cout << " inserisci l'estremo superiore";
cin>> estrsup;
if (estrinf*estrsup>0) //controllo validità estremi
{
cout<<"estremi non validi \n";
system("PAUSE");
do
{ cout << " inserisci l'estremo inferiore";
cin>> estrinf;
cout << " inserisci l'estremo superiore";
cin>> estrsup;
if (estrinf*estrsup>0)
{
cout<<"estremi non validi \n";
}
} while (estrinf*estrsup>0);
}
cout << " inserisci la precisione"; // assegnazione precisione
cin>> precis;
a=(estrsup+estrinf)/2;
b=estrinf;
y=e*pow(a,3)+f*pow(a,2)+g*pow(a,1)+h; //calcolo funzione
z=e*pow(b,3)+f*pow(b,2)+g*pow(b,1)+h;
if (y*z>0) // calcolo zero approssimato tramite bisezione
{
estrinf=a;
estrsup=estrsup;
}
else
{
estrinf=estrinf;
estrsup=a;
};
do
{
a=(estrsup+estrinf)/2;
b=estrinf;
y=e*pow(a,3)+f*pow(a,2)+g*pow(a,1)+h;
z=e*pow(b,3)+f*pow(b,2)+g*pow(b,1)+h;
if (y*z>0)
{
estrinf=a;
estrsup=estrsup;
}
else
{
estrinf=estrinf;
estrsup=a;
};
} while (y> precis || -y>precis);
cout<< "lo zero della funzione richiesta e' " << a << "\n"; //output zero della funzione
cout<<"\n";
system("PAUSE");
return (0);
}