Zähler mit Zahlen und Buchstaben

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Zähler mit Zahlen und Buchstaben

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Zähler mit Zahlen und Buchstaben

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Re: Zähler mit Zahlen und Buchstaben

Beitrag 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.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Zähler mit Zahlen und Buchstaben

Beitrag von TomS »

Nimm 2 Zähler. Immer wenn der erste voll ist, erhöhst du den 2ten und fügst den mit RSet() an.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Re: Zähler mit Zahlen und Buchstaben

Beitrag 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.
Antworten