Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] Programma Fibonacci

    Salve ragazzi,
    il programma in questione deve restituire il numero della sequenza di fibonacci corrispondente al numero digitato dall'utente.
    Per lo più funziona, ma per alcuni valori ( 100 ad esempio ) il programma restituisce valori negativi (?). Inoltre per n=0 il programm oltre ad entrare nel ramo if corrispondente, va anche oltre e stampa ancora un numero negativo. Vi posto il codice:
    codice:
     #include<stdio.h>
    #include<stdlib.h>
    main()
    {
          int a,b,c,n,fn;
          a=0;
          b=1;
          c=2;
          scanf("%d", &n);
          if(n==0) printf("Il valore deve essere strettamente maggiore di 0\n ");
          if(n==1) fn=0;
          for(c=2;c<n;c++)
          { 
               fn= a+b;
               a=b;
               b=fn;
          }
          printf("Il valore corrispondente e' %d\n", fn);
          system("pause");
    }

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Innanzitutto la successione di fibonacci è definita anche per n=0.
    Poi tu se si inserisce un valore non valido stampi comunque il contenuto di fn.
    Il perchè dei valori negativi penso sia dovuto al fatto che un intero può memorizzare al massimo 32 bit, di cui 1 bit per il segno.Cioè si può contare solo fino a 2^31-1, mentre se usi un unsigned int puoi contare fino a 2^32 -1.
    Io rifarei quel programma così:
    1)Calcolando il valore di fn in una funzione e non nella main;
    2)Con la funzione che restituisce un valore negativo in caso il numero inserito non sia valido;
    3)Stampando un errore se il numero inserito non è valido (senza stampare il valore di fn), o fn se il numero inserito è valido;
    4)Usando un unsigned int e calcolando qual'è il massimo n acettabile (che non causi un risultato maggiore di 2^32-1).

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ma allora come si spiega il fatto che per valori più grandi di 100 ( 200, per esempio) il programma restituisce valori nuovamente positivi?
    Per quanto riguarda il discorso dello 0: ho ragionato così, richiedere il valore della sequenza di fibonacci nel posto 0 equivale a chiedere il valore che precede il primo, il che non ha senso...va assegnato posto 0 al primo numero?

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ma la funzione di fibonacci è definita così:
    f(0)=1
    f(1)=1
    f(n)=f(n-1)+f(n-2)

    Rispondendo all'altra domanda, se ad esempio f(100) da un valore negativo altissimo, anche il minimo numero rappresentabile ha una limitazione inferiore.
    Per cui f(100)=f(99)+f(98) , f(99) e f(98) sono valori negativi molto alti, il che significa che andando avanti con f(101), f(102), ecc... prima o poi si arriverà a non poter rappresentare un valore negativo così grande, e si rincomincerà a contare da un numero positivo.
    Si chiama overflow quando a furia di sommare valori il numero diventa negativo, underflow il viceversa.

    Io comunque questa funzione ti consiglio di farla ricorsiva, perchè sai che:
    1)f(0)=1 , sarà un if(n==0) return 1;
    2)f(1)=1 , idem
    3)f(n)=f(n-2)+f(n-1) , allora se n sarà maggiore di 1 ritornerai f(n-1)+f(n-2)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Purtroppo questi sono i miei primi approcci all'informatica e ancora non ho approfondito la parte ricorsiva Comunque ti ringrazio, sei stato molto chiaro!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.