Programma che non va.

di Anonimizzato13124 il
17 risposte
Creare un programma che allochi in maniera dinamica un vettore di 1000 valori di tipo
double. Il programma inizializzi il vettore con valori pseudo-casuali tra 0.0 e 1.0 e ne calcoli la somma e la media.


#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>


#define N 10

void stampavettore(float vect[N]);
     main() {
        
        int i;
        float somma;
        float media ;
        somma=0.00;
        media=0.00;
        float vect[N];
        srand(time(NULL));
        for(i=0;i<N;i++)
        //vect[i]=rand()%5;
        vect[i]=fmod(rand(),(3));
        
        printf("\n Genero un vettore di dimensioni %f:\n\n",N);
        stampavettore(vect);
        for(i=0;i<N;i++)
        somma=somma+vect[i];
      
        media=(somma)/(N);
      
        printf("\n\nSomma=%f\tMedia%f\n\n",somma,media);
        getchar();
        }
        
        
        
        
        
        
        void stampavettore(float vect[N])
{
     int i;
     for(i=0;i<N;i++){
     
                     printf("%4f",vect[i]);
                     printf("\n\n");
                     }                                    
     
}


Il programma entra in esecuzione perfettamente , solo che i valori che mi stampa sullo schermo sono tutti : 0.0000., e anche la somma e la media ovviamente viene stampata 0.00000.
Qualcuno sa dirmi il perchè o indicarmi la retta via ? grazie

17 Risposte

  • Per cominciare l'esercizio parla di

    double

    e di "allocazione dinamica"

    ma non ne vedo né i double né l'allocazione dinamica
  • Erroraccio sui double , hai ragione , ma per quanto riguarda l'allocazione dinamica io ho pensato di risolvere con un ciclo for !!
  • Cosa c'entra l'allocazione dinamica con il ciclo for ?
  • Non ho capito..
  • Hai scritto

    "per quanto riguarda l'allocazione dinamica io ho pensato di risolvere con un ciclo for !!"

    e non capisco cosa c'entri l'allocazione dinamica e il ciclo for ...
  • Sisi ho capito, sono totalmente fuori strada!!!
  • #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    main()
    {
    double *a;
    int i,n;
    int b;
    double somma,media;
    srand(time(NULL));
    somma=0.0;
    media=0.0;
    
    printf("Immettere dimensione: ");
    scanf("%d",&n);
    
    a=(double*)malloc(n*sizeof(double));
    for(i=0;i<=n;i++)
    {
    b=rand();
    a[i]=b;}
    
    for(i=0;i<n;i++)
    somma=somma+a[i];
    
    media=somma/n;
    
    printf("Somma=%lf\tMedia=%lf\n\n",somma,media);
    
    
    system("pause");
    }
    Come mai l'exe per somma e media mi da numeri del genere: '' 95467.0000''?
    Adesso l'allocazione penso ci sia... :/
  • Adesso va bene l'allocazione dinamica (con la malloc) ma l'esercizio ti chiede

    1000

    elementi molto chiaramente, non ti chiede n elementi da far decidere all'utente !
  • Oregon ma come mai quando mando in exe il programma visualizzo cifre per la somma e la media del genere:'' 108185.0000'', ''21637.000''? ??
    Io per semplicità ho inserito N=5 per avere dimensioni ridotte ma visualizzo sempre lo stesso problema!!!
  • Intanto deve essere

    for(i=0;i<n;i++)

    e non

    for(i=0;i<=n;i++)

    Il problema dei valori è causato dalla

    b=rand();

    dato che rand restituisce un valore intero compreso tra 0 e 32767

    Se devi ridurlo a 0 o 1 devi scrivere

    b=rand() % 2;
  • Si adesso funziona perfettamente , ti ringrazio moltissimo oregon
  • Sì però l'esercizio voleva dei double ... quindi penso volesse dei valori random compresi tra 0 e 1, anche 0.4 o 0.5 ...

    Quindi

    a=((double) rand() / (RAND_MAX+1)) ;
  • @Oregon ma devo impostare minimo massimo somma media a double?
  • .
Devi accedere o registrarti per scrivere nel forum
17 risposte