2017-09-03 1 views
-1

Also habe ich einen Code geschrieben, wo es eine Datei liest, die eine Reihe von Daten enthält. Danach habe ich die Daten auf 3 Dezimalstellen aufgerundet. Später habe ich versucht, den Durchschnitt der gerundeten Daten in bestimmten Bereichen zu ermitteln. Die Bereiche liegen zwischen 0, 0,5 und 0,5 bis 1,0 und .... Aber das Problem ist, dass wenn ich dies tue, es die abgerundeten Daten nicht verwendet und es die Rohdaten verwendet. Wie soll ich meinen Code ändern, damit er die abgerundeten Daten verwendet? Wie kann ich etwas machen, das die gerundeten Daten darstellt, damit ich es für den Rest meiner Kodierung verwenden kann? mein CodeVerwenden der gerundeten Daten für Durchschnittswerte

#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

Ich kann sehen, wo Sie Code haben, um die abgerundeten Werte zu drucken(), aber nicht wo Sie tatsächlich die Werte im Array aufrunden? Auch Ihr Einzug benötigt Aufmerksamkeit - ich kann nicht klar sehen, wo main() beginnt/endet. –

Antwort

1

Sie müssen zum Halten der gerundeten Daten ein zusätzliches Array hinzuzufügen. Etwas wie:

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); 
    } 
} 

Danach können Sie die Variable roundedData zur Berechnung des durchschnittlichen verwenden.

Verwandte Themen