# Algorithmus zur Umwandlung einer Dezimalzahl in eine Oktalzahl



## Ray (26. November 2010)

Guten Tag,

ich lerne seit kurzem VBA und habe Probleme bei einer Aufgabe:

Es soll ein VB – Programm erstellt werden, mit dem eine einzugebende, positive Dezimalzahl in die zugehörige Oktalzahl umgewandelt werden kann.
Im Oktalsystem werden Zahlen zur Basis 8 dargestellt, der Zeichenvorrat besteht aus den acht Ziffern 0, 1, 2, 3, 4, 5, 6, 7
Der Umwandlungsalgorithmus wird im folgenden Beispiel anhand der Dezimalzahl 5432 dargestellt:
Dezimalzahl: 5432 : 8 = 679 Rest 0
                     679 : 8 = 84 Rest 7
                     84 : 8 = 10 Rest 4
                     10 : 8 = 1 Rest 2
                     1 : 8 = 0 Rest 1        Oktalzahl: 12470

Verwendet werden dürfen ausser Typumwandlungsfunktionen keine VB Standardfunktionen. Operatoren sind natürlich erlaubt (Mod)

Ich hab ewig dran rumprobiert, bekomme es aber einfach nicht hin. Mein Problem ist, dass die Zahlen ersten falsch herum rauskommen und zweitens eine null zuviel dran hängt.


```
Dim xneu As Long
Dim xalt As Long
Dim y As Long
Dim z As Long

xneu = txtEingabe

Do

xalt = xneu \ 8
y = xneu Mod 8
z = xalt Mod 8
xneu = xalt \ 8


lblAusgabe = lblAusgabe & y & z

Loop Until xalt = 0
```

Ich erwarte nicht, dass mir hier jemand meine Hausaufgaben macht. Jedoch würde ich mich über die ein oder andere Hilfestellung oder Korrektur sehr freuen.


----------



## Yaslaw (27. November 2010)

Das falsch herum:
In deinem Beispiel beginnst du mit der letzten Ziffer und endest bei der vordersten. Also diese Reihenfolge:
[5][4][3][2][1]

Aber du setzt jetzt die neusten Ziffern zuhinterst an. Dadurch ergibt sich automatisch [1][2][3][4][5]

Warum rechnest du pro durchgag 2 mal /8?


```
x = eingabe
do
  digit = x mod 8
  x = x \ 8
  ausgabe = digit & ausgabe
loop until x=0
```


----------



## Ray (27. November 2010)

Vielen Dank für die Hilfe.
Hab mal wieder zu kompliziert gedacht. Da probiert man ewig rum und sieht den Wald vor lauter Bäumen nicht mehr und dann ist die Lösung so einfach. Naja ich lerne seit etwa einem Monat VBA und hab bei Algorithmen noch ein wenig Verständnisprobleme. 
Ich dachte ich müsste zwei Variabeln erstellen, die sich gegenseitig überschreiben damit die Schleife läuft. Aus Fehlern lernt man.

Grüße

Ray


----------

