Frage zu einer Eingabefolge



  • Hi.
    @ Tomas : Danke, das hilft mir schonmal weiter.

    @Ponto : Ja eben, die 2. und die 3. Zahl vergleiche ich eben nicht miteinander, denn ich hab Probleme damit, die zeite Zahl zur neuen Ersten zu machen.
    Aber ich werd noch ein wenig weiter knobeln.



  • chiro schrieb:

    Hi.
    @ Tomas : Danke, das hilft mir schonmal weiter.

    @Ponto : Ja eben, die 2. und die 3. Zahl vergleiche ich eben nicht miteinander, denn ich hab Probleme damit, die zeite Zahl zur neuen Ersten zu machen.
    Aber ich werd noch ein wenig weiter knobeln.

    Wie wäre es wenn du deine Variablen so nennst:

    alte_zahl
    neue_zahl

    Was musst du machen, damit alte_zahl den Wert von neue_zahl hat?



  • Ich bekomm hier echt gleich Knoten ins Gehirn.
    Ich weiß nicht, warum ich mich so dämlich dran stelle. Es tut mir echt Leid.
    Naja, ich muss halt der neuen Zahl den Wert der alten Zahl zuweisen.
    Aber dafür war ja mein x ursprünglich da, wobei das so wohl offensichtlich falsch ist.
    Allerdings komm ich jetzt so langsam, mit meinen Variablen durcheinander.
    Brauch ich das x eigentlich?
    Also:
    Zahl eingeben, sagen wir a.
    Schleife beginnt.while(x!=0) ???????
    Zweite Zahl einlesen, was ja jetzt die alte_Zahl wäre.
    Jetzt alte_zahl mit a vergleichen und steigung merken.
    neue_Zahl(=mein x ??) = alte_Zahl
    Schleifenende

    Dann die Auswertung.

    ????????



  • 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