# Zahlensystem Rechner!



## Fabian L (18. November 2003)

Hallo,

ich muss für die Schule eine einfache und gute Lösung zu folgendem VB Programm haben:

Es soll folgende Zahlensysteme umrechnen können:
- Dualsystem
- Dezimalsystem
- Oktalsystem
- Hexadezimalsystem

Die Eingabe der Zahlen erfolgt über einen Ziffernblock (Buttons) in eine Textbox (Das habe ich auch noch selber hinbekommen). 

Für jedes Zahlensystem gibt es ein Ziffernblock und ein Textfeld (Habe ich ebenfalls hinbekommen). 

Problem:

Die Berechnung erfolgt über einen Button "Berechnen". Der umgerechnete Wert erscheint dann in den Textboxen der anderen Zahlensysteme.

-> Nur leider weiß ich nicht, wie ich den Wert, der nach der Eingabe über den Ziffernblock in der Textbox steht in ein anderes Zahlensystem umrechnen kann und dann automatisch in den anderen Textboxen ausgeben kann. 

Ich weiß zwar, wie man Zahlensysteme umrechnet, bekomme das dann aber nicht programmiertechnisch hin.

Besten Danke schonmal!

PS: Wenn das hier zu wenig Informationen sind, kann ich auch das Formular und meinen bisherigen Quelltext als Anhang hier reinsetzen.


----------



## danielm (18. November 2003)

hey, die umrechnung von dual nach dezimal könnte z.b. so aussehn


```
Dim dual As String, dezimal As Single
    dual = "1010011010"                 'die dualzahl
    For n = Len(dual) To 1 Step -1
        If Mid(dual, n, 1) = "1" Then   'wenn das aktuelle zeichen eine 1 ist
            dezimal = 2 ^ (Len(dual) - n) + dezimal 'dann berechnen...
        End If
    Next n
    Print dezimal   'und das ergebniss ausspucken
```


----------



## Paranoia (19. November 2003)

hey

so rechnest du eine dezimale zahl in hex bzw. oct:


```
hex(zahl)
oct(zahl)
```

greetings para


----------



## Fabian L (19. November 2003)

Danke, aber gibt es nicht eine andere Möglichkeit von Dual nach Dezimal umzurechnen? Weil wie manche Funktionen  wie z.B. "Mid" noch nciht hatten und dem Lehrer wohl nicht sehr gefallen wird.


----------



## Fabian L (19. November 2003)

Ich habe den Source Code als Anlage hier reingesetzt, bitte schaut euch das Programm mal an.

Es funktioniert:
- Eingabe über Ziffernblöcke.
- Umrechnung von Dezimal in Hexadezimal, Dual und Oktal.
- Umrechnung von Hexadezimal in Dezimal, Dual und Oktal.

Probleme:
- Wenn beispielsweise die Option Dezimal ausgewählt ist, sollen die restlichen Ziffernblöcke "versteckt" oder besser noch "deaktiviert" werden.
- Umrechnung von Oktal in Hexadezimal, Dual und Dezimal.
- Umrechnung von Dual in Hexadezimal, Dezimal und Oktal.

Bitte verändert nichts am vorhandenen Source Code, außer wenn es zwingend erforderlich ist. Die Formulargestaltung muss ebenfals beibehalten werden, da es vom Lehrer vorgegeben war.

Bitte möglichst einfache Lösungen (ähnlich wie bei den Umrechnungen, die ich schon gelöst habe).

PS: Source Code als Anlage angefügt!


----------



## danielm (19. November 2003)

also bei mir läuft dein programm überhaupt nicht...
bei der berechnung kommen immer fehler wie
"typen unverträglich" und "überlauf"
da is wohl irgendwo nen fehler


----------



## Fabian L (20. November 2003)

bei mir läuft es. welche vb version hast du? habe visual basic 6.0
ansonsten kannste dir ja den quelltext mal anschauen ist ja nicht viel...


----------



## ZockDom (1. März 2004)

Hi.

Ich hab' auch schon so ein Programm geschrieben.
Das ist die Funktion.


```
Function Zahlensys(Basis1 As Byte, Basis2 As Byte, Zahl1 As String) As String
 Dim Num As Long
 'Zahl1 -> Dezimal
 For X = Len(Zahl1) To 1 Step -1
  Select Case Mid$(Zahl1, X, 1)
  Case Chr$(48) To Chr$(57)
   Num = Num + (Basis1 ^ (Len(Zahl1) - X)) * Val(Mid$(Zahl1, X, 1))
  Case Chr$(65) To Chr$(89)
   Num = Num + (Basis1 ^ (Len(Zahl1) - X)) * (Asc(Mid$(Zahl1, X, 1)) - 54)
  End Select
 Next X
 
 'Dezimal -> Basis2
 'Bestimmung der Stellenanzahl des Ergebnises
 Dim N As Integer
 N = 0
 Do
  N = N + 1
  If Num / (Basis2 ^ N) < 1 Then Exit Do
 Loop
 'Berechnung des Ergebnisses
 Dim E As String
 E = ""
 For X = N To 1 Step -1
  E = E + Ziffer(Fix(Num / (Basis2 ^ (X - 1))))
  Num = Num - (Fix(Num / (Basis2 ^ (X - 1)))) * (Basis2 ^ (X - 1))
 Next X
 Zahlensys = E
End Function

Function Ziffer(Nr As Integer) As String
 If Nr < 10 Then
  Ziffer = Trim$(Str$(Nr))
 Else
  Ziffer = Chr$(Nr + 55)
 End If
End Function
```

z.B.: für Binär in Hexadezimal:
Ergebnis$ = Zahlensys (2, 16, "1101101")

oder Basis 30 in Duodezimal:
Ergebnis$ = Zahlensys (30, 12, "AJ8N5")

(Wichtig: Die Zahl immer als String ohne Leerzeichen angeben)
(Das Programm funktioniert nur mit Basen von 2 bis 36, nicht größer!)

Ich hoffe das nützt dir was.


----------

