FagioloOne
21-02-2007, 16:56
Sono costretto per motivi scolastici da portare questo programma dal c++ al python.
Il programma calcola i possibili zeri di una funzione all'interno di un intervallo chiuso.
scritto in c++
//metodo di bisezione o dicotomico
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
double funzione( double );
int main() {
double a, b, c, tolleranza, scarto;
int n, nMax;
cout <<"Inserire i valori dell'intervallo\n";
cin >> a;
cin >> b;
cout <<"Inserire la tolleranza\n";
cin >> tolleranza;
cout <<"Inserire il numero max di cicli\n";
cin >> nMax;
n = 0;
scarto = abs ( b - a );
while ( n < nMax ) {
if ( scarto <= tolleranza ) {
cout <<"Zero "<<c <<"\n";
break;
}
else {
n++;
c = ( a + b ) / 2;
if ( (funzione(a) * funzione (c) )< 0 )
b = c;
else
a = c;
}
scarto = abs ( b - a );
}
}
double funzione( double q ){
return pow (q, 2 ) + 2* q -3;
}
scritto in python
#metodo dicotomico o di bisezione
import math
def funzione ( q ):
return pow (q, 2) + 2* q -3
a = input( "primo valore dell'intervallo ")
b = input("secondo valore dell'intervallo ")
tolleranza = input("Tolleranza ")
nMax = 900
if (funzione(a) * funzione(b) > 0 ):
print "Dentro l'intervallo da lei selezionato non ci sono zeri o ce ne sono piu' di uno\n"
else :
n = 0
scarto = abs( b - a)
while (n < nMax):
if ( scarto <= tolleranza ):
print c
break
else:
print "caio"
n = n + 1
c = ( a + b ) / 2
if ((funzione(a) * funzione (c)) < 0 ):
b = c
else:
a = c
scarto = fabs ( b - a )
Se qualcuno di buona volonta riesce a farmi capire perchè in python non funziona e a dirmi
dove è l'errore o errori sarei molto grato.
Grazie a tutti per le eventuali risposte
Il programma calcola i possibili zeri di una funzione all'interno di un intervallo chiuso.
scritto in c++
//metodo di bisezione o dicotomico
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
double funzione( double );
int main() {
double a, b, c, tolleranza, scarto;
int n, nMax;
cout <<"Inserire i valori dell'intervallo\n";
cin >> a;
cin >> b;
cout <<"Inserire la tolleranza\n";
cin >> tolleranza;
cout <<"Inserire il numero max di cicli\n";
cin >> nMax;
n = 0;
scarto = abs ( b - a );
while ( n < nMax ) {
if ( scarto <= tolleranza ) {
cout <<"Zero "<<c <<"\n";
break;
}
else {
n++;
c = ( a + b ) / 2;
if ( (funzione(a) * funzione (c) )< 0 )
b = c;
else
a = c;
}
scarto = abs ( b - a );
}
}
double funzione( double q ){
return pow (q, 2 ) + 2* q -3;
}
scritto in python
#metodo dicotomico o di bisezione
import math
def funzione ( q ):
return pow (q, 2) + 2* q -3
a = input( "primo valore dell'intervallo ")
b = input("secondo valore dell'intervallo ")
tolleranza = input("Tolleranza ")
nMax = 900
if (funzione(a) * funzione(b) > 0 ):
print "Dentro l'intervallo da lei selezionato non ci sono zeri o ce ne sono piu' di uno\n"
else :
n = 0
scarto = abs( b - a)
while (n < nMax):
if ( scarto <= tolleranza ):
print c
break
else:
print "caio"
n = n + 1
c = ( a + b ) / 2
if ((funzione(a) * funzione (c)) < 0 ):
b = c
else:
a = c
scarto = fabs ( b - a )
Se qualcuno di buona volonta riesce a farmi capire perchè in python non funziona e a dirmi
dove è l'errore o errori sarei molto grato.
Grazie a tutti per le eventuali risposte