Hallo liebes Forum,
ich bin noch recht neu in der Welt der Programmierung und habe deshalb eine (für euch bestimmt
) simple Frage:
Ich habe einige Übungen für C++ auf diversen Internetseiten durchgeführt und
Ziel dieser Aufgabe war die eingabe einer Zahl, deren Zahlenfolge durch eine Funktion invertiert werden soll.
(aus 1234 wird 4321).
Dazu habe ich zunächst die Stellen der Zahl ermittelt - was auch fehlerfrei funktioniert -
und danach die Zahl über den Modulo-Operator niedergebrochen.
Die somit ermittelten Einzelzahlen habe ich mit 10 und der Stelle in der Zahl als Exponent multipliziert und in einer temporären Variablen gespeichert.
Hier die Funktion:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
void turn(unsigned long &tu_zahl, int tu_stellen)
{
if(tu_zahl > 0)
{
l_TempErgebnis += tu_zahl%10 * pow(10, (tu_stellen) - 1);
cout << "Ergebnis der Potenzrechnung: " << pow(10, (tu_stellen) - 1) << endl;
tu_zahl /= 10;
tu_stellen--;
cout << "Ergebnis: " << l_TempErgebnis << "| Zahl: " << tu_zahl << "| Stellen: " << tu_stellen << endl << endl;;
turn(tu_zahl, tu_stellen);
}
else
{
tu_zahl = l_TempErgebnis;
cout << "Endergebnis: " << tu_zahl << endl;
}
}
|
Dieser Code funktioniert auch wunderbar. Auf der 32-Bit Maschine bis zu 7 Stellen und auf der 64-Bit Maschine bis zu 9 Stellen (hängt wahrscheinlich mit der unterschiedlichen Länge von long zusammen).
32-Bit:
Nun ja, am Anfang kam mir der Fehler, dass z.B. 123456789 zu 987654319 wird noch recht Spanisch vor, daher habe ich pro Durchgang eine Testausgabe erstellt. Und siehe da, der Fehler passiert schon beim ersten Durchgang der Funktion: Es wird in der Zahl 899999999 anstatt 900000000 in l_TempErgebnis gespeichert.
Das war schon nach der ersten Verbesserung auf long (vorher hatte ich noch int benutzt, was natürlich einen noch kleineren Definitionsbereich hat).
Nun ja, nun dachte ich mir, dass vielleicht ein unsigned long helfen würde - Fehlanzeige. Auf der 32-Bit Maschine erzeugt einfach alles über 7 Stellen eine falsche Ausgabe.
Natürlich habe ich mir schon gedanken gemacht...hatte vielleicht auf einen Rundungsfehler bei der Funktion pow getippt, da diese ja mit doubles und floats arbeitet.
Aber da verlief sich mein Gedankengang.
Nun ist mir heute morgen beim Träumen in der S-Bahn die Idee gekommen, die Zahl in einem int-Array zu speichern, also jede Ziffer an einer Stelle im Array, möglicherweise auch char, da
es ja quatsch ist ein int für eine einzige Ziffer zu benutzen. Danach könnte man die einzelnen Positionen ja auch vertauschen und so die Zahl invertieren.
Nur leider habe ich keine Ahnung wie man eine Eingabe in ein Array speichert, sodass für jede Ziffer der Zahl eine neue Arrayposition gewählt wird.
Für int habe ich das schon probiert, ging natürlich nicht so einfach. Aber wie sieht es mit char aus? (in C werden ja Strings auch in char-Arrays gespeichert, wenn ich mich nicht irre).
Wenn man Char benutzt, wird das auch aufwändiger die Stellen zu ermitteln. Oder irre ich mich da wiederrum gänzlich?
Ein ziemlich langer Beitrag, aber ich würde mich über jedes Kommentar zu meinem Gedankengang und dem Long-Mysterium freuen und begrüße die Community hiermit noch einmal recht
herzlich
Gruß
Lexington