Alle buchstaben miteinander verknüpfen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ich nehme dir die Arbeit ab ^^, habe ja sonst nix zu tun :freak:

Code: Alles auswählen

Global MyAlphabet$
MyAlphabet$ = "ABC123" 
;MyAlphabet$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 

Procedure Zeichenkette(String$,n)
 If n = 1 
  For a = 1 To Len(MyAlphabet$) 
   Str$ = Mid(MyAlphabet$,a,1)
   Debug String$+Str$ 
  Next 
 Else
  For a = 1 To Len(MyAlphabet$) 
   Str$ = Mid(MyAlphabet$,a,1)
   Zeichenkette(String$+Str$,n-1) 
  Next 
 EndIf
EndProcedure

Debug "--------------------------------------" 
Debug "1 Zeichen..." 
Debug "--------------------------------------" 
Zeichenkette("",1)
Debug "--------------------------------------" 
Debug "2 Zeichen..." 
Debug "--------------------------------------" 
Zeichenkette("",2)
Debug "--------------------------------------" 
Debug "3 Zeichen" 
Debug "--------------------------------------" 
Zeichenkette("",3)
Debug "--------------------------------------" 
Debug "4 Zeichen" 
Debug "--------------------------------------" 
Zeichenkette("",4)
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
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

> For a = 1 To Len(MyAlphabet$)

Bei tausenden Schleifendurchläufen ist das Unklug. Besser:

Code: Alles auswählen

...
abc.l = Len(MyAlphabet$)
For a = 1 To abc
...
Gerade wenn die Passwörter länger werden spart das massig Laufzeit, weil nicht bei jedem Schleifendurchlauf "Len" aufgerufen wird.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@Falo: OK. Hast recht.
Laurin hat geschrieben:Tu das Mid() in ne Prozedur und rufe die innerhalb deiner Schleife so oft auf, wie das Passwort lang sein soll.
Was bringt es mir, wenn ich das Mid in eine Procedure schreibe?

Code: Alles auswählen

Procedure.s GetString(String$,Pos)
  Text$ = Mid(String$,StartPos,1)
  ProcedureReturn Text$
EndProcedure
Ich meine, dann kann ich auch Mid() einfach so aufrufen. Was meinst du mit der Aussage? Was soll ich in die Procedure reinschreiben? Lass doch endlich mal die Katze aus dem Sack :lol:
Zuletzt geändert von PureBasic4.0 am 17.07.2007 18:14, insgesamt 1-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Was seid denn ihr für welche ... nehmt einem Skript-Kiddie seine dümmliche Arbeit ab.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@vTUT: Was war denn das jetzt für ne Aussage? Irgendwie motzt du in letzter Zeit nur noch rum. Ich stelle eine anständige Frage, schreibe den Code sogar größtenteils selbst (während mir die anderen Tips geben, wie ich das zu machen habe) und du beschwerst dich. :evil:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

naja damit es schneller läuft wäre das hier bassen:

Code: Alles auswählen

Global MyAlphabet$
MyAlphabet$ = "ABC123" 
;MyAlphabet$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 

Procedure Zeichenkette(String$,n)
 l = Len(MyAlphabet$)-1
 If n = 1 
  For a = 0 To l 
   Str$ = PeekS(@MyAlphabet$+a,1)
   Debug String$+Str$ 
  Next 
 Else
  For a = 0 To l
   Str$ = PeekS(@MyAlphabet$+a,1)
   Zeichenkette(String$+Str$,n-1) 
  Next 
 EndIf
EndProcedure

Debug "--------------------------------------" 
Debug "1 Zeichen..." 
Debug "--------------------------------------" 
Zeichenkette("",1)
Debug "--------------------------------------" 
Debug "2 Zeichen..." 
Debug "--------------------------------------" 
Zeichenkette("",2)
Debug "--------------------------------------" 
Debug "3 Zeichen" 
Debug "--------------------------------------" 
Zeichenkette("",3)
Debug "--------------------------------------" 
Debug "4 Zeichen" 
Debug "--------------------------------------" 
Zeichenkette("",4)
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
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@Stargate: Danke, aber da ist doch schonwieder ein PeekS() drin. Könntest du mir mal bitte erklären, warum der da drin ist, und warum man dafür keine normalen Strings benutzen kann? Performance?

Und für was ist die Variable n?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Code: Alles auswählen

Mid(String$, Position, Laenge)
ist das gleiche wie

Code: Alles auswählen

PeekS(@String$+Position, Laenge)
@String$ gibt ja die Position der Zeichenkette, die im Speicher steht
und nun ließt er also negau ein 1Byte-Länge aus dem Speicher, jenach dem wie groß Position ist, ließt er etwas weiter hinten


Mit dem Unterschied das Mid bei 1 anfängt und bei PeekS ist das erste Zeichen bei "+0"

Ich glaube ich hatte damals n Test gemacht und da war PeekS schneller weil es direkt aus dem Speicher ließt.
Zuletzt geändert von STARGÅTE am 17.07.2007 18:47, insgesamt 1-mal geändert.
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
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

ok. danke @all :allright:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke, es funktioniert alles ,aber jetzt steh ich echt auf dem Schlauch:

Geht es irgendwie, dass man wieder an derselben Stelle weitermachen kann, wo man aufgehört (Programm schließen,...) hat? Klar - speichern, wo man war, aber wie kann das programm dann wieder dahin springen wo es war?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten