Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Salve a tutti!
Forum - C/C++ - Salve a tutti!

Avatar
Erica (Normal User)
Newbie


Messaggi: 5
Iscritto: 23/11/2012

Segnala al moderatore
Postato alle 12:01
Venerdì, 23/11/2012
Salve a tutti! Navigando per internet in cerca di spiegazioni sulla programmazione in C++ mi sono imbattuta in questo, devo proprio dire, bel sito!

Spero di non aver sbagliato luogo di post in cui inserire questa mio breve quesito. (in realta' ne avrei tanti!!! :) ) Ad ogni modo all'universita' due o tre settimane fa ci avevano dato un esercizio nella quale bisognava fare la serie di fibonacci e in seguito calcolarne il rapporto tra il risultato e quello finale. In aula c'ero riuscita, ma ieri sera ho provato a rifarlo ed il risultato e' stato un risultato sbagliato! Posto qui quel che ho scritto nel terminale, perche' vorrei proprio capire dove sbaglio e perche'! Grazie a mille di tutto!!! P.S. il rapporto dovrebbe essere 1.6 ma a me viene 1: ho provato a inserire a posto di i++/i la variabile double rapp = i++/i ma quel che viene fuori e' sempre 1.

#include <iostream>

int main()
{
using namespace std;

int f0 = 0;
int f1 = 1;
int i = f0+f1;
int n;

cout << "Inserisci il valore della serie a cui vuoi arrivare " ;
cin >> n;

for (int k=1; k<n; k++) {
   i= f0+f1;
   f0=f1;
   f1=i;
   cout << i << endl;
      cout << "e il rapporto " << i++/i << endl;}

return 0;
}




PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 15:13
Venerdì, 23/11/2012
Benvenuta! :k:

Il programma ti da come rapporto 1 perché esegui una divisione tra due int; e di conseguenza anche il risultato sarà int. Per rimediare, basta un cast:

Invece di
Codice sorgente - presumibilmente Plain Text

  1. cout << i << endl;
  2.       cout << "e il rapporto " << i++/i << endl;

scriverai
Codice sorgente - presumibilmente Plain Text

  1. cout << i << endl;
  2. cout << "e il rapporto " <<(double) i/f0 << endl;



Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
Erica (Normal User)
Newbie


Messaggi: 5
Iscritto: 23/11/2012

Segnala al moderatore
Postato alle 12:49
Domenica, 25/11/2012
Ok! Infatti inizialmente avevo scritto, sempre rimanendo nel ciclo for,

double rap = i\i--;

il rapporto era sempre 1 però. La mia domanda quindi è questa: la variabile decrementata, quindi i-- , perchè non viene considerata tale? nel senso se prendo i = 3, i-- dovrebbe essere 2 (se andiamo a ritroso nella serie di fibonacci). Se però inizializzo il rapporto come i\i-- e mi stampa nell'output 1 significa che considera i ed i-- lo stesso numero. (questa è l'unica giustificazione che mi viene in mente!) .
Di nuovo: grazie di tutto per la risposta e per tutti i chiarimenti che mi darete: sono davvero importanti! (Soprattutto per una incapace come me !!! :) )

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:14
Domenica, 25/11/2012
Certamente, il rapporto sara sempre 1, perché usi l' incremento post fisso, di conseguenza prima legge il valore di i e poi lo incrementa o decrementa.
In ogni caso, la variabile i è superflua.
La successione di Fibonacci è una successione in sequenza di numeri interi naturali ciascun numero della quale è il risultato della somma dei due precedenti.


Nulla va più veloce della luce, quindi rilassati.
PM Quote