PDA

Visualizza la versione completa : [C++] esercizio metodo di bisezione


saruccina27
01-06-2010, 11:58
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



#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);
}

LeleFT
01-06-2010, 14:34
Benvenuto nel forum.
Ti invito fin da subito a prendere visione del Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887), dove sono specificati alcuni punti importanti per l'apertura di nuove discussioni.

In particolare, l'uso dei tag CODE per il posting del codice (punt 6).

Correggo io, se il codice è indentato.

Ad ogni modo, per vedere se funziona o meno, la cosa più semplice e d'obbligo è compilarlo ed eseguirlo, per valutarne gli output.


Ciao. :ciauz:

oregon
01-06-2010, 14:38
Se correggi/aggiungi le linee

#include <iostream>

using namespace std;

int main()

allora il programma viene compilato correttamente.

Non so se è giusto perchè non ho avuto anche il tempo di provarlo.

MItaly
01-06-2010, 14:47
Programmare senza avere un compilatore con cui provare è davvero difficile; anche se non puoi propriamente installare un compilatore sul tuo PC, puoi sempre usare una versione portable (http://portableapps.com/node/4142) di MinGW.

Per caso frequenti il Volta di Milano?

Loading