Frage zu einer Eingabefolge



  • Machen wir es mal mit Code:

    bool monoton_steigend = false;
    bool monoton_steigend = true;
    
    int alte_zahl;
    int neue_zahl;
    std::cin >> alte_zahl;
    while (alte_zahl != 0) {
       std::cin >> neue_zahl;
       if (neue_zahl < alte_zahl) monoton_fallend = true;
       if (neue_zahl > alte_zahl) monoton_steigend = true;
       alte_zahl = neue_zahl;
    }
    if (monoton_fallend and monoton_steigend) {
       std::cout << "Folge ist ungeordnet" << std::endl;
       return 0;
    }
    if (monoton_fallend) {
       std::cout << "Folge ist monoton fallend" << std::endl;
       return 0;
    }
    if (monoton_steigend) {
       std::cout << "Folge ist monoton steigend" << std::endl;
       return 0;
    }
    std::cout << "Folge ist sowohl monoton fallend als auch steigend" << std::endl;
    


  • Hi Ponto.
    So, noch einmal.

    Du hast angefangen mit

    bool monoton_steigend = false;
    bool monoton_steigend = true ; war das so geplant ?

    müsste es nicht so heißen ?

    bool monoton_steigend = false;
    bool monoton_fallend = false;

    das andere geht auch gar nicht durch meinen Compiler.

    Aber selbst wenn ich alles zu Beginn auf false setze, läuft ds Programm nicht richtig. Mit fallend und ungeordnet geht alles wunderbar, nur wenn ich eine steigende Folge eingebe, gibt er immer ungeordnet aus.

    Wenn du mir das noch erklären könntest, wäre ich dir unendlich dankbar und würde dich nie wieder belästigen 🙂

    Grüße Chiro



  • Da sollte false hin, das hast du schon korrekt erkannt. Wie sieht das Programm bei dir genau aus?



  • Hier:

    #include<iostream>
    using namespace std;

    int main()
    {
    bool monoton_steigend = false;
    bool monoton_fallend = true;
    int alte_zahl;
    int neue_zahl;

    cout<<"Bitte geben Sie eine Zahl ein: ";
    cin>>alte_zahl;

    while (alte_zahl !=0)
    {
    cout<<"Bitte geben Sie eine Zahl ein: ";
    cin>>neue_zahl;
    if(neue_zahl<alte_zahl) monoton_fallend =true;
    if(neue_zahl>alte_zahl) monoton_steigend =true;
    alte_zahl=neue_zahl;
    }
    if(monoton_fallend ==true && monoton_steigend ==true){ cout<<"Folge ist ungeordnet";
    return 0;
    }
    if(monoton_fallend==true){ cout<<"Folge ist monoton fallend !";
    return 0;
    }
    if(monoton_steigend==true){ cout<<"Folge ist monoton steigend !";
    return 0;
    }
    }



  • 1. Du hast den Fall, dass die Folge beides ist rausgenommen. 1 1 1 1 1 ist zum Beispiel monoton fallend und monoton steigend.
    2. Das Problem ist deine Abbruchbedingung. Wenn du eine 0 eingibst so brichst du die Schleife nicht sofort ab, sondern verarbeitest die 0 zuerst. War die Folge vorher monoton steigend, so wird sie ungeordnet. Deshalb sollte nach der Eingabe der Zahl eine Abfrage, ob es die 0 ist. Steht in der Aufgabenstellung wie die Zahlen eingegeben werden?



  • Nein, das hier ist die komplette Aufgabenstellung :

    Schreiben und testen Sie ein Programm, das eine Folge von ganzen Zahlen einliest, bis eine 0 eingegeben wird und ausgibt, ob die eingegebene Zahlenfolge monoton steigend, monoton fallend oder ungeordnet war. Dazu genügt es, das Monotonieverhalten der bisher eingegebenen Folge zu speichern und bei Eingabe jeder neuen Zahl zu aktualisieren.. Speichern Sie die eingegebenen Zahlen nicht in einem Array.



  • Ok, dann hast du jetzt eine funktionierende Variante?



  • Meine Güte hier hat sich über den Tag ja richtig was getan!
    @chiro:
    Nochwas kleines: Ab jetz code-tags benutzen. Siehe dazu eventuell auch hier. 😉

    Caipi



  • Nein 😞
    Wir haben in der Vorlesung gesagt bekommen, dass, bei der Bedingung einer while-Schleife, dies Abgebrochen wird, wenn der Wert "erreicht" ist.
    Da war nichts davon zu hören, dass sie Eingabe dann noch verarbeitet wird.

    Ich muss dem Programm nun ""nur"" noch erzählen, dass bei Eingabe einer 0 sofort abgebrochen wird, ohne das die 0 noch verarbeitet wird.

    Hmmm....



  • while (alte_zahl !=0) 
     { 
     cout<<"Bitte geben Sie eine Zahl ein: "; 
     cin>>neue_zahl; 
     if (neue_zahl == 0) break;
     if(neue_zahl<alte_zahl) monoton_fallend =true; 
     if(neue_zahl>alte_zahl) monoton_steigend =true; 
     alte_zahl=neue_zahl; 
     }
    

Anmelden zum Antworten