Übungsaufgabe für alle :: Nr. 3

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3, 4

Neue Antwort erstellen

 

Sound

BeitragSa, Jan 01, 2005 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
So, dann meine verspätete und dank Rallimen zustandegekommene Lösung (THX dafür!)

Code: [AUSKLAPPEN]

Graphics 800,600
Dim zahlstring$(1)
Repeat
   Cls
   Text 0,0,"(1) Binär->Dezimal"
   Text 0,15,"(2) Binär->Hexadezimal"
   Text 0,30,"(3) Dezimal->Binär"
   Text 0,45,"(4) Dezimal->Hexadezimal"
   Text 0,60,"(5) Hexadezimal->Binär"
   Text 0,75,"(6) Hexadezimal->Dezimal"
   Text 0,90,"(0) Ende"
   Locate 0,105
   menu=WaitKey()-48

   Select menu
   Case 1
      zahl$=Input("Binärzahl: ")
      If valid(zahl$,2)=True Then
         Text 0,120,"Dezimalzahl: "+toDezimal(zahl$,2)
      Else
         Text 0,120,"Keine Binärzahl!"
      EndIf
   Case 2
      zahl$=Input("Binärzahl: ")
      If valid(zahl$,2)=True Then
         Text 0,120,"Hexadezimalzahl: "+fromDezimal(toDezimal(zahl$,2),16)
      Else
         Text 0,120,"Keine Binärzahl!"
      EndIf
   Case 3
      zahl$=Input("Dezimalzahl: ")
      If valid(zahl$,10)=True Then
         Text 0,120,"Binärzahl: "+fromDezimal(zahl,2)
      Else
         Text 0,120,"Keine Dezimalzahl"
      EndIf
   Case 4
      zahl$=Input("Dezimalzahl: ")
      If valid(zahl$,10)=True Then
         Text 0,120,"Hexadezimalzahl: "+fromDezimal(zahl,16)
      Else
         Text 0,120,"Keine Dezimalzahl!"
      EndIf
   Case 5
      zahl$=Input("Hexadezimalzahl: ")
      If valid(zahl$,16)=True Then
         Text 0,120,"Binärzahl: "+fromDezimal(toDezimal(zahl$,16),2)
      Else
         Text 0,120,"Keine Hexadezimalzahl!"
      EndIf
   Case 6
      zahl$=Input("Hexadezimalzahl: ")
      If valid(zahl$,16)=True Then
         Text 0,120,"Dezimalzahl: "+toDezimal(zahl$,16)
      Else
         Text 0,120,"Keine Hexadezimalzahl"
      EndIf
   Case 0
      Exit
   End Select

   WaitKey()

Forever


Function valid (zahl$,modus)
   zahl$ = Upper (zahl$)
   For i = 1 To Len (zahl$)
      asc_ziffer% = Asc (Mid (zahl,i,1) )
      If Modus <= 10 Then
      If asc_ziffer% < 48 Or asc_ziffer% => 48 + Modus Then Return False
      Else
      If asc_ziffer% < 48 Or asc_ziffer% => 65 + Modus - 10 Then Return False
      If asc_ziffer% > 57 And asc_ziffer% < 65 Then Return False
      EndIf
   Next
   Return True
End Function ;valid


Function toDezimal(zahl$,modus)
   Dim zahlstring$(Len(zahl$)-1)
   For i=0 To Len(zahl$)-1
      zahlstring$(i)=Mid(zahl$,i+1,1)
   Next
   dezimal=0
   For i=0 To (Len(zahl$)-1)
      ziffer_str$=zahlstring$(Len(zahl$)-1-i)
      If (Asc(ziffer_str$)>47) And (Asc(ziffer_str$)<58) Then
         ziffer=ziffer_str$
      Else ziffer=Asc(Upper(ziffer_str$))-55
      EndIf
      dezimal=dezimal+(ziffer*modus^i)
   Next
   Return dezimal
End Function ;toDezimal

Function fromDezimal$ (zahl,modus)
   i = 0
   Repeat
      start = modus^i
      i = i + 1
   Until start > zahl
   nonDezimal$ = ""
   i=i-2
   For a = i To 0 Step - 1
      ziffer = Floor(zahl/(modus^a))
      zahl = zahl-(ziffer*(modus^a))
      If Ziffer < 0 Then
         Return "Out of Range"
      ElseIf ziffer<10 Then
         nonDezimal$ = nonDezimal$+ziffer
      Else
         nonDezimal$=nonDezimal$+Chr(ziffer+55)
      EndIf
   Next
   Return nonDezimal
End Function ;fromDezimal

Dim zahlstring$(0)
End

Gehe zu Seite Zurück  1, 2, 3, 4

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group