Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C++]programma media

  1. #1

    [C++]programma media

    Salve, ho scritto questo programmino

    codice:
    //Esegue la media tra 5 numeri
    
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
         double media = 0.00;
         int val[5];
        
        cout << "Inserisci 5 numeri: \n";
    
        cout << ">> ";    cin >> val[0];    cout << "\n";
        cout << ">> ";    cin >> val[1];    cout << "\n";
        cout << ">> ";    cin >> val[2];    cout << "\n";
        cout << ">> ";    cin >> val[3];    cout << "\n";
        cout << ">> ";    cin >> val[4];    cout << "\n";
    
        media = abs(val[0] + val[1] + val[2] + val[3] + val[4])/5;
        
        cout << "\n";
        cout << "La media e' " << media;
     
        return 0;
    }
    nell'esecuzione il risultato è un numero intero e non numeri con la virgola... nonostante abbia impostato "media" come una variabile di tipo double.

    Come posso risolvere questo problema?

    grazie
    /*NO COMMENT*/

  2. #2
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    beh puoi provare a dichiarare anche l'array di int come double.
    oppure in alternativa:

    codice:
    media = abs((double) (val[0] + val[1] + val[2] + val[3] + val[4])) / 5.0;

  3. #3
    ok grazie, provo subito e vi faccio sapere
    /*NO COMMENT*/

  4. #4
    se dichiaro l'array val come double, il compilatore mi da questo errore:

    media.cpp call of overloaded `abs(double)' is ambiguous

    /*NO COMMENT*/

  5. #5
    codice:
    main() 
    {
    
      float media, valore[5];
      int i;
    
      printf ("Inserisci 5 numeri\n");
      
      for (i=0; i<5; i++) {
    
        scanf ("%f", &valore[i]);
    
      }
    
      media = (valore[0]+valore[1]+valore[2]+valore[3]+valore[4])/5;
      printf ("La media e' %f\n", media);
    
      return 0;
    }
    Così?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    il problema è che l'espressione a sinistra dell'uguale richiede un valore double, mentre quella a destra è restituita come int, visto che:
    - fa la somma di 5 operatori int (risultato INT)
    - divide per 5 (numero int), dando come risultato solo la parte intera (divisione tra due interi).

    Ora, per risolvere il problema, ti basta fare il casting su uno qualsiasi dei 5 operandi, così tutta l'espressione verrà valutata come double.

    media = ((double)v[0] + v[1] + v[2] + v[3] + v[4])/5;

    Così dovrebbe andare
    *********************************
    Andrea
    *********************************

  7. #7
    grazie ma, non posso rendere double gli operandi all'inizio dichiarandoli? devo usare questo metodo che non ho mai usato?
    /*NO COMMENT*/

  8. #8
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    dichiarali double e nn usare la funzione abs.
    scusa ma a che ti serve il valore assoluto se calcoli la media?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Il casting è spesso necessario per questioni di eleganza.

    Se ad esempio calcoli le medie di età, le età nn ha senso che siano numeri double, sono interi, ma la media magari può aver senso fornirla con un paio di decimali
    *********************************
    Andrea
    *********************************

  10. #10
    @Squall1988
    Ok, capito.

    @buba88
    La funzione abs me la richiede un esercizio che devo svolgere, già che mi trovo vi scrivo la traccia:

    Scrivete un programma che calcoli la media del valore assoluto di cinque numero e ne visualizzi il risultato.

    Cosa posso fare?
    /*NO COMMENT*/

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 © 2024 vBulletin Solutions, Inc. All rights reserved.