Seite 1 von 1

Zähler mit Zahlen und Buchstaben

Verfasst: 26.09.2010 23:58
von Skywalker
Hallo Leute,

nach langer Zeit beschäftige ich mich wieder mit PB und stehe gleich vor einem Problem.
Nur so zum Spaß, wollte ich eine Schleife bilden, welche auch Buchstaben enthält.
Es sollen also die Zahlen nicht nur von 0-9, sondern von 0-Z gehen.
Einstellig habe ich das nun hinbekommen, aber ab der zweiten Stelle weiß ich nicht mehr weiter.

Beispiel:
Der Zähler fängt an und als Ausgabe habe ich:
0
1
2
..
Z

Jetzt müsste die zweite Stelle wie folgt erscheinen:
01
02
..
0Z

Dann geht es weiter mit:
11
12
..
1Z

Dann:
21
22
..
2Z

Und immer so weiter. Aber irgendwie fehlt mir hier ein Ansatz, das zu Lösen.
Wer kann mir da weiterhelfen?

Danke
Thomas

Re: Zähler mit Zahlen und Buchstaben

Verfasst: 27.09.2010 00:06
von STARGÅTE
zB mit ConvertNumber()

Code: Alles auswählen

Procedure.s ConvertNumber(NumberIn$, BaseIn, BaseOut)
  Protected Value, Result, n, Modulo, NumberOut$, *Char.Character
  If BaseIn < 2 Or BaseOut < 2 Or BaseIn > 36 Or BaseOut > 36
    ProcedureReturn ""
  EndIf
  NumberIn$ = UCase(Trim(NumberIn$)) 
  *Char.Character = @NumberIn$
  n = Len(NumberIn$)-1
  While *Char\c
    If *Char\c > 64 
      Value = *Char\c-55
    Else 
      Value = *Char\c-48
    EndIf
    Result + Value*Pow(BaseIn,n)
    *Char+1 : n-1
  Wend
  Repeat 
    Modulo = Result % BaseOut 
    If Modulo > 9 
      NumberOut$ = Chr(55+Modulo) + NumberOut$
    Else 
      NumberOut$ = Str(Modulo) + NumberOut$
    EndIf 
    Result / BaseOut 
  Until Not Result
  ProcedureReturn NumberOut$
EndProcedure
Damit kanst du einfach aus dem 10er System ins 36 System (10+26) gehen:

Code: Alles auswählen

Debug ConvertNumber("20", 10, 36)
Debug ConvertNumber("200", 10, 36)
Debug ConvertNumber("2000", 10, 36)

Code: Alles auswählen

For n = 1 To 1000
 Debug ConvertNumber(Str(n), 10, 36)
Next
EDIT:
Wenns nur von 10er nach 36er System bleiben soll, geht vereinfacht auch das:

Code: Alles auswählen

Procedure.s ConvertTo36(Number)
  Protected Modulo, NumberOut$
  Repeat 
    Modulo = Number % 36 
    If Modulo > 9 
      NumberOut$ = Chr(55+Modulo) + NumberOut$
    Else 
      NumberOut$ = Str(Modulo) + NumberOut$
    EndIf 
    Number / 36 
  Until Not Number
  ProcedureReturn NumberOut$
EndProcedure

For n = 1 To 1000
  Debug ConvertTo36(n)
Next

Re: Zähler mit Zahlen und Buchstaben

Verfasst: 27.09.2010 22:46
von Skywalker
Oh super, das funktioniert. Danke für die schnelle Hilfe.
Da fragt man nach einem Denkanstoß und bekommt gleich eine komplette Lösung. :-)

Gemerkt habe ich aber, das selbst wenn ich die Variabel "n" als double oder quad verwende,
irgendwann Schluss mit Zählen ist.
Aber egal, Hauptsache ich habe verstanden wie es funktioniert.

Re: Zähler mit Zahlen und Buchstaben

Verfasst: 27.09.2010 22:55
von TomS
Nimm 2 Zähler. Immer wenn der erste voll ist, erhöhst du den 2ten und fügst den mit RSet() an.

Re: Zähler mit Zahlen und Buchstaben

Verfasst: 27.09.2010 23:15
von Skywalker
Danke auch hier.

An einen weiteren, oder noch mehr Zähler, hatte ich auch gedacht.
Das mit dem RSet() werde ich morgen mal Testen.