Übungsaufgabe: Zwischen kleinsten und größten Wert unterscheiden



  • Hallo liebe Gemeinde.

    Folgende Aufgabe habe ich bekommen:

    Erstellen Sie ein Programm, das 10 ganzzahlige Werte von der Konsole einliest und in einem geeigneten Feld speichert. Nach der Eingabe soll der Satz ausgegeben werden: "Sie haben Zahlen zwischen x und y eingegeben", wobei x dem kleinsten und y dem größten Wert entspricht.

    Folgenden Programmcode habe ich demzufolge aufgesetzt:

    #include <iostream>
    using namespace std;
    
    int max(int x, int y)
    {
      if (x>y)
       return (x)
    }
    int min(int x, int y)
    {
      if (x<y)
       return (y)
    }
    
    int main()
    {
      int Werte[10];
      int x=0,y=0, i;
      int Maximum, Minimum;
    
      cout << "Geben Sie 10 Werte ein!" << endl;
      for (i=0; i<10; i++)
      {
        cout << "Wert[" << i << "]: " << endl;
        cin  >> Werte[i];
      }
    
      cout << "Das haben Sie eingegeben:" << endl;
      for (i=0; i<10; i++)
      {
        cout << "Wert[" << i << "]: " << Werte[i];
      }
    
      Maximum = Werte[i];
      Minimum = Werte[i];
    
      for (i=0; i<10; i++)
      {
        Maximum = max(x, Maximum);
      }
    
      for (i=0; i<10; i++)
      {
        Minimum = min(y, Minimum);
      }
    
      cout << "Somit haben Sie Werte zwischen " << Minimum << " und " << Maximum;
      cout << " eingegeben!" << endl;
    
      return 0;
    }
    

    Ich verstehe nicht, warum beim letzten Satz für Minimum 0 und für Maximum 0 ausgegeben wird...

    Wo ist mein Denkfehler??

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • Das

    Maximum = Werte[i];
    Minimum = Werte[i];
    

    solltest du noch mal überdenken (insbesondere, da i zu diesem Zeitpunkt den Wert 10 hat).
    Und die beiden Schleifen darunter greifen doch gar nicht auf das Werte-Array zu...

    P.S. Und wenn dein Code dann funktioniert, dann schau dir mal die Funktionen min(), max(), min_element() und max_element() aus der Standard Library an.


  • Mod

    Fehlerliste:
    - Was passiert, wenn in Zeile 6 das x nicht größer ist als y?
    - Was passiert, wenn in Zeile 11 das y nicht kleiner ist als x?
    - Welchen Wert hat i in Zeile 34 und 35?
    - Was ist x in Zeile 39?
    - Was ist y in Zeile 44?



  • Also bei mir sind diese Fehlermeldungen nicht aufgetaucht...



  • doch klar. nämlich darin, dass du nicht das erwartete ergebnis herausbekommst.



  • Ich komme nicht auf die Lösung des Problems...

    Mein momentaner Code sieht so aus:

    #include <iostream>
    using namespace std;
    
    int main()
    {
      double Werte[10];
      int i;
    
      cout << "Geben Sie 10 Zahlen ein!" << endl;
    
      for (i=0; i<10; i++)
      {
        cout << "Wert[" << i << "]: "; 
        cin  >> Werte[i];
      }
    
      cout << "Sie haben Zahlen zwischen " << Werte[i] << " und " << Werte[i] << "eingegeben!" << endl;
    
      return 0;
    }
    

    Ich verstehe einfach nicht, wie ich es dem Computer beibringen kann, dass z. B. 2 der kleinste Wert und 1000 der größte Wert ist...

    Hättet ihr vielleicht einen Tipp?

    Gruß

    Max



  • silent_max schrieb:

    Ich verstehe einfach nicht, wie ich es dem Computer beibringen kann, dass z. B. 2 der kleinste Wert und 1000 der größte Wert ist...

    Das nennt sich programmieren. Am besten lernt man das mit einem Buch.


  • Mod

    silent_max schrieb:

    Hättet ihr vielleicht einen Tipp?

    Lern endlich programmieren! Von Anfang an, denn du kannst gar nichts. Lernen heißt nicht, dass du deine Hausaufgaben googelst, Codefragmente zusammenklickst oder in Foren nach Komplettlösungen bettelst. Wenn du nicht lernen möchtest: Dann lass das Programmieren doch endlich sein!



  • Was habe ich denn jetzt falsch gemacht???



  • silent_max schrieb:

    Was habe ich denn jetzt falsch gemacht???

    Das sieht inzwischen eher nach Faulheit statt Lernschwäche aus. Andere Tipps, als dir endlich mal 'n schlaues Buch zu besorgen und selbstständig deine Defizite im Bereich der Grundlagen zu reduzieren, bekommst du von mir auch nicht mehr.



  • silent_max schrieb:

    #include <iostream>
    using namespace std;
    
    int main()
    {
      double Werte[10];
      int i;
    
      cout << "Geben Sie 10 Zahlen ein!" << endl;
    
      for (i=0; i<10; i++)
      {
        cout << "Wert[" << i << "]: "; 
        cin  >> Werte[i];
      }
    
      cout << "Sie haben Zahlen zwischen " << Werte[i] << " und " << Werte[i] << "eingegeben!" << endl;
      
    
      double kleinster;
      double groesster = kleinster = Werte[0]; 
    
      /*nimm alle von Werte[1] bis Werte[9] (for-Schleife, so wie oben) und ...
      ... wenn einer kleiner als kleinster ist, dann:
      kleinster = Werte[i];
      und wenn er groesser als groesster ist:
      groesster = Werte[i];
    
      ... und fertig ...
      */
    
      return 0;
    }
    


  • ?

    int main()
    {
      int werte[10] = {0};
      int minimum,maximum;
    
      for(int i=0;i<10;i++)
      {
      	cin >> werte[i];
      	cout << endl;
      }
    
      minimum = werte[0];
      maximum = werte[0];
    
      for(int i=0;i<10;i++)
      {
      	if(werte[i] < minimum) minimum = werte[i];
      	if(werte[i] > maximum) maximum = werte[i];
      }
    
      cout << "Sie haben Werte zwischen " << minimum << " und " << maximum << " eingegeben!";
    
      return 0;
    }
    


  • Was habe ich denn jetzt falsch gemacht???

    Ohne Buch kann man einfach kein C++ lernen bzw. wird es eh nur Mist.

    PS: Es heißt "to keep a stiff upper lip", das macht mich ganz verrückt...



  • @david_k

    Großartig... Lerneffekt Null, dafür kommt der TE bald mit dem nächsten trivialen Problem wieder und will ´ne Lösung. Damit hast du hier niemandem einen Gefallen getan.



  • DocShoe schrieb:

    @david_k

    Großartig... Lerneffekt Null, dafür kommt der TE bald mit dem nächsten trivialen Problem wieder und will ´ne Lösung. Damit hast du hier niemandem einen Gefallen getan.

    Ich habe mir natürlich Gedanken gemacht.

    Mein momentaner Quellcode sieht so aus:

    double max(double x, double y)
    {
      if(x>y)
      {
        return x;
      }
    }
    
    double min(double x, double y)
    {
      if(x<y)
      {
        return y;
      }
    }
    
    double eingabe (double nummer)
    {
      double eingabe=0;
      return eingabe;
    }
    
    int main()
    {
      double Werte[10]
      int i; anzahl=0;
      double minimum, maximum;
    
      cout << "Geben Sie 10 Werte ein!" << endl;
    
      for(i=0; i<10; i++)
      {
        cout << "Wert[" << i << "]: ";
        cin  >> Werte[i];
      }
    
      maxium = eingabe (Werte[i]);
      minimum = eingabe (Werte[i]);
    
      for (i=0; i<=anzahl; i++)
      {
        maxium = max(eingabe(Werte[i]),maximum);
        minimum = min(eingabe(Werte[i]), minimum);
      }
    
      cout << "Sie haben Zahlen zwischen " << minimum << " und " << maximum " eingegeben!" << endl;
    
      return 0;
    }
    

    Der einzige Fehler, der jetzt noch besteht, ist der, dass die Ausgabe so aussieht:

    Sie haben Zahlen zwischen -1.#IND und -1.#IND eingegeben!
    

    Ich bin leider noch nicht darauf gekommen, wo der Fehler ist...



  • silent_max schrieb:

    Der einzige Fehler, der jetzt noch besteht, ist der, dass die Ausgabe so aussieht:

    Sie haben Zahlen zwischen -1.#IND und -1.#IND eingegeben!
    

    Ich bin leider noch nicht darauf gekommen, wo der Fehler ist...

    Nein, es gibt mehr als einen Fehler, und die sind eklatant offensichtlich. Eigentlich stimmt da überhaupt nichts. Auf Seite 1 hat SeppJ die Fehler übrigens schon aufgezählt, ohne dass du sie korrigiert hast. Geh dein Programm im Debugger durch und schau dir an, wie sich die Werte während der Laufzeit verändern. Oder mach´s mit ´nem Zettel und Stift, wenn du den Umgang mit dem Debugger noch nicht beherrschst. Langfristig solltest du den Umgang mit einem Debugger allerdings beherrschen.

    Edit:
    Stell deinem Compiler mal so ein, dass er Warnungen wie Fehler behandelt. Dann kompiliert dein Code nicht einmal.



  • Es hat lange gedauert, bis ich auf die Lösung gekommen bin, aber ich habe sie immerhin.

    Also hier der Code:

    #include <iostream>
    using namespace std;
    
    int main()
    {
      const int ANZ = 5;
    
      double Werte[ANZ];
      double a,b,Min,Max;
      double aktEl;
      int i=0;
    
      cout << "Geben Sie 5 Werte ein!\n";
    
      //Eingabe
      for(i=0; i<ANZ; i++)
      {
        cout << "Wert[" << i << "]:";
        cin  >> Werte[i];
      }
    
      //Bestimmung des kleinsten und größten Elementes des Feldes
    
      Min = Werte[0];
      Max = Werte[0];
    
      for(i=1; i<ANZ; i++)
      {
        aktEl = Werte[i];
        if(aktEl < Min)
          Min = aktEl;
        if(aktEl > Max)
          Max = aktEl;
      }
    
      cout << "Sie haben Zahlen zwischen " << Min << " und " << Max << "eingegeben!\n";
    
      return 0;
    }
    

    Ich hoffe, ihr seid mit der Lösung zufrieden???

    Gruß

    Max


  • Mod

    silent_max schrieb:

    Ich hoffe, ihr seid mit der Lösung zufrieden???

    Leider nein. Hast du sie nicht selber ausprobiert? Das compiliert ja nicht einmal:

    test.cc: In function 'int main()':
    test.cc:20:3: error: expected ';' before '}' token
       }
       ^
    

    Selbst wenn ich den Fehler korrigiere:

    test.cc: In function 'int main()':
    test.cc:9:10: warning: unused variable 'a' [-Wunused-variable]
       double a,b,Min,Max;
              ^
    test.cc:9:12: warning: unused variable 'b' [-Wunused-variable]
       double a,b,Min,Max;
                ^
    test.cc:9:14: warning: 'Min' is used uninitialized in this function [-Wuninitialized]
       double a,b,Min,Max;
                  ^
    test.cc:9:18: warning: 'Max' is used uninitialized in this function [-Wuninitialized]
       double a,b,Min,Max;
                      ^
    

    Entsprechend:

    Geben Sie 5 Werte ein!
    Wert[0]:66
    Wert[1]:44
    Wert[2]:88
    Wert[3]:33
    Wert[4]:78
    Sie haben Zahlen zwischen 0 und 88eingegeben!
    

    🙄



  • Sorry ... habe zwei Zeilen vergessen. Muss ich gleich editieren...

    Edit:

    @SeppJ: Jetzt müsste es passen.

    Gruß



  • Hinter

    cin  >> Werte[i]
    

    fehlt ein Semikolon. Du solltest darauf achten, dass du dein Programm vor dem Posten selber noch mal kompilierst.

    Ansonsten scheint es aber korrekt zu funktionieren.

    In C++ muss man die Variablen nicht am Blockanfang initialisieren:

    for(int i=1; i<ANZ; i++)
    

    geht auch.

    Die Variablen a und b werden deklariert aber nie genutzt.


  • Mod

    silent_max schrieb:

    Sorry ... habe zwei Zeilen vergessen. Muss ich gleich editieren...

    Benutz doch Copy&Paste wie jeder sonst auch.

    @SeppJ: Jetzt müsste es passen.

    Compiliert immer noch nicht. Mit eigenständiger Fehlerbehebung durch mich, erfüllt es nun teilweise die Aufgabe. Es bleiben jedoch unbenutzte Variablen, die dir nicht auffallen, wegen des schlechten Stils.


Anmelden zum Antworten