Code verstehen

TTek

Mitglied
Hi,
also ich habe folgendes Problem. Wir sollten in der Schule ein Projekt machen in dem ein Taschenrechner Dezimal zu Oktal/Dual/Hexadezimal umwandeln kann und umgekehrt.
Ich bin der Teamleiter dieses Projektes und habe die Aufgaben verteilt. Jetzt ist der jenige der die Dezimal zu Oktal/Dual/Hexadezimal Funktion schreiben sollte krank geworden bzw. er ist nicht mehr erreichbar. Ich habe jetzt nur den Code und muss am Montag dem Rest der Klasse erklären was da passiert.

Code:
Function Dez2NumStr(ByVal value As Integer, ByVal base As Integer) As String
        Dez2NumStr = ""
        Dim h(16)
        h(0) = 0 : h(1) = 1 : h(2) = 2 : h(3) = 3 : h(4) = 4 : h(5) = 5 : h(6) = 6 : h(7) = 7 : h(8) = 8
        h(9) = 9 : h(10) = "A" : h(11) = "B" : h(12) = "C" : h(13) = "D" : h(14) = "E" : h(15) = "F"

        Dim mask As Long : mask = 1
        Do
            mask = value Mod base
            value = value \ base
            Dez2NumStr = h(mask) & Dez2NumStr
        Loop Until value < 1

    End Function

Also ich weiß das Dez2NumStr = "" dazu da ist damit der nicht rum meckert wegen nicht gesetzter Variable und das im Array praktisch das Zahlensystem hinterlegt ist.
Was ich nicht kapiere, ist wie das mit dem Rechen funktioniert :confused:
Code:
Do
   mask = value Mod base
   value = value \ base
   Dez2NumStr = h(mask) & Dez2NumStr
   Loop Until value < 1
Ich habs getestet und es klappt alles.
Aber warum funktioniert das Es werden keine Variablen zurück gegeben per Returnwert...

Könnt ihr mir helfen ?
 
Hi,

hast du denn die Restwertmethode zum Konvertieren von Zahlensystemen allgemein verstanden? Die wird innerhalb der Schleife angewendet, solltest du dir ggf. mal ansehen, wenn ihr das im Unterricht gemacht habt.

Es wird durch Modulo der Rest der Division von value und base ermittelt und anschließend wirklich dividiert. Nach der Division wird mit dem Ergebnis weiter gerechnet. In der letzten Zeile wird der Rest als hexadezimale Ziffer vorne an den String angehängt. Wenn durch Division der Wert kleiner als 1 wird, sollte man so langsam mal aufhören, weil da nichts mehr passiert.

Der Rückgabewert der Funktion wird über die Zuweisung eines Wertes an den Funktionsnamen festgelegt. Return braucht man dazu nicht.

Grüße, D.
 
Ok ja das mit der Rechnung kapier ich jetzt.



Die Zuweisung...naja da bin ich mir noch nicht so sicher.

Code:
    Dez2NumStr = h(mask) & Dez2NumStr
Der Rückgabewert der Funktion wird über die Zuweisung eines Wertes an den Funktionsnamen festgelegt.

Also ich sehe das jetzt so:
Code:
    Dez2NumStr = h(mask) & (h(mask@2. durchlauf &(h(mask@3.durchlauf&(...)

Wäre das so mit der Zuweisung richtig ?
 
Zuletzt bearbeitet:
Zurück