Array - Arithmetisches Mittel - nur 2 Variablen - Hilfe



  • Ich glaube, die Idee ist, dass du gar kein Array verwendest. Dann geht es nämlich wirklich nur mit 2 Variablen.

    Tipp: Welche Information brauchst du, um den Mittelwert auszurechnen?



  • ceko94 schrieb:

    Swordfisch schrieb:

    Ich glaub' es ist anders gemeint 😉

    Inwiefern?

    Du sollst sicher ohne Array auskommen.

    ceko94 schrieb:

    Swordfisch schrieb:

    Kein goto.

    Begründung?

    Reichts wenn ich sag' daß das kein guter Anwendungsfall für goto ist? Es ist auch nirgends irgendeine Art Menü verlangt.

    ceko94 schrieb:

    Swordfisch schrieb:

    Schleifen? // geht ned mit nur zwei Variablen

    Also fehlerhafte Fragestellung vom Prof?

    Nein. Ich hab' nur "Schleifen" von meiner Liste wieder gestrichen, weil man damit dann drei Variablen bräucht.

    Seelig die Gläubiger 😉


  • Mod

    ceko94 schrieb:

    Nun die Frage: Ist das Array "messwert[5]" eine einzelne Variable, oder gelten "messwert[0],....messwert[4]" als 5 eigenständige Variablen? Habe ich bezüglich der Variablenanzahl alles richtig gemacht?

    Es ist zwar technisch gesehen nur eine Variable, aber es ist wahrscheinlich gemeint, dass du kein Array nutzen sollst.

    Swordfisch schrieb:

    Kein goto.

    Begründung?

    goto considered harmful

    Swordfisch schrieb:

    Schleifen? // geht ned mit nur zwei Variablen

    Also fehlerhafte Fragestellung vom Prof?

    Nein, die Aufgabe ist gut lösbar.

    PPS: Kommentare bezüglich Kosmetik, Reduktion, Komprimierung, Funktion und generell Tipps, sind gern gesehen.

    double für etwas, was nur Ganzzahlen aufnehmen soll, ist eine komische Wahl. Überhaupt ist das ganze Menüsystem, das mehr als die Hälfte deines Programms ausmacht, überhaupt nicht gefragt und du verschwendest eine wertvolle Variable dafür.



  • Brauchst nur eine. Die Summe.
    Ich berechne mal den Durchschnitt von 34,46 und 83.

    Der Trick ist:

    summe=0;//zur sicherheit
    summe+=34;
    summe+=46;
    summe+=83;

    durchschnitt=summe/3;

    Nu hat Dein Prof sogar zwei Variablen zugelassen. Bestimmt für

    for i= 1 to 5
    ...summe+=eingabe

    und kein Array ist benötigt.



  • volkard schrieb:

    summe=0;//zur sicherheit
    summe+=34;
    summe+=46;
    summe+=83;

    durchschnitt=summe/3;

    Nu hat Dein Prof sogar zwei Variablen zugelassen. Bestimmt für

    for i= 1 to 5
    ...summe+=eingabe

    und kein Array ist benötigt.

    Nein, ich glaube die zweite Variable ist für die Eingabe.

    int x;
    cin >> x;
    summe += x;
    

    Btw:

    cout << accumulate(istream_iterator<int>(cin), {}, 0)/5. << std::endl << std::flush;
    


  • gläubiger schrieb:

    Nein, ich glaube die zweite Variable ist für die Eingabe.

    Oh, verflixt. Naja, dann halt fünfmal hinschreiben.

    gläubiger schrieb:

    cout << accumulate(istream_iterator<int>(cin), {}, 0)/5. << std::endl << std::flush;
    

    Deswegen empfehle ich meinem Arbeitgeber, keine Projekte mehr in C++ anzufangen, wenn kein sehr erfahrener Aufpasser dabei ist. Sozusagen wider besseres Wissen. C++ ist die allerallerbeste Sprache, um was sehr dickes zu schreiben. Leider sind die C++-Leute Leute, die meistens unlesbaren Code frickeln, obwohl gerade und nur C++ die Möglichkeit bietet, stets lesbar zu schreiben.



  • Danke für die zahlreichen Antworten!

    btw: Mir ist klar, dass das Menü eigentlich unnötig ist. Ich habe es aus esthetischen Gründen hinzugefügt und da ich mit dem Array nur eine Variable benutz zu haben glaubte, was sich durch

    SeppJ schrieb:

    Es ist zwar technisch gesehen nur eine Variable, aber es ist wahrscheinlich gemeint, dass du kein Array nutzen sollst.

    bestätigt hat, habe ich mir die Freiheit genommen.

    Ok. Ab jetzt nur das Nötigste.

    Kein Array habe ich verstanden, aber wieso kein double? Der Durchschnitt lässt sich doch auch von Fließkommazahlen bilden?

    "summe" als Variable?

    gläubiger schrieb:

    cout << accumulate(istream_iterator<int>(cin), {}, 0)/5. << std::endl << std::flush;

    das sagt mir nun garnichts^^

    Ich werde mich mal daran versuchen, sobald ich Zeit finde.



  • ceko94 schrieb:

    [...] aber wieso kein double? Der Durchschnitt lässt sich doch auch von Fließkommazahlen bilden?

    double für Messwerte? Yay!! 🙂
    double für Menüauswahl? Nay!! 😞

    ceko94 schrieb:

    [...] "summe" als Variable?

    Das hat dir gläubiger weiter oben doch eh schon verraten.

    ceko94 schrieb:

    gläubiger schrieb:

    cout << accumulate(istream_iterator<int>(cin), {}, 0)/5. << std::endl << std::flush;

    das sagt mir nun garnichts^^

    Verständlich. Du bist wahrscheinlich über den Tamplateparameter <int> gestoßen ... nein, der zählt nicht wirklich als variable 🤡



  • #include <iostream>
    using namespace std;
    
    int main()
    {
        double x, summe;
        summe = 0;
    
        cout << "Messwert 1? ";
        cin >> x;
        summe += x;
        cout << "Messwert 2? ";
        cin >> x;
        summe += x;
        cout << "Messwert 3? ";
        cin >> x;
        summe += x;
        cout << "Messwert 4? ";
        cin >> x;
        summe += x;
        cout << "Messwert 5? ";
        cin >> x;
        summe += x;
    
        cout << "Arithmetisches Mittel = ";
        cout << summe / 5 << endl;
    
        return 0;
    }
    

    Zufriedenstellend?



  • jein.

    #include <iostream> 
    
    // using namespace std;  das fangen wir uns garnicht erst an -->
    using std::cin;
    using std::cout;
    
    int main() 
    { 
    //     double x, summe;  variablen so lokal, so nahe wie möglich am Verwendungsort definieren
    //     summe = 0;        Dort kann man ihnen meistens auch einen sinvollen Wert geben:
    
    	cout << "Messwert 1? "; 
    	double x;
        cin >> x;
        double summe = x;
    
        cout << "Messwert 2? "; 
        cin >> x;
        summe += x;
    
        cout << "Messwert 3? "; 
        cin >> x;
        summe += x;
    
        cout << "Messwert 4? "; 
        cin >> x;
        summe += x;
    
        cout << "Messwert 5? "; 
        cin >> x;
        summe += x;
    
        cout << "Arithmetisches Mittel = ";
        cout << summe / 5 /* << endl; <<-- wofuer endl? -->> */ << '\n';
    
        // return 0;  kannst dir sparen. main() gibt immer 0 zurueck, wenn sie _nichts_ zurueckgibt.
    }
    

  • Mod

    // using namespace std;  das fangen wir uns garnicht erst an --> 
    using std::cin; 
    using std::cout; 
    
    int main() 
    { 
    //     double x, summe;  variablen so lokal, so nahe wie möglich am Verwendungsort definieren
    

    lol



  • Hey, ich bin (fast) immer für die Lolz. 😉
    Jetzt könnten wir uns noch über eine "schöne" Lösung mit zwei Variablen unterhalten :p



  • Den Scope jeder Variable möglichst gering halten!

    double summe = [](){
          cout << "Messwert 1? ";
          double x;
          cin >> x;
          return x;
        }();
        summe += [](){
          cout << "Messwert 2? ";
          double x;
          cin >> x;
          return x;
        }();
        summe += [](){
          cout << "Messwert 3? ";
          double x;
          cin >> x;
          return x;
        }();
        summe += [](){
          cout << "Messwert 4? ";
          double x;
          cin >> x;
          return x;
        }();
        summe += [](){
          cout << "Messwert 5? ";
          double x;
          cin >> x;
          return x;
        }();
        cout << "Arithmetisches Mittel = ";
        cout << summe / 5 /* << '\n';
    


  • Swordfish schrieb:

    // using namespace std;  das fangen wir uns garnicht erst an --> 
    using std::cin; 
    using std::cout;
    

    Begründung bitte.

    Btw, wir haben bisher nur "using namespace std;" gelernt und erklärt bekommen, dass man dadurch cin/cout benutzen kann. mehr nicht.

    Ich verstehe die 2 Implementierungen, aber wieso? Was ist der Sinn dahinter? Technisch, kosmetisch..inwiefern verbessernd?

    //     double x, summe;  variablen so lokal, so nahe wie möglich am Verwendungsort definieren
    //     summe = 0;        Dort kann man ihnen meistens auch einen sinvollen Wert geben:
    

    Lediglich damit ich den überblick behalte und logischer schreibe oder gibt es auch einen technischen nutzen?



  • forthelolz schrieb:

    Den Scope jeder Variable möglichst gering halten!

    Scope? Bitte immer eine kurze Erklärung und die Funktion dazuschreiben. Ich komme mit, aber brauche es anfangs etwas konkreter.


  • Mod

    Ich glaube, Swordfish dreht gerade durch :p . Seine letzten beiden Beiträge lieber einfach nicht beachten.



  • Keine Ahnung, warum dich jetzt alle verunsichern wollen. Dein Code war voll in Ordnung.
    Mit dem Scope ist hier totale Klugscheiiserei. Du solltest die Variabeln eine Zeile später definieren.
    Allgemein ist das aber richtig, dass wenn du z.B. ein x nur in einem Scope (= der Bereich innerhalb der {}-Klammern) brauchst, dass du x dann auch erst da definierst.



  • SeppJ schrieb:

    Ich glaube, Swordfish dreht gerade durch :p . Seine letzten beiden Beiträge lieber einfach nicht beachten.

    Hey!? 😮 🤡 👍

    forthelolz schrieb:

    Den Scope jeder Variable möglichst gering halten!

    Yay!! 😃

    Swordfish schrieb:

    Jetzt könnten wir uns noch über eine "schöne" Lösung mit zwei Variablen unterhalten :p

    Na? was is?



  • Ok, danke. Haha. Ich kann verstehen, dass man mich in einen bestimmten Programmier-Stil lenken möchte. Ich finde es auch sehr interessant und bin auch ziemlich offen dafür. Ich versuche einfach alles aufzusaugen, damit ich mir überhaupt erstmal selber Gedanken darüber machen kann.

    Übrigens wieso "\n" über endl? Unser Prof meinte für uns eignet sich endl besser, weil aus irgendeinem Grund die Fehler bei einer Fehlkompilierung dargestellt werden? Oder sowas in der Richtung.. das war zwar heute, aber der tag war bis dahin schon lang. Die Aufzeichnung schaue ich mir nochmal an.

    Scope = {}. Got it.



  • Swordfish schrieb:

    Na? was is?

    Meinste mich?


Anmelden zum Antworten