Frage zu einer Eingabefolge
-
Was machst du wenn du zur Zeit nur 3 Zahlen eingeben willst?
Und vergleichst du auch die zweite mit der dritten?Ich würde es so machen:
Erste Zahl einlesen
Schleife beginnt
Zweite Zahl einlesen
Vergleichen und Steigung merken
Die zweite Zahl wird zur neuen ersten
Schleife endet
Auswertung
-
chiro schrieb:
if(monoton_steigend=true) cout<<"Die Folge ist monoton steigend !"; else if (monoton_fallend=true) cout<<"Die Folge ist monoton fallend !";
Da liegt ein Fehler.
Kennst Du den Unterschied zwischen dem Operator = und dem Operator ==?= weist zu,
== vergleicht.Was Du hier machen willst, ist vergleichen, und nicht zuweisen!
-
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_zahlWas 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
SchleifenendeDann 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; }