Übungsaufgabe für alle :: Nr. 3

Übersicht BlitzBasic Beginners-Corner

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

Neue Antwort erstellen

ssj-goku

BeitragSo, Dez 26, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm wenn das fuer anfänger ist dann siehts fuer mich schwarz aus Sad sowas würde ich nicht lösen können, da ich seid kurzem angefangen hab zu programmieren (lernen) ich denke hier ist ein anfänger forum hmm und ich seh grad das hier an der aufgabe sogar die profis rumtüffteln nunja ist ja nur meine meinung Smile

cu
 

azureuz

BeitragSo, Dez 26, 2004 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
ssj-goku hat Folgendes geschrieben:
hmmm wenn das fuer anfänger ist dann siehts fuer mich schwarz aus Sad sowas würde ich nicht lösen können, da ich seid kurzem angefangen hab zu programmieren (lernen) ich denke hier ist ein anfänger forum hmm und ich seh grad das hier an der aufgabe sogar die profis rumtüffteln nunja ist ja nur meine meinung Smile

cu


seh ich auch so. die aufgaben sind bestimmt nicht für anfänger!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Dez 26, 2004 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hex nach Binär und umgekeht ist relativ einfach zu lösen!
bei dezimal muß schon gerechnet werden!
[BB2D | BB3D | BB+]
 

David

BeitragSo, Dez 26, 2004 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nö, is immer das selbe! Wink
Es sollen ja KEINE Gleitkommazahlen unterstützt werden soweit ich verstanden habe.

Hier meine Executable: hier

@Rallimen:

F00000 = 15728640
F000000 = 251658240

Bei mir gehts korrekt! Seltsam das es bei dir nicht klappt, der Rest ist doch korrekt oder?

grüße

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Dez 26, 2004 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
David:
was stimmt denn daran nicht? Question

Bei mir kannst du das nur nicht eingeben !
Habe da eine Ziffer zuviel gekürzt bei der Sicherungsabfragen, kannste nur 6 Stellen eingeben!

und Bei binär nach hex und umgekeht kannste das rechnen völlig ausser acht lassen und in riesiege dimensionen wandern!
[BB2D | BB3D | BB+]
 

David

BeitragSo, Dez 26, 2004 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Folgendes geschrieben:

Das ergebnis stimmt dann nicht richtig!

mit hex ist es noch schlimmer!
$F00000 =
15* 16^6 = 2.51658e+008 = 251658000
richtig ist aber 251658240
Crying or Very sad
ich könnte natürlich die Rechnungen noch selber coden damit ich nicht in wissenschaftlicher notation rechnen muß, aber die Zeit habe ich jetzt nicht!
Und die Lust läßt auch zu wünschen....


Dachte du hättest noch Probleme damit. Wink

grüße

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Dez 27, 2004 1:54
Antworten mit Zitat
Benutzer-Profile anzeigen
habe die Bregenzung extrem gelockert,
geht jetzt bis $1FFFFFFFFFFFFFFFFFFF
außer dezimal, da gibt Abstriche!
[BB2D | BB3D | BB+]
 

David

BeitragMo, Dez 27, 2004 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja, bei mir gehts jetzt auch bis in größere Zahlen, da ich nun zwei Funktionen extra für Bin <-> Hex Umwandlung geschrieben habe.
Bei Dezimalzahlen verwende ich als Ausgabetyp "Integer" von daher gibts bei Werten, größer als 7FFFFFFF dann falsche Werte.

grüße

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Dez 28, 2004 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe nochmal eine Exe mit meinen
StandartRechnenFunktionen ( + - / * ) nicht optimiert und saulahm)
erstellt!
http://people.freenet.de/rallimen/Basic/
Eingebaute Begrenzung liegt bei
99999999999999999999999999 (26 Stellen dezimal )
ca 80 -90 Bit
was schon ca 2 Sekunden Rechenzeit erfordert mit BlitzPlus!
aber schaut selbst!
Zeiten werden unten eingeblendet!

Grüße
[BB2D | BB3D | BB+]
 

David

BeitragDo, Dez 30, 2004 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nett, ich habs bei 32 Bit Ganzahlen gelassen für Dezimale.

So, nun postet alle eure Lösungen, es ist Donnerstag! Wink

grüße

wunderkind

BeitragDo, Dez 30, 2004 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Richtig, lasst mal sehen. Sehr schön, dass ihr so gut dabei seid.
 

David

BeitragDo, Dez 30, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ok, dann fang ich mit meiner Lösung an:

Code: [AUSKLAPPEN]

Graphics 800, 600, 32, 2

; Konstanten

Const tbl$    = "0123456789ABCDEF"
Const binTbl$ = "0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111"

; Hauptprogramm

val$ = Input( "Geben Sie eine Zahl ein: " )

Print "1) Dez -> Bin/Hex"
Print "2) Hex -> Dez/Bin"
Print "3) Bin -> Dez/Hex"

Repeat
   Sys$ = Input( "Geben Sie das System an wie umgerechnet werden soll: " )
Until Int( Sys$ ) >= 1 And Int( Sys$ ) <= 3

Print ""

Select Int( Sys$ )
   Case 1
      If ( CheckValidDec( val$ ) )
         Print "Bin: " + DecToBin$( val$ )
         Print "Hex: " + DecToHex$( val$ )
      Else
         Print "Keine gueltige Dezimalzahl"
      End If
      
   Case 2
      If ( CheckValidHex( val$ ) )
         Print "Dez: " + HexToDec%( val$ )
         ;Print "Bin: " + DecToBin$( HexToDec%( val$ ) )
         Print "Bin: " + HexToBin( val$ )
      Else
         Print "Keine gueltige Hexadezimalzahl"
      End If
      
   Case 3
      If ( CheckValidBin( val$ ) )
         Print "Dez: " + BinToDec%( val$ )
         ;Print "Hex: " + DecToHex$( BinToDec%( val$ ) )
         Print "Hex: " + BinToHex$( val$ )
      Else
         Print "Keine gueltige Binaerzahl"
      End If
End Select

WaitKey
End

; ===================
;
; CheckValidHex()
;

Function CheckValidHex( val$ )
   For i% = 1 To Len( val$ )
      c$ = Mid( val$, i, 1 )
      
      If ( Not Instr( tbl$, Upper( c$  ) ) ) Return False
   Next
   
   Return True
End Function

; ===================
;
; CheckValidDec()
;

Function CheckValidDec( val$ )
   For i% = 1 To Len( val$ )
      c$ = Mid( val$, i, 1 )
      
      If ( c$ < "0" Or c$ > "9" ) Return False
   Next
   
   Return True
End Function

; ===================
;
; CheckValidBin()
;

Function CheckValidBin( val$ )
   For i% = 1 To Len( val$ )
      c$ = Mid( val$, i, 1 )
      
      If ( c$ < "0" Or c$ > "1" ) Return False
   Next
   
   Return True
End Function

; ===================
;
; DecToX()
;

Function DecToN$( val%, base% )
   res$ = ""
   tmp% = val%
   
   While tmp% > 0
      res$ = Mid( tbl$, ( tmp% Mod base% + 1 ), 1 ) + res$
      tmp% = tmp% / base%
   Wend
   
   Return res$
End Function

; ===================
;
; XToDec()
;

Function NToDec%( val$, base% )
   res% = 0
   
   For i% = 1 To Len( val$ )
      res% = res% * base% + Instr( tbl$, Upper( Mid( val$, i, 1 ) ) ) - 1
   Next
   
   Return res%
End Function

; ===================
;
; DecToHex()
;

Function DecToHex$( val% )
   Return DecToN( val%, 16 )
End Function

; ===================
;
; DecToBin()
;

Function DecToBin$( val% )
   Return DecToN( val%, 2 )
End Function

; ===================
;
; BinToDec()
;

Function BinToDec%( val$ )
   Return NToDec( val$, 2 )
End Function

; ===================
;
; HexToDec()
;

Function HexToDec%( val$ )
   Return NToDec( val$, 16 )
End Function

; ===================
;
; HexToBin()
;

Function HexToBin$( val$ )
   res$ = ""
   
   For i% = 1 To Len( val$ )
      res$ = res$ + Mid$( binTbl$, ( Instr( tbl$, Upper( Mid( val$, i, 1 ) ) ) * 5 ) - 4, 4 )
   Next
   
   Return res$
End Function

; ===================
;
; BinToHex()
;

Function BinToHex$( val$ )
   value$ = val$
   res$ = ""
   
   While ( Len( value$ ) Mod 4 )
      value$ = "0" + value$
   Wend
   
   For i% = 1 To Len( val$ ) Step 4
      res$ = res$ + Mid$( tbl$, ( Instr( binTbl$, Mid$( value$, i, 4 ) ) / 5 ) + 1, 1 )
   Next
   
   Return res$
End Function


grüße

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Dez 30, 2004 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Respekt David,
auf die Idee bin ich garnicht gekommen!


Code: [AUSKLAPPEN]
Global Win1
Global TextFieldDez
Global TextFieldHex
Global TextFieldBin
Const MAXDEZ = 10
Const MAXHEX = 20
Const MAXBIN = 78
CreateWin ()
ActivateGadget Win1
Repeat
    Ergebnis = WaitEvent ()
    Select Ergebnis
     Case $803 End
     Case $401
        Select EventSource ()
         Case TextFieldDez
            Checkdez (TextFieldDez)
            SetGadgetText (TextFieldHex,DezHex (TextFieldText (TextFieldDez) ) )
            SetGadgetText (TextFieldBin,dezbin (TextFieldText (TextFieldDez) ) )
         Case TextFieldHex
            CheckHex (TextFieldHex)
            SetGadgetText (TextFieldDez,hexdez (TextFieldText (TextFieldHex) ) )
            SetGadgetText (TextFieldBin,hexbin (TextFieldText (TextFieldHex) ) )
         Case TextFieldBin
            CheckBin (TextFieldBin)
            SetGadgetText (TextFieldDez,Bindez (TextFieldText (TextFieldBin) ) )
            SetGadgetText (TextFieldHex,binhex (TextFieldText (TextFieldBin) ) )
        End Select
     Default
    End Select
Forever

Function CreateWin ()
    Win1 = CreateWindow ("Dez<>Bin<>Hex  (c)Rallimen v1.0",212,167,780,110,Desktop () ,1)
    TextFieldDez = CreateTextField (10 ,40,100,20,Win1,0)
    SetGadgetText TextFieldDez,""
    SetGadgetLayout TextFieldDez,1,0,1,0
    TextFieldHex = CreateTextField (130 ,40,140,20,Win1,0)
    SetGadgetText TextFieldHex,""
    SetGadgetLayout TextFieldHex,1,0,1,0
    TextFieldBin = CreateTextField (290 ,40,470,20,Win1,0)
    SetGadgetText TextFieldBin,""
    SetGadgetLayout TextFieldBin,1,0,1,0
    Label1 = CreateLabel ("Dezimal",40,16,60,20,Win1,0)
    SetGadgetLayout Label1,1,0,1,0
    Label2 = CreateLabel ("Hexadezimal",150,19,60,20,Win1,0)
    SetGadgetLayout Label2,1,0,1,0
    Label3 = CreateLabel ("Binär",350,20,60,20,Win1,0)
    SetGadgetLayout Label3,1,0,1,0
End Function

Function CheckDez$ (Textzeile)
    Local Ausgabe$
    Zahlen$ = TextFieldText (Textzeile)
    zeichen = Len (Zahlen$)
    While x < zeichen
        x = x + 1
        dummy$ = Mid (Zahlen$,x,1)
        If x = MAXDEZ Then Exit
        Select dummy$
         Case "0"
            If x <> 1 Then Ausgabe$ = Ausgabe$ + dummy
         Case "1","2","3","4","5","6","7","8","9"
            Ausgabe$ = Ausgabe$ + dummy
        End Select
    Wend
    SetGadgetText Textzeile,Ausgabe$
End Function

Function CheckHex$ (Textzeile)
    Zahlen$ = Upper (TextFieldText (Textzeile) )
    zeichen = Len (Zahlen$)
    While x < zeichen
        x = x + 1
        dummy$ = Mid (Zahlen$,x,1)
        If x = MAXHEX Then Exit
        Select dummy$
         Case "0"
            If x <> 1 Then Ausgabe$ = Ausgabe$ + dummy
         Case "1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
            Ausgabe$ = Ausgabe$ + dummy
        End Select
    Wend
    SetGadgetText Textzeile,Ausgabe$
End Function

Function CheckBin$ (Textzeile)
    Zahlen$ = TextFieldText (Textzeile)
    zeichen = Len (Zahlen$)
    While x < zeichen
        x = x + 1
        dummy$ = Mid (Zahlen$,x,1)
        If x = MAXBIN Then Exit
        Select dummy$
         Case "0"
            If x <> 1 Then Ausgabe$ = Ausgabe$ + dummy
         Case "1"
            Ausgabe$ = Ausgabe$ + dummy
        End Select
    Wend
    SetGadgetText Textzeile,Ausgabe$
End Function

Function DezBin$ (Wert%)
    Local dummy$
    Repeat
        X = X + 1
        If 2 ^ (x - 1) => wert Then
            For i = x - 1 To 0 Step - 1
                If wert - 2 ^ (i) < 0 Then
                    dummy$ = dummy$ + "0"
                 Else
                    dummy$ = dummy$ + "1"
                    wert = wert - 2 ^ (i)
                End If
            Next
            While Left (dummy,1) = "0" dummy = Mid (dummy,2) Wend
            Return dummy
        EndIf
    Forever
End Function

Function DezHex$ (Wert%)
    Local dummy$,dd%,x%,Vkomma%
    Repeat
        X = X + 1
        dd = 16 ^ (x)
        If dd < 0 Then Return "error.."
        If dd => wert Then ; größe gefunden
            For i = x - 1 To 0 Step - 1
                dd = 16 ^ (i)
                Vkomma = Floor (wert / dd)
                Select Vkomma
                 Case 0 : Dummy = dummy + "0"
                 Case 1 : Dummy = dummy + "1"
                 Case 2 : Dummy = dummy + "2"
                 Case 3 : Dummy = dummy + "3"
                 Case 4 : Dummy = dummy + "4"
                 Case 5 : Dummy = dummy + "5"
                 Case 6 : Dummy = dummy + "6"
                 Case 7 : Dummy = dummy + "7"
                 Case 8 : Dummy = dummy + "8"
                 Case 9 : Dummy = dummy + "9"
                 Case 10 : Dummy = dummy + "A"
                 Case 11 : Dummy = dummy + "B"
                 Case 12 : Dummy = dummy + "C"
                 Case 13 : Dummy = dummy + "D"
                 Case 14 : Dummy = dummy + "E"
                 Case 15 : Dummy = dummy + "F"
                 Case 16 : Dummy = dummy + "10"
                 Default Stop
                End Select
                wert = wert - Vkomma * 16 ^i
            Next
            While Left (dummy,1) = "0" dummy = Mid (dummy,2) Wend
            Return Dummy
        EndIf
    Forever
    Return Dummy
End Function

Function BinDez$ (A$)
    For i = Len (a) To 1 Step - 1
        If Mid (a,i,1) = "1" Then dummy% = dummy% + 2 ^ (x)
        If dummy < 0 Then Return "error.."
        x = x + 1
    Next
    Return Dummy
End Function

Function HexDez$ (A$)
    For i = Len (a) To 1 Step - 1
        wert$ = Upper (Mid (a,i,1) )
        Select wert$
         Case "0","1","2","3","4","5","6","7","8","9"
            Ziffer% = wert$
            dummy% = dummy% + ziffer * 16 ^x
            If dummy < 0 Then Return "error.."
         Case "A", "B" ,"C","D","E","F" ;10
            faktor = Asc (wert$) - 55
            dummy% = dummy% + faktor * 16 ^x
            If dummy < 0 Then Return "error.."
        End Select
        x = x + 1
    Next
    Return Dummy
End Function

Function BinHex$ (binZahl$)
    Local Dummy$
    While Len (Binzahl$) Mod 4 <> 0 Binzahl$ = "0" + Binzahl$ Wend
    For x = 1 To Len (binZahl$) Step 4
        wert$ = Mid (binZahl$,x,4)
        Select wert$
         Case "0000" : Dummy = dummy + "0"
         Case "0001" : Dummy = dummy + "1"
         Case "0010" : Dummy = dummy + "2"
         Case "0011" : Dummy = dummy + "3"
         Case "0100" : Dummy = dummy + "4"
         Case "0101" : Dummy = dummy + "5"
         Case "0110" : Dummy = dummy + "6"
         Case "0111" : Dummy = dummy + "7"
         Case "1000" : Dummy = dummy + "8"
         Case "1001" : Dummy = dummy + "9"
         Case "1010" : Dummy = dummy + "A"
         Case "1011" : Dummy = dummy + "B"
         Case "1100" : Dummy = dummy + "C"
         Case "1101" : Dummy = dummy + "D"
         Case "1110" : Dummy = dummy + "E"
         Case "1111" : Dummy = dummy + "F"
        End Select
    Next
    While Left (dummy,1) = "0" dummy = Mid (dummy,2) Wend
    Return Dummy$
End Function

Function HexBin$ (HexZahl$)
    Local Dummy$
    For x = 1 To Len (HexZahl$)
        wert$ = Mid (HexZahl$,x,1)
        Select wert$
         Case "0" : Dummy = dummy + "0000"
         Case "1" : Dummy = dummy + "0001"
         Case "2" : Dummy = dummy + "0010"
         Case "3" : Dummy = dummy + "0011"
         Case "4" : Dummy = dummy + "0100"
         Case "5" : Dummy = dummy + "0101"
         Case "6" : Dummy = dummy + "0110"
         Case "7" : Dummy = dummy + "0111"
         Case "8" : Dummy = dummy + "1000"
         Case "9" : Dummy = dummy + "1001"
         Case "A" : Dummy = dummy + "1010"
         Case "B" : Dummy = dummy + "1011"
         Case "C" : Dummy = dummy + "1100"
         Case "D" : Dummy = dummy + "1101"
         Case "E" : Dummy = dummy + "1110"
         Case "F" : Dummy = dummy + "1111"
        End Select
    Next
    While Left (dummy,1) = "0" dummy = Mid (dummy,2) Wend
    Return Dummy$
End Function
[BB2D | BB3D | BB+]

Kryan

BeitragDo, Dez 30, 2004 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
juhu, meins ist das kürzeste Very Happy
Code: [AUSKLAPPEN]
dz=255
Print dezTohex$(dz)
Print dezTobin$(dz)
hx$="FF"
Print hextodez(hx$)
Print hextobin(hx$)
bn$="11111111"
Print bintodez(bn$)
Print bintohex(bn$)
WaitKey
End

Function DezToHex$(dz)
 Repeat
 Select dz Mod 16
 Case 0 hexz$="0"+hexz$
 Case 1 hexz$="1"+hexz$
 Case 2 hexz$="2"+hexz$
 Case 3 hexz$="3"+hexz$
 Case 4 hexz$="4"+hexz$
 Case 5 hexz$="5"+hexz$
 Case 6 hexz$="6"+hexz$
 Case 7 hexz$="7"+hexz$
 Case 8 hexz$="8"+hexz$
 Case 9 hexz$="9"+hexz$
 Case 10 hexz$="A"+hexz$
 Case 11 hexz$="B"+hexz$
 Case 12 hexz$="C"+hexz$
 Case 13 hexz$="D"+hexz$
 Case 14 hexz$="E"+hexz$
 Case 15 hexz$="F"+hexz$
 End Select
 dz=dz/16
 Until dz<1
 Return hexz$
End Function
Function DezToBin$(dz)
 If dz<0 Then dz=-dz
 Repeat
  bz$=dz And 2^i
  dz=dz/2
  binz$=Str$(bz$)+binz$
 Until dz<1
 Return binz$
End Function
Function HexToDez(hexz$)
 If IsntHex(hexz$) Then RuntimeError("Falsche Benutzung der Funktion:hexz$<>Hex-Wert")
 For i=1 To Len(hexz$)^10
  If DezToHex$(i)=hexz$ Then Return i
 Next
End Function
Function HexToBin$(hexz$)
 If IsntHex(hexz$) Then RuntimeError("Falsche Benutzung der Funktion:hexz$<>Hex-Wert")
 Return DezToBin(HexToDez(hexz$))
End Function
Function BinToDez(binz$)
 If IsntBin(binz$) Then RuntimeError("Falsche Benutzung der Funktion:binz$<>Bin-Wert")
 dezz=2
 For i=2 To Len(binz$)
  If Mid$(binz$,i,1)="1" Then dezz=dezz*2;+(2^(Len(binz$)-i))
 Next
 Return dezz-1
End Function
Function BinToHex$(binz$)
 If IsntBin(binz$) Then RuntimeError("Falsche Benutzung der Funktion:binz$<>Bin-Wert")
 dezz=1
 For i=1 To Len(binz$)
  If Mid$(binz$,i,1)="1" Then dezz=dezz*2;+(2^(Len(binz$)-i))
 Next
 Return DezToHex(dezz-1)
End Function
Function IsntHex(hexz$)
 For i=1 To Len( hexz$)
  fehler=1
  Select Mid$(hexz$,i,1)
  Case "0" fehler=0
  Case "1" fehler=0
  Case "2" fehler=0
  Case "3" fehler=0
  Case "4" fehler=0
  Case "5" fehler=0
  Case "6" fehler=0
  Case "7" fehler=0
  Case "8" fehler=0
  Case "9" fehler=0
  Case "A" fehler=0
  Case "B" fehler=0
  Case "C" fehler=0
  Case "D" fehler=0
  Case "E" fehler=0
  Case "F" fehler=0
  End Select
  If fehler Then Return 1
 Next
 Return 0
End Function
Function IsntBin(binz$)
 For i=1 To Len(binz$)
  fehler=1
  Select Mid$(binz$,i,1)
  Case "0" fehler=0
  Case "1" fehler=0
  End Select
  If fehler Then Return 1
 Next
 Return 0
End Function
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Sound

BeitragDo, Dez 30, 2004 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bin neu hie rund bei blitzBasic noch ein noob, aber ich muss dazu mal sagen:

Die Aufgabe ist auf keinen Fall zu schwierig. Ich denke, der Schwieirgkeitsgrad ist genau richtig gewählt. Man muss ja das aus dem mathematikunterricht bekannte Schema nur in Algorithmen verwandeln

Also mein lösungsansatz geht davon aus, dass man zwei simple Functionen hat: Eine berechnet aus jedem Zahlensystem in Dezimalzahlen udn eine andere berechnet von Dezimalzahlen ausgehend in jedes beliebige Zahlensystem. Somit könnte man die Aufgabenstellung ohne weiteres erfüllen und es hätte noch den Vorteil, dass es flexibler ist.

So, aber irgendwie funzt die Funktion, die von Dezimalzahlen ausgehend in andere umwandeln soll, nicht so richtig. Hier der Code
Code: [AUSKLAPPEN]

Function fromDezimal(zahl,modus)
   i=0
   Repeat
      start=(modus-1)*(modus^i)
      i=i+1
   Until start>zahl
   i=i-1
   nonDezimal=0
   For a=i To 0 Step -1
      ziffer=Floor(zahl/(modus^a))
      zahl=zahl-(ziffer*(modus^a))
      nonDezimal=nonDezimal+(ziffer*10^a)
   Next
   
   Return nonDezimal
End Function ;fromDezimal


Tja, manchmal stimmts, manchmal aber auch nicht. Könnt ihr mir helfen?
 

David

BeitragDo, Dez 30, 2004 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

@Kryan: Naja das kürzeste... Bei mir sind halt noch Kommentarzeilen über jeder Funktion usw... Smile

@Rallimen: Danke! Wink

@Sound: Die Codes sind schon fertige Lösungen die funktionieren sollten, heute war "release" Tag... Wink

Kannst dir ja die diversen Lösungen ansehen!

grüße
 

Sound

BeitragFr, Dez 31, 2004 0:52
Antworten mit Zitat
Benutzer-Profile anzeigen
David hat Folgendes geschrieben:
Hi!
@Sound: Die Codes sind schon fertige Lösungen die funktionieren sollten, heute war "release" Tag... Wink

Kannst dir ja die diversen Lösungen ansehen!

grüße


Ja, also das konnte ich schon lesen. Mein Lösungsansatz ist ja nun aber wesentlich anders, wie du sicherlich erkannt hast. Der prinzipielle Lösungsansatz ist simpel, deshalb interessierte mich dieser nicht so. Die Codes, die gepostet worden, sind mir auch klar.

Aber ich wollte halt gerne wissen, warum mein Code nciht funzt, wie er es tun sollte.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Dez 31, 2004 1:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800 ,600,16,2
Const hexdat$ = "0123456789abcdef"
For t = 0 To 7
    ZUfall = Rand (0 , $fffffff)
    Print RSet (Hex (ZUfall) ,35) + "   BBVersion"
    Print RSet (fromDezimal (ZUfall,16) ,35)
    Print RSet (Bin (ZUfall) ,35) + "   BBVersion"
    Print RSet (fromDezimal (ZUfall,2) ,35)
    Print
Next
Stop
Function fromDezimal$ (zahl,modus)
    i = 0
    Repeat
        start = modus^i
        i = i + 1
    Until start > zahl
    nonDezimal$ = ""
    i = i - 1
    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"
        nonDezimal$ = nonDezimal$ + Mid (hexdat$,ziffer + 1 ,1)
    Next
    Return nonDezimal
End Function ;fromDezimal

Schau es dir an jetzt geht es , die Änderungen sieht du ja
Inclusive Test

Hex Zahlen lassen sich nur als String ausgeben!

Mit dieser Function lassen sich auch alle anderen Zähl-Syteme wie Oktal 8[/b] ausrechnen!
Wenn die Konstante Hexdat$ noch verlängert wird.....geht auch mehr wie 16
[BB2D | BB3D | BB+]
 

Sound

BeitragFr, Dez 31, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@Rallimen: Thx, die Funktion funzt erstmal. Habe sie noch geändert. ich fand die Idee mit hexdat$ zwar sehr interessant, aber ich habe es bei der anderen Funktion bereits mit ASCII gelöst und wollte deshalb jetzt wieder darauf zurückgreifen(ausserdem hat man so ein unbegrenztes zahlensystem - Wer braucht denn nicht mal das 32er-Zahlensystem *fg* Very Happy ). Aber ich habe bereits das nächste Problem.

Ich wollte natürlich noch überprüfen, ob die Zahlen, die eingegeben werden, auch gültig sind. Wieder natürlich allgemein für alle Zahlensysteme:

Code: [AUSKLAPPEN]


Function valid(zahl$,modus)
   For i=0 To Len(zahl$)-1
      asc_ziffer=Asc(Mid(zahl$,i+1,1))
      If modus>10 Then
         If (asc_ziffer>47) And (asc_ziffer<(55+modus)) And ((asc_ziffer<58) Or (asc_ziffer>64)) Then
            Return True
         Else
            Return False
         EndIf
      Else
         If (asc_ziffer>47) And (asc_ziffer<(48+modus)) Then
            Return True
         Else
            Return False
         EndIf
      EndIf
   Next
   
End Function ;valid


Für die erste ziffer prüft er auch korrekt, allerdings für alle nachfolgenden nicht. Meine Test haben ergeben, dass bei i>=1 asc_ziffer immer 0 ist. Wieso? Thx schonmal Very Happy

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 01, 2005 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hier probier das mal!
Code: [AUSKLAPPEN]

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
[BB2D | BB3D | BB+]

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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group