Schulaufgabe Eingabe von 5 Variablen und Bildung von Summe und Mittelwert



  • Du brauchst die Werte nicht zwischenspeichern.
    D.h. du brauchst das Array nicht.



  • DirkB schrieb:

    Du brauchst die Werte nicht zwischenspeichern.
    D.h. du brauchst das Array nicht.

    ...und damit brauchst du auch die zweite Schleife nicht. Aus der Summe noch den Durchschnitt zu berechnen sollte nicht schwer fallen.

    Und - es ist zwar korrekt wie du es geschrieben hast, aber besser/schöner ist:

    for (int i = 0; i<5; i++) // Variable i erst deklarieren, wenn sie benötigt wird.
    

    Und falls du dich fragst, warum in deinem Programm oben die Summe nicht stimmt, dann schau dir mal die Größe des Arrays an und wieweit deine Schleifen zählen!

    Falls du so nicht drauf kommst, dann schreib doch einfach ein

    cout << i << " : " << summe << endl
    

    in die Schleife, dann kannst du die Werte verfolgen.



  • for-Schleifen sind sowas von '70s 🙄

    #include <vector>
    #include <iterator>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int main(void)
    {
        vector<int> v;
        generate_n(back_inserter(v), 5, [](){ return *istream_iterator<int>(cin); });
        cout << accumulate(v.begin(), v.end(), 0)/5.0 << endl;
    }
    


  • zufallswert schrieb:

    for-Schleifen sind sowas von '70s 🙄

    #include <vector>
    #include <iterator>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int main(void)
    {
        vector<int> v;
        generate_n(back_inserter(v), 5, [](){ return *istream_iterator<int>(cin); });
        cout << accumulate(v.begin(), v.end(), 0)/5.0 << endl;
    }
    

    Das ist sowas von mit Kanonen auf Fliegen schießen. 😮



  • Also ich habe noch ein bisschen dran gearbeitet und mit eurer Hilfe und der Suche im Internet die Sache zum laufe gebracht. Jetzt auch mit einer dynamischen Auswahl der Eingangsvariablen. Allerdings halt mit dem array..

    // Summe und Mittelwert.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    
    	int anzahl=0;
    	int i, a[5]; 
    	int summe=0;
    
    	cout << "Wie viele Zahlen wollen Sie eingeben?\n";
    
    	cin >> anzahl;
    
    	cout << "Bitte Zahlen eingeben!\n";
    
    	for (i = 0; i < anzahl; i++)
    	{
    		cin >> a[i];	
    	}
    
    	for (i = 0; i < anzahl; i++)
    	{
    		summe += a[i];
    
    	}
    
    	cout << "Das Ergebnis ist:" << summe <<"\n";
    
    	double mittelwert = 0;
    	for (i = 0; i < anzahl; i++)
    	{
    		mittelwert += a[i];
    	}
    	cout << "Der Mittelwert ist: " << mittelwert / anzahl << endl;
    
    	_getch();
    
    	return 0;
    }
    

  • Mod

    Und wenn jemand eine Anzahl größer als 5 eingibt?

    Kommt es dir nicht irgendwie so vor, als würdest du die gleiche Arbeit 3x machen?



  • Denk an den Beitrag von DirkB. Du kannst die Summe fortlaufend bilden und dir die Anzahl der eingegebenen Zahlen merken, damit du am Ende den MW berechnen kannst. Ein Array, vektor o.ä. wird nicht gebraucht.



  • zufallswert schrieb:

    int main(void)

    LOL



  • Ich würde:
    - Variablen für Summe und Anzahl definieren
    - Eine for-Schleife verwenden, die beliebig viele Zahlen ließt

    • std::cin >> zahl als Bedingung der for -Schleife (dadurch prüfst du, ob überhaupt erfolgreich eine Zahl gelesen wurde), wobei zahl im Kopf der for-Schleife definiert wird
      - Nach jedem Durchlauf die Anzahl inkrementieren (im Kopf der for -Schleife)
      - Innerhalb der for -Schleife selbst die Zahl zur Summe addieren.
      - Wem die etwas exotische Anwendung der for -Schleife nicht gefällt, kann dies einfach als while -Schleife umschreiben.

    Falls beim Mittelwert der Nachkommaanteil nicht abgeschnitten werden soll:

    std::cout << double{sum} / anzahl;  // keine Integer-Division mehr
    

    P.S.: Ich finde du verwendest manchmal "ein wenig viel" whitespace... Gerade am Anfang von main 5 Zeilen frei lassen, oder innerhalb eines {}-Blocks einer for-Schleife extra Leerzeilen am Ende einfügen ist schon sehr ungewöhnlich. Sonst sieht dein Quellcode sehr ordentlich aus.

    Wobei... genau genommen sollen ja 5 Zahlen eingelesen werden und nicht beliebig viele. Das übersteigt schon wieder die Aufgabenstellung.



  • HarteWare schrieb:

    Wobei... genau genommen sollen ja 5 Zahlen eingelesen werden und nicht beliebig viele. Das übersteigt schon wieder die Aufgabenstellung.

    ->

    Erweitern Sie die Aufgabe 5 derart, dass die Anzahl der Werte variabel ist. Der Benutzer gibt die Zahl der zu verwendenden Werte zu Beginn ein."


Anmelden zum Antworten