|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Città: Venezia
Messaggi: 160
|
Aiuto da c++ a python
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Il codice python che hai scritto lavora solo su interi.
In particolare con c = ( a + b ) / 2 fai una divisione senza resto tra interi. Un primo passo e' quello di forzare il risultato a virgola mobile con un c = ( a + b ) / 2.0 Questo dovrebbe aiutare
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Città: Venezia
Messaggi: 160
|
molte grazie della risposta adesso funziona tutto alla perfezione.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:28.



















