C/C++ Programmierung

Aufgabe 7

Ändern Sie das Programm aus Aufgabe 5 derart ab, daß es für beliebige N arbeitet.

Holen Sie den Speicher für das Feld mit malloc und geben Sie ihn mit free wieder frei.

Lösung für die Aufgabe

/* Header-Datei einbinden */
#include <stdio.h>

int main(void) /* hier beginnt das Hauptprogramm */
{
  int anzahl, i, werte;
  double *zahlen, a, min, max, mittel;

  /* liest jetzt die Anzahl der Zahlen fuer das Feld ein */
  printf("Anzahl der Zahlen, die verwendet werden sollen: ");
  scanf("%d", &werte);

  if (werte < 1) /* testen, ob min. 1 eingegeben wurde                     */
    return(5);   /* wenn nicht, dann das Programm mit ReturnCode=5 beenden */

  /* Speicher fuer das Feld reservieren */
  zahlen = (double *)malloc(sizeof(double) * werte);

  if (!zahlen)  /* abfragen, ob der Speicher reserviert wurde              */
    return(10); /* wenn nicht, dann das Programm mit ReturnCode=10 beenden */

  for (i = 0; i < werte; i++)
  {
    printf("%d.zahl eingeben:", i + 1);
    scanf("%lf", &a); /* Zahl einlesen */
    zahlen[i] = a;    /* Zahl in das Feld schreiben */
  }

  min = max = mittel = zahlen[0]; /* 1. Zahl in min,max und mittel schreiben */
  for (i = 1; i < werte; i++)
  {
    if (zahlen[i] < min) /* Wenn die zuletzt eingegebene Zahl kleiner als */
      min = zahlen[i];   /* min ist, dann der Wert (min) merken.          */
    if (zahlen[i] > max) /* Wenn die zuletzt eingegebene Zahl größer als  */
      max = zahlen[i];   /* max ist, dann den Wert (max) merken.          */

    mittel += zahlen[i]; /* mittel=mittel+zahlen[i] (für den Mittelwert) */
  }

  mittel /= werte; /* mittel durch die Anzahl der Zahlen teilen, Ergebnis ist dann der Mittelwert */

  printf("Minimum   : %lf\n", min);    /* Minimalwert ausgeben */
  printf("Maximum   : %lf\n", max);    /* Maximalwert ausgeben */
  printf("Mittelwert: %lf\n", mittel); /* Mittelwert ausgeben  */

  anzahl = 0;
  for (i = 0; i < werte; i++)
  {
    /* überprüft, ob die Zahl weniger als 10% vom Mittelwert abweicht */
    if (zahlen[i] < 0)
    {
      if ((zahlen[i] < (mittel - (mittel / 10))) && (zahlen[i] > (mittel + (mittel / 10))))
        anzahl++;
    }
    else
    {
      if ((zahlen[i] > (mittel - (mittel / 10))) && (zahlen[i] < (mittel + (mittel / 10))))
        anzahl++;
    }

    /* ist der Mittelwert=0 und die Zahl=0 dann die Anzahl+1 */
    if ((mittel == 0) && (zahlen[i] == 0))
      anzahl++;
  }

  /* ausgeben wieviele Werte weniger als 10% vom Mittelwert abweichen */
  printf("Anzahl der Werte, die weniger als 10%% vom Mittelwert abweichen: %d\n", anzahl);

  free(zahlen); /* Speicher vom Feld wieder freigeben */

  return(0); /* Das Hauptprogramm gibt am Ende 0 zurück, da kein Fehler aufgetreten ist. */
}


Zurück zur Übersicht