Zahlendreherprogramm läuft nicht wie gewünscht
-
ich bin mir sicher dass ich richtig mitgeschrieben habe, da ich das blatt habe, auf dass mein lehrer den kompletten quelltext geschrieben hat ( als er es mir erklärt hat). aber jetzt verstehe ich es nichtmehr wirklich und funktionieren tut es auch nichtmehr
also irgendwas kann da doch nich stimmen...
danke für weitere hilfe
-
dennis.cpp schrieb:
- uninitialisiert ist und
Das wird's sein.
- in der Gleichung sowohl als lvalue, als auch als rvalue verwendet wird. Ich glaube gelesen zu haben, dass das Ergebnis in diesem Fall nicht definiert ist (bin aber selbst noch Anfänger und nicht sicher).
Dies hingegen ist überhaupt gar kein Problem und ziemlicher Alltag.
-
und was muss ich jetzt machen, damit es funktioniert?
tut mir leid, aber ich bin wirklich blutiger anfänger -.-
-
goldfit schrieb:
und was muss ich jetzt machen, damit es funktioniert?
tut mir leid, aber ich bin wirklich blutiger anfänger -.-Eine simple Änderung der Zeile 9 zu
int a=0;sollte reichen. Mach dir aber unbedingt klar, warum dies funktioniert und das andere nicht!
-
Okay, vielen dank!
dadurch, dass ich a=0 setze, bekomme ich die erste zahl ras, a wird dann erstzt und so kommen die anderen zahlen zu stande! (also so verstehe ich es zumindestens)
vielen dank das hat mir einiges grübeln erspart!
geruhsame nacht wünsche ich
-
goldfit schrieb:
Okay, vielen dank!
dadurch, dass ich a=0 setze, bekomme ich die erste zahl ras, a wird dann erstzt und so kommen die anderen zahlen zu stande! (also so verstehe ich es zumindestens)
vielen dank das hat mir einiges grübeln erspart!
geruhsame nacht wünsche ich
Ja, aber verstehst du, warum es vorher falsch war? Das a wird in der Rechnung selber benutzt. Aber welchen Wert hatte a denn bei deinem alten Programm? Dies ist wichtig zu wissen!
-
a hätte garkeinen wert und kann deshalb nicht benutzt werden. so hat a den wert 0 und dieser ändert sich nach der ersten rechnung in ein neues a. ich weiß nicht, ob meine erklärung so richtig ist aber ich weiß nichtm wie ich mich besser ausdrücken kann. auf jeden fall habe ich verstanden, warum es vorher nicht geklappt hat und auch, warum es jetzt funktioniert.
vielen dank dafür
-
"Garkein Wert" existiert für int nicht, in deinem Fall hatte a einen zufälligen Wert und führte zu unbrauchbaren Ergebnissen.
Wertetypen haben immer einen Wert, im schlimmsten Fall ist er halt uninitialisiert und damit zufällig.
-
Man könnte auch die ganze Rechnung etwas optimieren. Wodurch auch die Funktion besser ersichtlich wird. Die Formel habe ich dazu nicht verändert, nur gleich die jeweils richtigen Operatoren angewendet.
while (z > 0) { a *= BASIS + z % BASIS; z /= BASIS; }%, ist der Modulo-Operator, der dir den Rest berechnet. Nichts anderes erreichst du mitx/10*10.
Wenn ich+=schreibe, dann wird der Rechte Operand auf den linken angewendet und im linken gespeichert. Dies geht mit allen Rechenarten. Sprichx *= 10;, heißt x wird um den Faktor 10 verändert.
-
Wäre es nicht passender für so etwas mit Zeichenketten zu arbeiten? Also so ungefähr:
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string input; cin >> input; reverse(input.begin(), input.end()); cout << input << '\n'; }
-
Paul Müller schrieb:
a *= BASIS + z % BASIS;Das ist so...nicht ganz korrekt.1 So, wie es da steht, ist es äquivalent zu
a = a * (BASIS + z % BASIS);, gewollt ist aber
a = a * BASIS + z % BASIS;1Schrecklicher Film, ich weiß, aber das Zitat ist sehr nützlich.
