Successione

di il
2 risposte

Successione

Ho scritto il seguente semplice programma, ma il risultato che ottengo è una stampa con tutti zeri. Qualcuno sa dirmi il perché? Grazie.
#include <stdio.h>
#include <math.h>

main()
{

  int n;
  double x;

  n=0;
  x=1/2;

  while(n<100){
    x=x/(n+1)+(2*n+1)/(2*n+2);
    printf("%f\n", x);
    n=n+1;
  }

}

2 Risposte

  • Re: Successione

    Il problema dovrebbe essere relativo ad un utilizzo di interi dove invece bisognerebbe utilizzare un valore a virgola mobile.
    Hai due possibilità:
    - utilizzi un debugger e vedi un passo alla volta cosa succede
    - inserisci delle printf() nei punti chiavi
    #include <stdio.h>
    #include <math.h>
    
    main()
    {
      int n;
      double x;
      double tmp;
    
      n=0;
      x=1/2;
      printf("valore di partenza %f\n", x);
    
      while(n<100){
        tmp=(2*n+1)/(2*n+2);
        printf("tmp =%f\n", x);
        x=x/(n+1)+tmp;
        printf("x =%f\n", x);
        n=n+1;
      }
    }
  • Re: Successione

    Comunque il problema vedrai che è sulla prima divisione
    x=1/2;
    Dovresti riscriverla in questo modo
    x=1.0f/2;
    //oppure
    x=(double)1/2;
    altrimenti 1/2 viene eseguito su interi e quindi ottieni 0 intero, 0.0f convertito poi in double.
Devi accedere o registrarti per scrivere nel forum
2 risposte