2017-09-05 1 views
1

Donc, j'ai un ensemble de données [20] [20] que j'essaie de prendre la moyenne des données dans certaines fourchettes. mes intervalles vont de 0 à 0,5, de 0,5 à 1, de 1 à 1,5, de 1,5 à 2 et enfin de 2 à 2,5. Cependant, mon code ne calcule que la même moyenne pour chaque plage. mon code est:Comment utiliser les tableaux pour prendre la moyenne des nombres

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

// Declare constants 
// Name of file that stores our raw data 
#define FILE_NAME "data_1.csv" 

// Data size 
#define MAX_ROWS 20 
#define MAX_COLUMNS 20 
#define LOW_ERROR 0.0 
#define HIGH_ERROR 2.5 
#define MAX_RANGE 6 

// Main entry point for the program 
int main(void) 
{ 
// Decalred variables 
int rowIndex = 0; 
int columnIndex = 0; 

//Stores the data and maps 
double rawData[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our raw data 
double roundedValue[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our rounded data 
int classificationMap[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our classification map 

//Stores the range data 
float rangeValue[MAX_RANGE] = { 0.0,0.5,1.0,1.5,2.0,2.5 }; // Set up the range bounds 
int i, rangeAveragesCount[MAX_RANGE]; 
float rangeTotalForAverages[MAX_RANGE]; 
float rangeAverage[MAX_RANGE]; 

// Print out the rawdata array 
printf(" --- RAW DATA ---\n"); 
for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++) 
{ 
    // Read up until the last value 
    for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++) 
    { 
     printf("%.9lf ", rawData[rowIndex][columnIndex]); 
    } 
    printf("\n"); 
} 
// Print out the roundup data array 
printf(" --- ROUNDED DATA ---\n"); 
for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++) 
{ 
    // Read up until the last value 
    for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++) 
    { 
     if (rawData[rowIndex][columnIndex] < LOW_ERROR) 
     { 
      roundedValue[rowIndex][columnIndex] = LOW_ERROR; 
      printf("%.3f ", LOW_ERROR); 
     } 
     else if (rawData[rowIndex][columnIndex] > HIGH_ERROR) 
     { 
      roundedValue[rowIndex][columnIndex] = HIGH_ERROR; 
      printf("%.3f ", HIGH_ERROR); 
     } 
     else 
     { 
      roundedValue[rowIndex][columnIndex] = ceil(rawData[rowIndex][columnIndex] * 1000.0)/1000.0; 
      printf("%.3f ", ceil(rawData[rowIndex][columnIndex] * 1000.0)/1000.0); 
     } 
    } 
    printf("\n"); 
} 
//Calculate and store the averages for each range 
printf(" --- RANGE TABLE ---\n"); 
for (i = 0; i < 5; i++) 
{ 
    for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++) 
    { 
     for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++) 
      if (roundedValue[rowIndex][columnIndex] > rangeValue[i] && roundedValue[rowIndex][columnIndex] <= rangeValue[i + 1]) 
      { 
       rangeTotalForAverages[i] = rangeTotalForAverages[i] + roundedValue[rowIndex][columnIndex]; 
       rangeAveragesCount[i] + 1; 
      } 

    } 
    rangeAverage[i] = rangeTotalForAverages[i]/rangeAveragesCount[i]; 
    printf("%.3f \n", rangeAverage[i]); 
    rangeTotalForAverages[i] = 0; 
    rangeAverage[i] = 0; 
    rangeAveragesCount[i] = 0; 
} 

// Exit 
return 0; 
} 

En utilisant ce code que je reçois 0,125 pour toutes mes gammes. une idée pourquoi?

+4

'rangeAveragesCount [i] + 1;': cette ligne ne donne rien. Est-ce votre erreur? Vous avez probablement voulu dire 'rangeAveragesCount [i] + = 1;'. En outre, cette table est _never_ initialisée. Comportement si indéfini. –

+0

Pourriez-vous s'il vous plaît convertir 'if (arrondiValeur [rowIndex] [columnIndex]> intervalleValeur [i] && arrondiValeur [rowIndex] [columnIndex] <= intervalleValeur [i + 1])' à (if ((roundedValue [rowIndex] [columnIndex] > rangeValue [i]) && (roundedValue [rowIndex] [columnIndex] <= rangeValue [i + 1])) ' – Vagish

+0

@ Jean-FrançoisFabre pourriez-vous m'aider s'il vous plaît comment initialiser ma table? – NeemzCr7

Répondre

0

Vous n'avez pas initialisé les variables locales avant de les utiliser:

Vérifiez la ligne ci-dessous:

rangeTotalForAverages[i] = rangeTotalForAverages[i] + roundedValue[rowIndex][columnIndex]; 

Ici, vous utilisez rangeTotalForAverages[i] avant de l'initialiser. Le résultat est imprévisible.