Frage zu einer Eingabefolge
-
Hi Ponto.
Ich danke dir, dass du dich zunächst bemüht hast, mir keine Lösung zu geben, denn das sollte ja dann letztendlich doch an mir liegen.
Deine verschiedenen Ansätze versteh ich auch, aber das ändert halt immer nch nix daran, dass ich nicht weiß, wie ich das jetzt Programmieren soll.Denn mein Hauptproblem ist immernoch, wie ich mir im Programm merken kann, dass die Folge vorher eine bestimmte Monotonie hatte.
Aber ich werde jetzt mal noch ne Weile rumprobieren, vielleicht komm ich ja dann irgendwann auf nen grünen Zweig.Also nochmal, Vielen Dank
-
chiro schrieb:
Hi Ponto.
Ich danke dir, dass du dich zunächst bemüht hast, mir keine Lösung zu geben, denn das sollte ja dann letztendlich doch an mir liegen.
Deine verschiedenen Ansätze versteh ich auch, aber das ändert halt immer nch nix daran, dass ich nicht weiß, wie ich das jetzt Programmieren soll.Denn mein Hauptproblem ist immernoch, wie ich mir im Programm merken kann, dass die Folge vorher eine bestimmte Monotonie hatte.
Aber ich werde jetzt mal noch ne Weile rumprobieren, vielleicht komm ich ja dann irgendwann auf nen grünen Zweig.Also nochmal, Vielen Dank
bool ist_fallend = ( wert1 > wert2);
bool ist_steigend = (wert1 < wert2);
-
Hi Ponto.
Es ist mir echt schon peinlich, aber ich habs immer noch nicht geschafft.
Aber mitlerweile weiß ich ganz genau wo mein Problem liegt.
Also, ich lese 2 Zahlen ein(Kann ich).Über diese 2 Zahlen treffe ich eine Monotonieentscheidung(kann ich auch).
So jetzt kommt es.
Ich hatte mir halt überlegt, dass Programm so ablaufen:Bitte geben Sie eine Zahl ein: a
Bitte geben Sie eine Zahl ein: b
Bitte geben Sie eine Zahl ein: c
Bitte geben Sie eine Zahl ein: 0Die Folge ist monoton... .
Wenn ich nun allerdings nach den ersten 2 Zahlen noch eine eingeben will, weiß man Programm halt nicht mehr was vorher war.
So werden halt nur immer die letzten 2 Zahlen betrachtet und alle Zahlen vorher total "vergessen".
Vielleicht kann sich mir ja nochmal jemand erbarmen.
-
Dann versuch's ich nochmal
In einem kurzen Schritt (wenn n nicht die zuerst eingegebene zahl):
Die Zahl n wird eingegeben n mit x (Die vorher eingegebene Zahl und in x gespeicherte) vergleichen; Anhand dieses Vergleiches das jeweilige Status-Flag (monoton_steigend = true || monoton_fallend = true) setzen; x den Wert von n zuweisen. (Um aktuelle Zahl wieder zu speichern) ... Ausgabe: Wenn nur eins der Flags true ist, dann ist es entweder monoton_steigend oder monoton_fallend ansonsten ungeordnet. Dazu sollten vor der gesamten Eingabe die Status-Flags mit false vorbelegt werden.
Und just by the way: Gehört das nicht besser ins Standard-C++-Forum?
Caipi
-
Hi Caipi.
Zunächst mal danke. Das mit dem falschen Forum, ja sorry, aber ich wußte halt nicht wohin sonst.
Trotz deiner großen Hilfe hab ich es wirklich immernoch nicht geschafft, die Aufgabe zu lösen. *schäm*
Egal welche Folge ich eingebe, es kommt immer nur monoton steigen raus.
Deswegen poste ich hier mal meinen Code, vielleicht kannste mir daran ja sagen, wo mein(e) Fehler liegt/liegen.#include<iostream>
using namespace std;int main()
{
int a;
int n;
int x;bool monoton_steigend;
bool monoton_fallend;monoton_steigend=false;
monoton_fallend =false;while (x!=0)
{
cout<<"Bitte eine Zahl eingeben:";
cin>> a;
x=a;
cout<<"Bitte eine Zahl eingeben:";
cin>> n;
if (x>n) monoton_fallend=true;
else if (x<n) monoton_steigend=true;
x=n;
}
if(monoton_steigend=true) cout<<"Die Folge ist monoton steigend !";
else if (monoton_fallend=true) cout<<"Die Folge ist monoton fallend !";
else cout<<"Die Folge ist ungeordnet !";
}Ohjee, jetzt denkste bestimmt, was ist das denn, aber ich bin ganz neu in der C++ Programmierung. Also, das bitte nicht vergessen
Grüße Chiro
-
Gar nicht so übel für den Anfang. Aber du solltest pro Schleifendurchlauf nur eine neue Zahl einlesen. Und für das andere Problem formatieren wir die letzte Abfrage mal anders:
if(monoton_steigend=true) { cout<<"Die Folge ist monoton steigend !"; } else { if (monoton_fallend=true) { cout<<"Die Folge ist monoton fallend !"; } else { cout<<"Die Folge ist ungeordnet !"; } }
Das entspricht dem, was du gemacht hast. Bist du sicher, dass du das so machen wolltest? Zum Beispiel ist eine Folge nicht monoton_steigend, wenn beide Variablen auf true gesetzt sind.
-
Hallo Ponto, mal wieder
Meinst du mit, pro Schleifendurchlauf nur eine Zahl einlesen, das ich 2 Schleifen machen soll, wo in der ersten die erste und in der zweiten die zweite Zahl eingelesen wird ?
Also ich hab mir das dann so vorgestellt. Da ja zunächst beide bool werte auf false gesetzt wurden, wird doch nach dem Schleifendurchlauf doch nur eine der beiden werte auf true gesetzt.(Also, das dachte ich zumindest bis jetzt).
Somit dürften doch eigentlich bei der Ausgabe, also bei der If - Anweisung, keine Probleme auftreten, da ja entweder nur monoton_seigend oder monoton_fallend auf true gesetzt ist.
-
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