Sektion Angewandte Informationsverarbeitung

Übungen zu Systemnahe Software I, Wintersemester 1996/97

Blatt 2

Beispiellösung zu Aufgabe 2 (4 Punkte)

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

int main( void )
{
  double sum = 0.0, value;
  double min = DBL_MAX, max = -DBL_MAX;
  long count = 0;

  printf( " Auswertung, die erste.\n" );
  while( scanf( "%*s%lf", &value ) != EOF ){ 
    sum += value; count++;
    if( value < min ) min = value;
    if( value > max ) max = value;
  }
  if( count > 0 ){
    printf( "%ld Werte gelesen.\nMittelwert: %g.\n", count, sum/(double)count );
    printf( "Maximaler Wert: %g\nMinimaler Wert: %g.\n", max, min );
    return 0;
  }else{
    fprintf( stderr, "ERROR: no or incorrect data!\n" );
    return 1;
  }
}

oberon$ gcc -Wall auswert1.c -lm
oberon$ cat Daten
ksdfhkdshfg 8.0
sadlfhlkdsh 6.0
aldfhkdh 4.0
oberon$ cat Daten | a.out
 Auswertung, die erste.
3 Werte gelesen.
Mittelwert: 6.
Maximaler Wert: 8
Minimaler Wert: 4.

Beispiellösung zu Aufgabe 2 (4 Punkte)

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

#define MAX_LINES 5

double sigma( double v[], long c, double mean )
{
  double sigmasq = 0.0, tmp;
  long i;

  for( i = 0; i < c; i++ ){
    tmp = v[i] - mean;
    sigmasq += tmp * tmp;
  }
  sigmasq /= c;
  return sqrt( sigmasq );
}

int main( void )
{
  double sum = 0.0, value;
  double vector[ MAX_LINES ];
  double min = DBL_MAX, max = -DBL_MAX, mean;
  long count = 0;
  int result;

  printf( " Auswertung, die zweite.\n" );
  while( (result = scanf( "%*s%lf", &value )) == 1 ){
    if( count >= MAX_LINES ){
      fprintf( stderr, "ERROR: too many lines!\n" );
      return 1;
    }
    vector[ count ] = value;
    sum += value; count++;
    if( value < min ) min = value;
    if( value > max ) max = value;
  }
  if( result != EOF ){
    fprintf( stderr, "ERROR: malformatted input!\n" );
    return 3;
  }else if( count > 0 ){
    mean = sum/(double)count;
    printf( "%ld Werte gelesen.\nMittelwert: %g.\n", count, mean );
    printf( "Maximaler Wert: %g\nMinimaler Wert: %g.\n", max, min );
    printf( "Standardabweichung: +/- %g\n", sigma(vector, count, mean) );
    return 0;
  }else{
    fprintf( stderr, "ERROR: no or incorrect data!\n" );
    return 2;
  }
}

oberon$ gcc -Wall auswert2.c -o auswert2 -lm
oberon$ cat Daten | auswert2
 Auswertung, die zweite.
3 Werte gelesen.
Mittelwert: 6.
Maximaler Wert: 8
Minimaler Wert: 4.
Standardabweichung: +/- 1.63299
oberon$