annuncio

Comprimi
Ancora nessun annuncio.

Problema C

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • Problema C

    Dunque io devo fare questo:

    Far calcolare ad un programma quanti termini sono necessari perche'
    |a(n-1)/a(n) -g | < epsilon con:
    epsilon = 1.E-5
    e a(n-1)/a(n) che è il rapporto tra il valore i-esimo di fibonacci e il suo precedente.

    io ho fatto il codice C cosi':

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    #define epsilon 1.e-12
    
    int fibonacci_iterativo(int val);
    
    int main()
    {
        
        double a, b, c, g;
        int  i, val, count;
    
        printf("Epsilon vale: %.12lf \n", epsilon);
        g = (sqrt(5.0) - 1 )/2;
        printf("G Vale: %.12f \n", g);
        
    
        i=1;
        a = fibonacci_iterativo(i);
        b = fibonacci_iterativo(i-1);
        c = ((b)/a);
        while ((abs(c-g)) < epsilon )
         {
          count = count +1;
          i=i+1;
          a = fibonacci_iterativo(i);
          b = fibonacci_iterativo(i-1);
          c = ((b)/a);
         } 
         
    
         printf("Contatore: %d\n", count);
    } 
    /*Funzione Iterativa Fibonacci*/ 
    
    int fibonacci_iterativo(int val)
     {
      int d, e, f;
    
      d=0;
      e=1;
    
      while (val > 0) 
      {
        f = d + e; 
        d = e;
        e = f;
        val = val-1;
      }
    
      return (d);
     }
    Ho fatto la funzione iterativa per il calcolo del valore di fibonacci e il suo precedente, e ho provato a fare il while per fare il confronto con il segno < e fare un count per aumentare di 1 ad ogni valore minore dell'epsilon dal primo valore della successione... solo che nn riesco ad andare avanti

    Help Me pls

  • #2
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    #define epsilon 1.e-12
    
    int fibonacci_iterativo(int val);
    
    int main()
    {
        
        double a, b, c, g;
        int  i, count = 0;
    
        printf("Epsilon vale: %.12lf \n", epsilon);
        g = (sqrt(5.0) - 1 )/2.0;
        printf("G Vale: %.12f \n", g);
        
    
        i=1;
        a = fibonacci_iterativo(i);
        b = fibonacci_iterativo(i-1);
        c = (b/a);
        while ((fabs(c-g)) > epsilon)
         {
          printf("a: %.12f\nb: %.12f\n",a,b);
          printf("c: %.12lf\nabs(c-g): %.12lf\n",c, fabs(c-g));
          count = count +1;
          i=i+1;
          a = fibonacci_iterativo(i);
          b = fibonacci_iterativo(i-1);
          c = (b/a);
         } 
         
         printf("Contatore: %d\n", count);
    } 
    /*Funzione Iterativa Fibonacci*/ 
    
    int fibonacci_iterativo(int val)
     {
      int f;
      int d = 0;
      int e = 1;
    
      while (val > 0) 
      {
        f = d + e; 
        d = e;
        e = f;
        val = val-1;
      }
    
      return (d);
     }
    La funzione abs(int n) accetta numeri interi, per i double c'e fabs(double x)
    In più era errato il verso del segno nel while e non avevi inizializzato la variabile count.
    In oltre ti consiglio di utilizzare un do while anziche un while.
    Ultima modifica di Met4llic4; 15-02-2008, 15:10.

    Commenta


    • #3
      Thx, alla fine ero riuscito a trovare gli errori

      Ora funziona per bene

      Ancora 1 domanda, come faccio per cronometrare in secondi o centesimi quanto tempo ci mette a fare delle operazioni?

      Commenta

      Sto operando...
      X