Funktionen Mittelwerte berechnen



  • Hallo zusammen,
    ich habe ein Programm geschrieben zur Berechnung der verschiedenen Mittelwerte. Nun war es die Aufgabe, die Berechnungen in Funktionen auszulagern. Jedoch funktioniert mein Code nicht. Was habe ich da falsch gemacht?

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    void arithmetischerMW();
    void geometrischerMW();
    void harmonischerMW();
    
    int main()
    {
    
    	int AuswahlMW;
    
    	cout << "Um den arithmetischen Mittelwert zu berechnen, druecken sie 1! " << endl;
    	cout << "Um den geometrischen Mittelwert zu berechnen, druecken sie 2! " << endl;
    	cout << "Um den harmonischen Mittelwert zu berechnen, druecken sie 3! " << endl;
    	cin >> AuswahlMW;
    
    	if (AuswahlMW == 1)
    	{
    		void arithmetischerMW();
    
    	}
    
    	else if (AuswahlMW == 2)
    	{
    		void geometrischerMW();
    
    	}
    
    	else if (AuswahlMW == 3)
    	{
    		void harmonischerMW();
    
    	}
    
    
    	system("PAUSE");
    	return 0;
    }
    
    
    void arithmetischerMW()
    {
    	double Summe = 0;
    	double aMW;
    	int i;
    
    	for (i = 0; i < 32; i++)
    	{
    		Summe = Summe + (i * 3);
    
    	}
    
    	aMW = Summe / i;
    	cout << "Der arithmetische Mittelwert ist: " << aMW << endl;
    
    }
    
    void geometrischerMW()
    {
    	double Produkt = 1;
    	double gMW;
    	int i;
    
    	for (i = 1; i < 32; i++)
    	{
    		Produkt = Produkt * (i * 3);
    
    	}
    
    	gMW = pow(Produkt, 1.0 / i);
    	cout << "Der geometrische Mittelwert ist: " << gMW << endl;
    
    }
    
    void harmonischerMW()
    {
    	double Summe = 0.0;
    	double hMW;
    	int i;
    
    	for (i = 1; i < 32; i++)
    	{
    		Summe = Summe + 1 / (i * 3.0);
    
    	}
    
    	hMW = i / Summe;
    	cout << "Der harmonische Mittelwert ist: " << hMW << endl;
    
    }
    


  • @jand61 sagte in Funktionen Mittelwerte berechnen:

    funktioniert mein Code nicht

    Heißt was?



  • Du solltest noch mal nachschauen, wie man Funktionen richtig aufruft (Zeile 21 / 27 / 33).
    Mit z.B. void geometrischerMW(); deklarierst du die Funktion (so wie du es ja in den Zeilen 5-7 auch schon getan hast).



  • Ach stimmt, da habe ich aus Versehen den Funktionstyp dazugeschrieben... danke 🙂



  • @jand61 sagte in Funktionen Mittelwerte berechnen:

    int i;

    for (i = 1; i < 32; i++)
    {
    Summe = Summe + 1 / (i * 3.0);

    }

    hMW = i / Summe;

    Brrr! Es ist äußerst hässlich & fehleranfällig, Schleifenvariablen noch für etwas anderes als die Schleife selbst zu missbrauchen! Mach das nicht!

    Wo kommt in deinem Code eigentlich die 32 und die 3 her? Wären die Funktionen zur Mittelwertberechnung nicht nützlicher, wenn sie die Zahlen, deren Mittelwert sie berechnen sollen, als Eingabeparameter hätten? (es böten sich 2 Iteratoren als Parameter an).



  • Die 32 und die 3 kommen aus einer vorherigen Aufgabe und sollten so übernommen werden.
    Wie wäre die bessere Lösung den i Wert aus der Schleife auszulesen? In der Schleife einen Parameter pro Schleifendurchlauf hochzählen zu lassen und dann auslesen?



  • @jand61 sagte in Funktionen Mittelwerte berechnen:

    Die 32 und die 3 kommen aus einer vorherigen Aufgabe und sollten so übernommen werden.

    Ernsthaft? Nicht zumindest irgendwie als Konstante?

    Überleg mal, wie du die Mittelwerte von anderen Zahlen berechen wollen würdest. Du musst immer Code in allen 3 Funktionen ändern. Schreibe Code immer ohne unnütze Wiederholungen und auch OHNE magische Zahlen!



  • Ja...mir war auch durchaus bewusst, dass mit den Programmen nur mit unnötig viel Aufwand andere Werte berechnet werden können. Habe mir dann aber darüber keine genaueren Gedanken gemacht, da es wie gesagt nicht variabel sein musste/sollte.


  • Mod

    @jand61 sagte in Funktionen Mittelwerte berechnen:

    Ja...mir war auch durchaus bewusst, dass mit den Programmen nur mit unnötig viel Aufwand andere Werte berechnet werden können. Habe mir dann aber darüber keine genaueren Gedanken gemacht, da es wie gesagt nicht variabel sein musste/sollte.

    Wo wäre denn dann der Sinn, das als Programmierübung zu machen? Den Durchschnitt der vorgegebenen Werte könntest du auch mit einem Taschenrechner berechnen:

    double harmonischerMW()
    {
        return 23.8376;
    }
    

    Toll! Und ganz viel über Programmierung gelernt.


Anmelden zum Antworten