Dezimalzahlen umwandeln klappt nicht
-
Liebe Community,
ich habe ein C++-Programm geschrieben, das Dezimalzahlen in beliebige andere Zahlensysteme umwandeln soll, aber das Ergebnis zeigt immer was komisches an, eine Mischung aus irgendwelchen zufälligen Ziffern und daran hinten drangehängt das richtige Ergebnis.#include <iostream>
using namespace std;
int main()
{
int d, b, index =0;
int r[16];
cout << "Bitte geben Sie die Basiszahl ein, die umgerechnet werden soll: ";
cin >> d;
cout << "Bitte geben Sie die Basiszahl des Zahlensystems ein, in das umgerechnet werden soll: ";
cin >> b;do
{
r[index] = d % b;
d = d / b;
index++;
} while (d != 0);do
{
cout << r[index];
index--;
} while (index >= 0);
return 0;
}Wenn man jetzt zum Beispiel für die Dezimalzahl 8 eingibt und für die Basiszahl 8, dann kommt als Ergebnis 196066809010 raus. Ich glaube, die 10 am Schluss stimmt.
Woran liegt das und was kann ich ändern?Danke!
Liebe Grüße
Dickie
-
Welchen Wert hat index beim Betreten der Ausgabeschleife?
Benutze einen Debugger. Dann kannst du genau sehen, was dein Programm macht.
-
Index hat beim Betreten der Ausgabeschleife den Wert, der in der Eingabeschleife durch index++ erreicht wird, solange d ungleich 0 ist. Also für jedes gewählte d unterschiedlich, denke ich.
Ich probier das mal mit dem Debugger. Doofe Frage: Der Debugger ist in der IDE (Codeblocks) integriert?
-
@dickie sagte in Dezimalzahlen umwandeln klappt nicht:
Der Debugger ist in der IDE (Codeblocks) integriert?
AFAIK unterstützt Codeblocks den gdb. Möglicherweise muss der zusätzlich installiert werden.
-
@dickie sagte in Dezimalzahlen umwandeln klappt nicht:
der in der Eingabeschleife durch index++ erreicht wird
Du hast einen Testfall angegeben. Werde konkret.
-
@manni66
Also wenn du zB für d = 25763 angibst und für b = 8, dann würde die Eingabeschleife ja so lange 25763 / 8 rechnen, bis 0 rauskommt, das wären 4 Rechenschritte, damit wäre der Index bei 3 am Ende der Eingabeschleife. In der Theorie.
Meinst du das mit deiner Frage oder ist das ein Hinweis, dass ich jede Änderung vom Index mir nochmals durch cout << anzeigen lasse, um dann von selber den Denkfehler zu entdecken?Danke und LG
-
@dickie sagte in Dezimalzahlen umwandeln klappt nicht:
Also wenn du zB für d = 25763 angibst und für b = 8
Warum kommt jetzt ein neuer Testfall? Wir waren bei
@dickie sagte in Dezimalzahlen umwandeln klappt nicht:
Wenn man jetzt zum Beispiel für die Dezimalzahl 8 eingibt und für die Basiszahl 8, dann kommt als Ergebnis 196066809010 raus
@dickie sagte in Dezimalzahlen umwandeln klappt nicht:
um dann von selber den Denkfehler zu entdecken?
Ja
-
@manni66 Ok, ich probier das kurz aus. Bin mal gespannt.
-
@manni66 Einen schönen Dank! Ja, das war voll wichtig, dass ich da selber drauf komme. Danke nochmals.
-
@dickie sagte in Dezimalzahlen umwandeln klappt nicht:
Ja, das war voll wichtig, dass ich da selber drauf komme.