2017-09-03 2 views
-1

J'ai donc écrit un code où il lit un fichier contenant un ensemble de données. après cela, j'ai arrondi les données à 3 décimales. plus tard, j'ai essayé de prendre la moyenne des données arrondies dans certaines fourchettes spécifiques. Les plages sont comprises entre 0, 0,5 et 0,5 à 1,0 et .... Mais le problème est que lorsque je fais cela, il n'utilise pas les données arrondies et il utilise les données brutes. Comment devrais-je changer mon code afin qu'il utilise les données arrondies? Comment puis-je faire quelque chose qui représente les données arrondies afin que je puisse l'utiliser pour le reste de mon codage? mon code estUtilisation des données arrondies pour prendre des moyennes

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

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

int main(void) 
{ 
// Decalred variables 
int rowIndex = 0; 
int columnIndex = 0; 
double rawData[MAX_ROWS][MAX_COLUMNS]; // 2-dimensional array to store our raw data 
int decimalPlaces = 3; 
float rangeValue[6] = { 0.0,0.5,1.0,1.5,2.0,2.5 }; 
int i, num = 0; 
float total = 0.0, average; 
// 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) 
      printf("%.3f ", LOW_ERROR); 
     else if (rawData[rowIndex][columnIndex] > HIGH_ERROR) 
      printf("%.3f ", HIGH_ERROR); 
     else 
      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 (rawData[rowIndex][columnIndex] > rangeValue[i] && rawData[rowIndex][columnIndex] <= rangeValue[i + 1]) 
      { 
       total = total + rawData[rowIndex][columnIndex]; 
       num++; 
      } 

    } 

    average = total/num; 
    printf("%f \n", average); 
    total = 0; 
    average = 0; 
    num = 0; 
} 

return 0; 

}

+0

Je peux voir où vous avez du code pour imprimer() les valeurs arrondies, mais pas où vous arrondissez les valeurs dans le tableau? En outre, vous indentation besoin d'attention - je ne peux pas voir clairement où main() commence/finit. –

Répondre

1

Vous devez ajouter un tableau supplémentaire pour maintenir les données arrondies. Quelque chose comme:

double roundedData[MAX_ROWS][MAX_COLUMNS]; 

for (rowIndex = 0; rowIndex < MAX_ROWS; rowIndex++) 
{ 
    for (columnIndex = 0; columnIndex < MAX_COLUMNS; columnIndex++) 
    { 
     roundedData[rowIndex][columnIndex] = ceil(rawData[rowIndex][columnIndex] * 1000.0)/1000.0); 
    } 
} 

Après cela, vous pouvez utiliser la roundedData variable pour le calcul de la moyenne.