Durchschnitt eines Array (int) berechnen



  • Hallo,

    Bin Student 1.Sem. Gleich in der ersten Vorlesung haben wir folgende Aufgabe bekommen.

    1. Mann soll beliebig viele zahlen eingeben können (Format z.b 2, +2, -5)
    2. Diese sollen dann addiert werden und durch die Anzahl der eingegebenen Zahlen geteilt werden.
    3. Der Durchschnitt soll ausgegeben werden.
    4. Abbruchbedingung: Wird keine int Zahl eingeben (z.b. ein Zeichen) soll ohne Meldung die Berechnung gestartet werden.

    Meine Fragen:

    Ich denke ich brauch ein Array.
    1. Wie füll ich ein Array mit der in 4. angegebenen Abbruchbedingung ?
    2. Wie addiere ich die Inhalte im Array ?

    Anzahl der Elemente im Array und das teilen krieg ich hin 😉

    Oder kann ich das auch ohne Array lösen ?

    Es wäre nett, wenn Ihr mir mit Codeschnipsel weiterhelfen könntet.



  • RubDec schrieb:

    Oder kann ich das auch ohne Array lösen ?

    Ja natürlich. Du bildest die Summe während der Eingabe und zählst gleichzeitig die eingegebenen Zahlen mit.



  • ähmm, dann steh ich total auf dem Schlauch... 😮

    Kannst Du mir den Codeschnipsel posten ?



  • // ungetestet
    double zahl, summe = 0;
    unsigned int n = 0;
    while (scanf("%lf\n", &zahl) == 1)
    {
      summe += zahl;
      ++n;
    }
    if (n != 0)
      printf("Durchschnitt: %f\n", summe / n);
    else
      puts("Keine Zahlen eingegeben.");
    


  • die methode ohne array hat allerdings den nachteil das man nur bis zu einer gewissen summe alles eingeben kann
    ein array hingegen hat den nachteil, das du eine feste länge verwenden musst und damit die bedingung das du beliebig viele zeichen eingeben kannst acuh nicht eingehalten wird ...

    -> die lösung ist ne liste (dynamisches array)
    weis jetzt leider net wie die liste unter normal c definiert ist. aber ich schreib das mal so auf wie ich das im kopf habe .. kann sein das also die funktionen nen bisl differieren .. aber der aufbau dürfte stimmen !

    LISTE<int> liste;       // objekt einer lsite erstellen 
    int eingabe;
    int zaehler;
    int durchschnitt;
    
    zaehler = 0;
    
    cin >> eingabe;         // zeichen einlesen
    
    // solange zahl hinzufügen bis keine zahl mehr eingegeben wurde
    while (eingabe != "")   
    {
      liste.add (eingabe);   // element der lsite hinzufügen
      zaehler++;
    }
    else
    {
      liste.reset();         // zeiger in der liste auf den anfang setzen
    
      durchschnitt= liste.get() / zaehler;
    // solange zweitergehen bis man am ende der liste angekommmen ist
      do                     
      {
        liste.adv();
        durchschnitt += liste.get() / zaehler;
      }while (!liste.end());
      cout << durchschnitt;
    }
    

    edit: oh man jetzt war ich so lahm das schon wieder andere in der zwischenzeit geschrieben haben 🙂



  • ulath schrieb:

    die methode ohne array hat allerdings den nachteil das man nur bis zu einer gewissen summe alles eingeben kann

    Das ist bei Gleitkommazahlen wahrscheinlich egal 😉



  • Das ist bei Gleitkommazahlen wahrscheinlich egal

    na wir wollen doch ein perfektes system oder net ? 😃



  • Erstmal vielen Dank,

    Leider muss ich jetzt erst mal weg. Werd mir heute abend euere Tipps mal genauer ankucken.


Anmelden zum Antworten