Zahlensysteme - noooob
-
Hallo,
hab mal ne frage. ich sitz nun seid 2 wochen vor nem PRogramm und komm einfach nicht drauf. Ich hab's zwar geschafft mit mehreren Schleifen normale Zahlen ins binäre oder auch ins System zur Basis 3 zu rechnen. Aber die urfrage kann ich leider nicht erfüllen.
Ich muss eine dezimalzahl eingeben und das Ergebnis soll in allen Zahlensystemen von der basis 2 bis zur basis 16 oder noch weiter erscheinen.
Nun mein Problem: Dies soll in einem allgemeinen quellcode passieren. Ich schaffs leider nur mit codes, die zu jedem system extra sind.Struktogrammähnliche antworten reichen auch schon aus, dass ich wenigstens mal anhaltspunkte hab!
kann mir jemand helfen? (bin nOOb, keine zu fachlichen antworten bitte
)
Thx schonmal im Voraus!!!
-
Wie sieht denn dein Ansatz für b=2 bzw. b=3 aus? Eventuell reicht es einfach, den entsprechenden Wert durch eine Variable zu ersetzen.
(bei einer Basis über 10 mußt du allerdings noch aufpassen, daß du die "Ziffern" 10,11,etc. richtig als 'A','B',... darstellst)
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich dachte da an eine variable, bei der der Benutzer angeben kann wieviele Zahlensysteme ausgegeben werden sollen. das ganze soll nur allgemein programmiert werden, so dass fast beliebig viele systeme berechnet werden können.
ach so, also wir arbeiten noch im konsolen experte, nix mit grafisch und so.
ach bei den ziffern, dachte da an ein feld in dem die zahlen 0 bis Z in einer Reihe stehen
-
da_machine schrieb:
ich dachte da an eine variable, bei der der Benutzer angeben kann wieviele Zahlensysteme ausgegeben werden sollen. das ganze soll nur allgemein programmiert werden, so dass fast beliebig viele systeme berechnet werden können.
Dann schreib dir erstmal eine Funktion "void itostr(int val, int base, char* data);" (die die Zahl 'val' zur Basis 'base' darstellen kann).
Diese Funktion kannst du dann z.B. in einer Schleife aufrufen:for(i=2;i<=36;++i) { itostr(zahl,i,buffer); printf("%5d(%2d) = %s\n",zahl,i,buffer); }
PS: Für die umgekehrte Richtung gibt es übrigens eine Funktion - die nennt sich strtol().
-
da_machine schrieb:
ach bei den ziffern, dachte da an ein feld in dem die zahlen 0 bis Z in einer Reihe stehen
Schon mal ein guter Anfang.
const char* ziffern = "0123456789abc" /*...*/ "xyz";
Jetzt brauchst du eigentlich nur noch den Wert der Ziffer, um das Zeichen aus dem Array zu holen. Um einen Algorithmus zu formulieren, verwendet man idR Division + modulo.
int basis = /*...*/; // deine basis int zahl = /*...*/; // Wert deiner eingegebenen Dezimalzahl do { int ziffer = zahl % basis; // mit ziffern[ziffer] erhaelst du jetzt eine neue Ziffer für dein Ergebnis zahl /= basis; } while (zahl != 0);
Aufpassen musst du bei negativen Werten, solche sind ja nur bei dezimalen Zahlen gebrächlich. Wie du sowas bei anderen Zahlensystemen handelst, solltest du dir also noch überlegen.
-
aha, hört sich leicht an, und leuchtet ein, versuch mal das ganze in meinem prog zu verarbeiten...
thx schonmal bis hierher