Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113

    [C] Calcolo media di vettore

    Ciao a tutti..ragazzi qualcuno sa dirmi perche pure dichiarando MEDIA come float, risultato che mi stampa di MEDIA è sempre con le 2 cifre a destra della virgola pari a 0 ????
    codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    #define n 30
    
    
    int main()
    {
        int BETA[n];
        int N, i, MIN, MAX, somma;
        float MEDIA;
    
        printf("Inserisci la dimensione del vettore : \n");
        scanf("%d", &N);
    
        /* LEGGE I NUMERI E LI METTE NEL VETTORE */
        if ( N >= 3 && N <= 20 ) {
            for ( i = 0; i < N; i++ ) {
                printf("Inserisci l'elemento [%d]\n", i );
                scanf("%d", &BETA[i] );
            }
            printf("\n\n");
    
        /* STAMPA IL VETTORE BETA */
            printf("Il vettore BETA è : \n");
            for ( i = 0; i < N; i++ ) {
                printf("%d", BETA[i] );
                printf("\t");
            }
            printf("\n\n");
    
        /* RICERCA IL VALORE MINIMO */
            MIN = BETA[0];
            for ( i = 1; i < N; i++ ) {
                if ( MIN > BETA[i] ) {
                    MIN = BETA[i];
                }
            }
            /* STAMPA IL VALORE MINIMO */
            printf("Il valore minimo è : %d\n", MIN);
    
            printf("\n\n");
    
            /*RICERCA DEL VALORE MASSIMO */
            MAX = BETA[0];
            for ( i = 1; i < N; i++ ) {
                if ( MAX < BETA[i] ) {
                    MAX = BETA[i];
                }
            }
            /* STAMPA IL VALORE MASSIMO */
            printf("Il valore massimo è : %d\n", MAX);
    
            printf("\n\n");
    
            somma = 0;
            for ( i = 0; i < N; i++ ) {
                somma += BETA[i];
            }
            MEDIA = (somma / N);
    
            printf("%d", somma);
    
            printf("Il valore medio è : %.2f\n", MEDIA);
    
    
    
    
        } /* fine ramo if */
    
    
    return 0;
    }

  2. #2
    il tipo di (somma / N) è INT perchè INT sono i due operandi.

    dovresti fare ((float)somma / (float) N)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Originariamente inviato da Andrea Simonassi
    il tipo di (somma / N) è INT perchè INT sono i due operandi.

    dovresti fare ((float)somma / (float) N)
    Ho dichiarato anche somma come float ed ho risolto.
    In questo caso in termini di tempo, eleborazione, occupazione della memoria quale delle 2 soluzioni è più conveniente ?

  4. #4
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da sizeof
    Ho dichiarato anche somma come float ed ho risolto.
    In questo caso in termini di tempo, eleborazione, occupazione della memoria quale delle 2 soluzioni è più conveniente ?
    Per quanto ne so io, se i cast si possono evitare (soprattutto in un caso base come questo) è sempre meglio. Rispecchiano una progettazione dell'applicazione poco attenta (così mi è stato sempre insegnato). Ovviamente, ci saranno le dovute eccezioni, suppongo.

  5. #5
    In generale il calcolo fp è in più lento ed usa più risorse di quello int, ma l'unico modo è fare delle prove misurando il tempo ed il consumo di memoria delle due varianti su diversi hardware.

    Ma detto tra noi è meglio lasciare che sia il compilatore ad ottimizzare dove può, abitualmente si usa dire che è meglio evitare di ottimizzare prima che sia strettamente necessario, secondo alcuni ottimizzare prima che sia necessario è un anti-pattern.

    http://c2.com/cgi/wiki?PrematureOptimization

  6. #6
    Originariamente inviato da goatboy
    Per quanto ne so io, se i cast si possono evitare (soprattutto in un caso base come questo) è sempre meglio. Rispecchiano una progettazione dell'applicazione poco attenta (così mi è stato sempre insegnato). Ovviamente, ci saranno le dovute eccezioni, suppongo.
    Se hai in input degli int e devi ottenere float in output il cast è necessario, che sia implicito o esplicito, entrambe le soluzioni hanno un cast, solo che la soluzione A fa un solo cast alla fine, la soluzione B fa il cast ad ogni iterazione del loop.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Ok chiaro. Grazie a tutti!

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.