Sei sulla pagina 1di 2

#include <iostream>

#include <cmath>
using namespace std;
float a,b,c,d,ERR,MIN,MAGG,INCR,S,Pmin,Pmagg,Pk,k,r,val_sep;
int main () {

cout << "Questo programma permette di calcolare uno zero approssimato di


un polinomio di terzo grado entro un'errore specificato.\n";
cout << "Ricordiamo che il polinomio deve essere scritto nella forma: a·x^
3+b·x^2+c·x+d \n";
cout << "Il programma potrebbe non riuscire a trovare nessuno zero entro
il range di ricerca predefinito (-1000 = x = 1000).\n";
do{ //Ciclo di ripetizione
do { //Richiesta co
efficienti
cout << "Inserisca il coefficiente a: ";
cin >> a;
if(a==0) {
cout << "Il coefficiente a deve essere diverso da 0!\n";
}
}while(a==0);
cout << "Inserisca coefficiente b: ";
cin >> b;
cout << "Inserisca coefficiente c: ";
cin >> c;
cout << "Inserisca il termine noto d: ";
cin >> d;
do {
cout << "Inserisca un valore di approssimazione (diverso da 0) p
er la ricerca: ";
cin >> ERR;
if(ERR==0) {
cout << "Il fattore di approssimazione non può essere 0.\n
"; }
}while(ERR==0);

if(d==0) {
cout << "0 è uno zero del polinomio dato, poiche con d=0,
P(0)=0.\n"; }
else{
MIN=-1000; //Inizializzazione delle variabili
MAGG=-1000;
INCR=0.1;
S=0;
do{ //Ciclo di separazione
MAGG=MAGG+INCR;
if(MAGG<=1000) {
Pmin=a*MIN*MIN*MIN+b*MIN*MIN+c*MIN+d;
Pmagg=a*MAGG*MAGG*MAGG+b*MAGG*MAGG+c*MAG
G+d;
if(fabs(Pmagg)<=ERR) {
val_sep=MAGG;
cout << val_sep << " è uno zero de
l polinomio dato.\n";
S=2; }
}
else{
S=1; }
}while(Pmin*Pmagg>0 && S==0);

if(S==0) {
do{ //Ciclo di bisezione
k=(MIN+MAGG)/2;
Pk=a*k*k*k+b*k*k+c*k+d;
if(Pk*Pmin>0) {
MIN=k; }
else {
MAGG=k; }
}while(fabs(Pk)>=ERR);
cout << k << " è lo zero approssimato a meno dell'
errore. \n"; }
else {
if(S==1) {
cout << "Nessuno zero del polinomio dato
è presente nel range di ricerca -1000 = x = 1000. \n"; }
}
}
cout << "Vuole riutilizzare il programma? Sei sì, digiti 1, altrim
enti 0: ";
cin >> r;
if(r!=1) {
cout << "Arrivederci!"; }
}while(r==1);
}