Zahl "splitten"

  • PowerPoint

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Zahl "splitten"

    Hallo,

    ich muss für die Schule einen Rechner für alle Zahlensysteme programmieren und ich fange gerade an, eine Zahl aus einem beliebigen Zahlensystem in das Dezimalsystem umzuwandeln. Dabei muss jede Ziffer einer Zahl z.B. 653 --> 6. 5. 3. voneinander getrennt werden und am besten in eine Arrayliste oder so etwas ähnliches eingetragen werden. Danach möchte ich mit einer Schleife die Dezimalzahl berechnen: 6x2^2 + 5x2^1 + 3x2^0

    Kann mir jemand sagen, wie ich eine Zahl in ihre Ziffern unterteile?

    Und gibt es eventuell eine bessere Methode?

    Mfg Pflaumensaft
    Hallo Pflaumensaft,

    sollst du denn in Excel-Formeln oder in VBA-Code programmieren?

    Bei Excel-Formeln schau mal in der Formelkategorie "Technisch" nach... da findest du HEXINBIN oder DEZINHEX...

    Wenn es VBA-Code sein soll, sieh dir die arithmetischen Operatoren \ und mod an, damit kannst du eine Zahl zerlegen (in deinem Fall 653 \ 10^2 = 6 und 653 mod 10^2 = 53)

    Du musst aber aufpassen, dass du die Begriffe nicht durcheinander bringst... 2^0, 2^1 und 2^2 haben nichts mit einer Dezimalzahl zu tun... da bist du im Binärsystem.

    Viel Erfolg mit deinem Projekt
    Celi
    Mit folgendem Code kannst du einen String (deine Zahl muss ein String sein, wenn es für alle Zahlensysteme gelten soll) Zeichen für Zeichen durchlaufen:

    Visual Basic-Quellcode

    1. Dim i As Integer
    2. Dim zahl As String
    3. zahl = "12345"
    4. For i = 1 To Len(zahl)
    5. ' ... Berechnungen, Schreiben in ein Array, was du möchtest... ;)
    6. Next i

    EDIT: Ich hatte mal ein Programm geschrieben (aber in VB6, was u. U. in VBA nicht zu 100% funktioniert), das macht den Weg andersrum, also Dezimalzahl in ein beliebiges Zahlensystem. Vielleicht hilft es dir:
    (benötigt Button cmdCalc und Textboxen txtEingabe1 und txtConvert)

    Visual Basic-Quellcode

    1. Option Explicit ' Erzwingt die Variablendeklaration
    2. Private Sub cmdCalc_Click()
    3. ' Konvertierung
    4. On Error GoTo ErrorHandler
    5. If IsNumeric(txtEingabe1.Text) And IsNumeric(txtConvert.Text) Then
    6. ' Berechnung starten
    7. Dim Zahl As Long
    8. Dim ConvertTo As Long
    9. Dim Ergebnis As String
    10. Dim Zwischenergebnis As String
    11. Dim Letters As Variant
    12. Letters = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
    13. Zahl = CLng(txtEingabe1.Text)
    14. ConvertTo = CLng(txtConvert.Text)
    15. Ergebnis = ""
    16. If ConvertTo < 2 Then
    17. MsgBox "Das Ziel-Zahlensystem muss mindestens 2 sein.", vbApplicationModal + vbDefaultButton1 + vbExclamation + vbMsgBoxSetForeground + vbOKOnly, "Hinweis"
    18. txtConvert.SetFocus
    19. Exit Sub
    20. End If
    21. Do While Zahl > 0
    22. Select Case Zahl Mod ConvertTo
    23. Case Is < 10: Ergebnis = Zahl Mod ConvertTo & Ergebnis
    24. Case Is > 9: Ergebnis = Letters((Zahl Mod ConvertTo) - 10) & Ergebnis
    25. End Select
    26. Zahl = Zahl \ ConvertTo
    27. If Zahl <= 0 Then Exit Do
    28. Loop
    29. ' Ergebnis ausgeben
    30. MsgBox "Die Zahl " & txtEingabe1.Text & " ist im Zahlensystem mit der Basis " & txtConvert.Text & " die Zahl " & Ergebnis & ".", vbApplicationModal + vbDefaultButton1 + vbInformation + vbMsgBoxSetForeground + vbOKOnly, "Berechnung erfolgreich"
    31. Else
    32. ' Berechnung kann nicht gestartet werden
    33. MsgBox "Sie haben nicht alle erforderlichen Eingaben gemacht.", vbApplicationModal + vbDefaultButton1 + vbExclamation + vbMsgBoxSetForeground + vbOKOnly, "Hinweis"
    34. txtEingabe1.SetFocus
    35. End If
    36. Exit Sub
    37. ErrorHandler: ' Fehlerbehandlung
    38. MsgBox Err.Description & ".", vbCritical + vbMsgBoxSetForeground + vbApplicationModal, "Fehler"
    39. End Sub



    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()