Zahlenfolgen



  • Hallo zusammen:),
    ich muss eine Funktion schreiben, die ein Folge von positiven Zahlen einliest.Die Anzahl der Zahlen kann beliebig sein. Zusätzlich muss ich das Minimum der Zahlenfolge sowie das Minimum bestimmen.

    Ich habe das zunächst folgendermaßen versucht:

    int numbers()
    
    {int eingabe;
    int min=numeric_limits<int>::max();
    int Mittelwert=0;
    int sum=0;
    int counter=0;
    
    while(eingabe>0)
    { 
    
        counter++;
    
        sum= sum+eingabe;
        Mittelwert= sum/counter;
    
       if(eingabe<min)
        {
            min=eingabe;
        }
    }
    
       cout<<sum<<endl;
       cout<<min<<endl;
    cout <<Mittelwert<<endl;
    
        return 0;
    }
    

    Jedoch hat das nicht funktioniert.
    Dann habe ich eine do-While-Schlefe gemacht, mit der gehts:

    int numbers()
    {
        int pos;
        int num = 0
        int min = numeric_limits<int>::max();
        int sum = 0;
    
        do 
        {
            cin>>pos;
            if (pos > 0)
            {
                num++;
                if (min > pos)
                {
                    min = pos;
                }
                sum = sum + pos;
            }
        }
        while (pos > 0);
    

    Wieso funktioniert das nicht mit der normalen While-Schleife?

    MfG



  • Weil du eingabe nicht initialisiert hast und in der while-Bedinung drauf zugreifst.

    PS:
    Das kann man auch schöner lösen, ohne min vorher zu besetzen. Der erste eingegebene Wert ist immer das Minimum, danach brauchst du erst zu vergleichen.

    ...
       if( Counter == 0 ) min = eingabe;
       else if( eingabe < min ) min = eingabe;
    
       ++Counter;              
    ...
    

    PPS:
    Benutz´ bitte Code-Tags


  • Mod

    Das hat nichts mit den Schleifenkonstruktionen zu tun. Bei der ersten Variante fehlt schlicht und einfach das Einlesen der Eingaben.

    Rein logisch betrachtet wäre while passender als do..while, denn schließlich kann es auch sein, dass der Nutzer keine einzige Zahl eingibt. Außerdem hast du bei der do..while-Lösung die hässliche doppelte Prüfung, einmal im if und später noch einmal im while. Das liegt da dran, dass die do..while-Logik hier einfach unpassend ist.

    Daher:

    while((cin >> eingabe) && (eingabe > 0))
    {
      ...
    }
    

    Das sieht mir übrigens auch eher nach richtigem C++ als nach C++/CLI aus.



  • Vielen Dank für eure Antworten 🙂

    Jedoch verstehe ich nicht, warum das Einlesen der Zahlen nicht vor der Bedinung stattfinden darf?

    Sprich:

    cout<<"Bitte geben Sie Zahlen ein";
    cin>>eingabe;
    
    while(eingabe>0)
    

    Denn wenn ich das mache, bricht er bei der Eingabe von negativen Zahlen nicht ab?



  • Doch, genau das passiert. Soll es das nicht auch?



  • Entschuldige, ich habe beim ersten mal vergessen zu erwähnen, dass der Benutzer so lange die Zahlen eingeben kann, bis eine 0 oder eine negative Zahl eingegeben wird.



  • Ja und?



  • 😃 ja, die Eingabe soll ja abbrechen(bzw. die While-Schleife), sobald eine negative Zahl oder 0 eingegeben wird.
    Das tut es aber nicht wenn ich das so schreibe:
    cin>>eingabe;
    while(eingabe>0);



  • Was passiert denn, wenn er eine 0 oder eine negative Zahl eingibt?



  • nichts, man kann weiter die Zahlen eingebeben.



  • Dann zeig doch noch mal deinen Code.


Anmelden zum Antworten