Calcolo media dei valori di una matrice

di il
12 risposte

Calcolo media dei valori di una matrice

Ciao a tutti sto provando le matrici e per iniziare a fare qualche piccolo esperimento con le matrici in C avevo pensato a un semplice problema come digitare in input diversi numeri e poi calcolare la media dei valori stessi contenuti in matrice.

Questo è il sorgente:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    #define riga 2
    #define colonne 3

    int matrice[riga][colonne]; //dichiaro una matrice di 2 righe e 3 colonne
    int i,j,somma=0;
    float media=0;


    printf("MEDIA DEI VALORI DI UNA MATRICE\n");
    printf("\n");

    for(i=0; i<riga; i++)
    {
        for(j=0; j<colonne; j++)
        {
            printf("Digitare numero intero nella riga %d - colonna %d : ",i+1,j+1);
            scanf("%d", &matrice[i][j]); //salvo il numero digitato nella matrice
        } //end for colonna
    } //end for riga


    //somma di tutti i numeri della matrice

    for(i=0;i<riga; i++)
        for(j=0; j<colonne; j++)
            somma = somma + matrice[i][j]; //somma di tutti i numeri presenti nella matrice

    media = somma / 6;

    printf("\n");
    printf("Media dei valori presenti nella matrice e': %.2f \n",media);

    return 0;

} //end main
Il problema sorge dal risultato in quanto non è corretto.
Ad esempio se digito come numeri 1,2,3,4,5,6 mi da come risultato 3.00 invece che 3,5
Se qualcuno mi saprà dare una mano lo ringrazio

12 Risposte

  • Re: Calcolo media dei valori di una matrice

    Dichiara somma come float
  • Re: Calcolo media dei valori di una matrice

    Un compilatore moderno riesce ad ottimizzare e fare in modo che a)a+b e a+=b vengano compilati nello stesso modo.
  • Re: Calcolo media dei valori di una matrice

    Grazie per le risposte!

    Sapevo dell'esistenza dell'opzione a+=b ma sinceramente credevo che scrivere l'istruzione in due modi differenti fosse uguale per il PC a livello di prestazioni in questo caso

    Tuttavia se dichiaro somma come float funziona ma non ho capito il perchè in quanto i numeri sono tutti interi e non riesco a capire perché. Grazie
  • Re: Calcolo media dei valori di una matrice

    La precisione nel calcolo è quella del tipo piú preciso nell'espressione.
  • Re: Calcolo media dei valori di una matrice

    Scusami ma non ho ben capito...
    Il variabile di tipo float è di tipo più preciso in quanto ha una parte decimale?
  • Re: Calcolo media dei valori di una matrice

    Premesso che le variabili, i tipi, le precisioni dovrebbero essere un argomento di base da affrontare sui libri prima di iniziare a programmare, sì, il tipo float ha una maggiore precisione nella rappresentazione dei valori reali.

    Quello che ti dicevo è che in una espressione come

    media / 6

    dato che tutte le parti sono intere, avrai un risultato intero. Se una di queste parti è float, allora il risultato sarà float. Ovviamente la variabile a cui assegnare il risultato dovrà essere float.
    Quindi hai due possibilità ... o è float la variabile media o è float il valore costante che utilizzi, in quel caso dovresti scrivere 6.0
  • Re: Calcolo media dei valori di una matrice

    Sisi ho capito è che facendo a scuola c# non mi era mai successa un cosa simile per questo chiedevo
    Grazie per la spiegazione come sempre
  • Re: Calcolo media dei valori di una matrice

    Anche in C# succederebbe qualcosa di simile e dovresti usare un cast ...
  • Re: Calcolo media dei valori di una matrice

    Recenti ?
  • Re: Calcolo media dei valori di una matrice

    Già tutti quelli a 32 bit sono abbastanza "furbi" ... non so quale usi ma penso andrà bene ...

    Basta che scrivi un po' di codice di test e compili generando il file assembly corrispondente ... e controlli.
  • Re: Calcolo media dei valori di una matrice

    Dipende dal compilatore che usi ... controlla nella documentazione ... l'ignoranza non è un problema, si cura con lo studio ...
  • Re: Calcolo media dei valori di una matrice

    Grazie:)
    Ma provando a fare la stessa cosa sui vettori non ho mai notato nulla di questo genere..
Devi accedere o registrarti per scrivere nel forum
12 risposte