CKurs - Aufgaben zu C

Google

Dynamische Speicher-Allokation

Aufgabenstellung:
 
 Schreiben Sie bitte ein C-Programm, das den Mittelwert einer unbekannten Anzahl von Versuchsmesswerten berechnet. Die Versuchsmesswerte vom Typ (double) müssen aus einer Datei "data.txt" gelesen werden. Die Funktion zur Berechnung des Mittelwerts ist folgendermassen definiert:           

CCode:

double average(double data[], int count);

Nutzen Sie bitte die Mšglichkeit der dynamischen Speicher-Allokation mit Hilfe der Funktionen malloc() und free() zum Speichern der gelesenen Messwerte aus. Der alloziierte Speicher soll immer um weitere 10 Elemente erweitert werden, wann immer er voll wird. Nachdem alle Messwerte aus der Datei "data.txt" gelesen und in das dynamische Array gespeichert sind, wird die Funktion average() aufgerufen, um den Mittelwert zu berechnen.

Lösung

HINWEIS: Anstatt der Funktion free() wurde realloc() verwendet. Dadurch kann ein lästiges Umkopieren der Daten erspart werden.

CCode:

#include <stdio.h>

double average(double data[], int count){
int i;
double summe=0;
for (i=0;i<count;i++)
summe+=data[i];
return summe/(count);
}

int main()
{
double *data;
int count=0;
int datasize=10;
double actdata;
FILE *fdata;
if ((fdata = fopen("data.txt", "r")) == NULL)
{
fprintf(stderr, "Datenfile kann nicht gefunden werden. \n");
return -1;
}
count=0;
data=(double*)malloc(sizeof(double)*datasize);
while(fscanf(fdata,"%lf",&actdata)!=EOF){
count++;

if (count > datasize) {
datasize+=10;
data=(double*)realloc(data,sizeof(double)*datasize);
}
data[count-1]=actdata;
}

printf("%f",average(data,count));
return 0;
}

Hinweis: Hier wurde die headderdatei weggelassen.

Ausgabe stdout:

9.962963