Unabhängiger Aufwärtszähler
-
Hallo liebe Gemeinde.
Ich wollte folgendes Programmieren:
Man gibt eine Zahl zwischen 0 und 250 ein und eine andere zwischen 251 und 500.
Wenn man z. B. bei der ersten Zahl 17 eingibt, soll von 17 aus bis 250 gezählt werden. Das gleiche bei der Zahl 2 bis 500. Beide Aufwärtszähler sollen unabhängig voneinander und nebeneinander hochzählen.Bsp:
Zahl 1: 144 Zahl 2: 499
Zahl 1: 145 Zahl 2: 500
Zahl 1: 146
Zahl 1: 147
Zahl 1: 148
[...]
Zahl 1: 249
Zahl 1: 250Wenn man jedoch bei der Zahl 1 eine Zahl > 250 oder bei Zahl 2 eine Zahl < als 251 eingibt, soll eine Fehlermeldung ausgegeben werden.
Folgenden Code habe ich aufgesetzt:
#include <iostream> using namespace std; int main() { float Zahl1, Zahl 2; cout << endl; cout << "Geben Sie zwei Zahlen ein!" << endl; cout << "Zahl 1: "; cin >> Zahl1; cout << "Zahl 2: "; cin >> Zahl2; cout << endl; if (((Zahl1>=0)&&(Zahl1<=250))&&((Zahl2>=251)&&(Zahl2<=500))) { for(Zahl1=Zahl1, Zahl2=Zahl2; Zahl1<=250, Zahl2<=500; Zahl1++, Zahl2++) { cout << "Zahl 1: " << Zahl1 << "Zahl 2: " << Zahl2 << endl } } else (((Zahl1>=250)&&(Zahl1<=500))||((Zahl2>=0)&&(Zahl2<=250))) { cout << "Error!" << endl; } return 0; }Bei mir klappt es jedoch nicht.
Wenn ich z. B. bei Zahl1 10 eingebe und bei Zahl2 0, dann zählt Zahl1 bis 260.
Beispiel:
Zahl 1 = 10 Zahl 2 = 0
Zahl 1 = 11 Zahl 2 = 1
Zahl 1 = 12 Zahl 2 = 2
[...]
Zahl 1 = 259 Zahl 2 = 499
Zahl 1 = 260 Zahl 2 = 500Das will ich nicht. Zahl1 soll bei 250 aufhören, während Zahl2 bis 500 fertig zählt.
Hätte jemand von euch einen Vorschlag, wie ich das Lösen kann?
Vielen Dank für die Antworten im Voraus.
Gruß
Max
-
Hallo,
das Komma in der Bedingung deiner for-Schleife ist der Fehler:
Zahl1<=250, Zahl2<=500Ersetze es durch den passenden logischen Operator (&& oder ||), je nachdem wie die Aufgabenstellung zu verstehen ist...
P.S: Wenn du innerhalb der Schleife nur je eine Zahl weiterzählen lassen willst (wenn die andere schon die Grenze erreicht hat), dann mußt du das Inkrementieren mit einer if-Anweisung verknüpfen (anstatt stumpf in der for-Schleife immer hochzuzählen).
-
Bitte poste in Zukunft bitte Code nur per Copy & Paste. Dein Code kann nicht compilieren und somit auch unmöglich die gezeigte Ausgabe erzeugt haben. Siehe dazu den dritten Link in meiner Signatur.
Hier hattest du Glück, dass das Problem immer noch erkennbar war. Oder war es das? Vielleicht hat Th69 ja auch ein ganz anderes Problem gelöst, welches gar nicht in deinem eigentlichen Code zu finden ist und dein eigentliches Problem ist beim Abschreiben verschwunden. Dann hättest du seine Zeit verschwendet.
-
Das sieht irre aus ...
Nimm einfach#include <iostream> #include <utility> #include <limits> int main() { unsigned short first, second; for(;;) { std::cout << "Zahl1: "; std::cin >> first; std::cout << "Zahl2: "; std::cin >> second; if(!std::cin.good()) ///Wenn wegen irgend einem Scheiß ein Fehlerbit gesetzt wurde (bspw. jemand gibt "a" ein)... { std::cin.clear();///Fehlerstatus zurücksetzen std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');///Ignoriere *alle* Zeichen bis zum nächsten newline std::cout << "\nJetz ma ehrlich....\n";///Dem Idioten die Meinung sagen continue;/// Nochmal von vorne... } if(first > 250 //Prüfen, ob die Zahlen im falschen Bereich liegen or second < 251 or second > 500) std::cout << "Nein!\n";///Evt. (wenn du es kannst) mit exceptions } }
-
Sone schrieb:
Das sieht irre aus ...
Das hast du schön erkannt, dass dein Code irre ist. Er löst noch nicht einmal die Aufgabenstellung, löst stattdessen ein Problem, welches hier überhaupt nicht gefragt war, zudem auch noch suboptimal und trägt somit überhaupt nichts zum Thread bei, außer beleidigen und angeben zu wollen.
Zudem wäre ein Komplettlösung hier wohl ohnehin didaktisch falsch, auch wenn es einigen wahrscheinlich in den Fingern juckt.
-
[quote="SeppJ"]
Sone schrieb:
Zudem wäre ein Komplettlösung hier wohl ohnehin didaktisch falsch, auch wenn es einigen wahrscheinlich in den Fingern juckt.
Da du Sone schon das vierte Mal innerhalb einer kurzen Zeitspanne beleidigst, kann ich nur daraus schließen dass du ihn loswerden willst. Wenn du das willst, dann verbanne ihn einfach, anstatt nutzlose Postings zu fabrizieren.
-
Das Problem ist in deiner zweiten for-schleife. Schau dir mal an ob du
,oder
&&willst.
Das Komma macht nicht das was du meinst.
(Außerdem, was verstehst du unter unabhängig
(Na gut, mit Threads will ich dich jetzt nicht plagen. ))
-
if (((Zahl1>=0)&&(Zahl1<=250))&&((Zahl2>=251)&&(Zahl2<=500)))Die ganzen Klammern sind unnoetig:
if (Zahl1>=0 && Zahl1<=250 && Zahl2>=251 && Zahl2<=500)Sie sind aber auch kein Fehler. In deinem Fall tragen sie aber nicht unbedingt zur Uebersichtlichkeit bei, finde ich ...
Was haben diese Anweisungen im for-Kopf fuer einen Sinn?
Zahl1=Zahl1, Zahl2=Zahl2Der Komma-Operator dient dazu mehrere Ausdruecke von links nach rechts auszuwerten, wobei nur das Ergebnis des letzten Ausdrucks zurueckgegeben wird, also durch
Zahl1<=250, Zahl2<=500pruefst du eigenntlich nur
Zahl<=500Der zusaetzliche Ausdruck nach
elsehat hier gar nichts zu suchen, ich schaetze mal du hast im Original Code einelse ifstehen. Wie auch immer - das ist gar nicht noetig.elseheisst einfach "was anderes" und reicht allein vollkommen aus (du moechtest ja eine Fehlermeldung ausgeben, wenn der Benutzer was anderes eingegeben hat.Die for-Schleife, die du benutzt kann so gar nicht zur Loesung fuehren. Ich wuerde eine einfache
whileSchleife benutzen un darin nur pruefen, ob sich einer der Zahlen noch im gueltigen Bereich befindet. Den Rest wuerde ich in der Schleife machen.Hier mein Loesungsvorschlag zum selberbasteln:
Solange sich einer der Zahlen im gueltigen Bereich befindet: gib Zahl1 aus und erhoehe sie, wenn sich Zahl1 noch im gueltigen Bereich findet; Dasselbe fuer Zahl2
-
Also ich habe die for - Schleife einmal aufgenabelt.
for(Zahl1=Zahl1; Zahl1<=250; Zahl1++) { cout << "Zahl1: " << Zahl1 << endl; } for(Zahl2=Zahl2; Zahl2<=500; Zahl2++) { cout << "Zahl2: " << Zahl2 << endl; }Zumindest zählen jetzt beide unabhängig voneinander.
Ich weiß aber immer noch nicht, wie ich die beiden Zahlen, also Zahl1 und Zahl2, nebeneinander bringen kann.
Ist eigentlich dafür eine For - Schleife geeignet?
@Ferris:
Zahl1=Zahl1, Zahl2=Zahl2Das soll einfach den folgenden Sinn haben:
Zahl1 soll von x bis 250 und Zahl2 soll von y bis 500 zählen.Der Grundgedanke war einfach der, die beiden Zahlen nebeneinander und unabhängig voneinander hochzählen zu lassen.
Bsp:
Zahl1: 140 Zahl2: 354
Zahl1: 141 Zahl2: 355
Zahl1: 142 Zahl2: 356
Zahl1: 143 Zahl2: 357
[...]
Zahl1: 250 Zahl2: 500Mehr wollte ich gar nicht.
@afasdfasf
Ich hoffe, dass ich niemanden dazu genötigt habe, mich zu verbannen??????
-
silent_max schrieb:
Zahl1=Zahl1, Zahl2=Zahl2Das soll einfach den folgenden Sinn haben:
Zahl1 soll von x bis 250 und Zahl2 soll von y bis 500 zählen.Eine Selbstzuweisung ist immer Schwachsinn.

Außer man treibt Spielchen mit Klassen, die im Zuweisungs-Operator irgendwelchen Blödsinn stehen haben (was aber schlechtes "Design" ist, oder wie man spezifisch das nennt).silent_max schrieb:
Der Grundgedanke war einfach der, die beiden Zahlen nebeneinander und unabhängig voneinander hochzählen zu lassen.
Bsp:
Zahl1: 140 Zahl2: 354
Zahl1: 141 Zahl2: 355
Zahl1: 142 Zahl2: 356
Zahl1: 143 Zahl2: 357
[...]
Zahl1: 250 Zahl2: 500Mehr wollte ich gar nicht.
Und wieso nicht
for(; Zahl1 <= 250 && Zahl2 <= 500; ++Zahl2, ++Zahl1) cout << "Zahl1: " << Zahl1 << " Zahl2: " << Zahl2 << endl;?
Falls eine der beiden Zahlen nicht "bis zum Ende kommt", dann schreib das rein - lässt sich leicht lösen.Ich hoffe, dass ich niemanden dazu genötigt habe, mich zu verbannen??????
Näh, du hast doch keine Scheiße gebaut. Ich wurde doch mit gutem Grund gebannt (wie lang eigentlich?).
-
Du musst aufjedenfall alles in eine Schleife packen, wenn du die Zahlen nebeneinander ausgeben willst, aber
forist hier sinnlos.
Die Loesung ist echt nicht schwer, du hast es dir mit deinen for-Schleifen nur unnoetig kompliziert gemacht.while (Zahl1 <= 250 || Zahl2 <= 500) { if (Zahl1 <= 250) std::cout << "Zahl1:\t" << Zahl1++ << "\t"; else std::cout << "\t\t"; if (Zahl2 <= 500) std::cout << "Zahl2:\t" << Zahl2++; std::cout << std::endl; }