Alle buchstaben miteinander verknüpfen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

hab ich ja schon versucht! Aber irgendwie fehlt immer was oder es funktioniert nicht. Besonders bei Kennwörtern, die unterschiedlich lang sind, hake ich zurzeit. Könnt ihr mal bitte einen beispielcode posten? BITTE! :praise:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Hier ein Trick, der mir in ähnlichen Fällen immer geholfen hat:
Mach mal drei Routinen, eine für 3 Zeichen, 4 Zeichen & 5 Zeichen lange Passwörter. Jetzt vergleichst du die 3 Routinen und - aha - es ist jedes Mal immer nur eine bestimmte Zahl anders.
Daraus folgt: Mach ne Schleife, die diese Zahl verändert.

Es könnte sein, da so ne tolle Sache wie das hier rauskommt /:->

Code: Alles auswählen

For Buchstaben = 1 To 10
  For bla = 1 To Buchstaben
    ; blubb
  Next
Next

PS: Ich bin mir ziemlich sicher, dass du an dieser Sache gerade festhängst. Normalerweise denkt man nicht an so einen Schleifenverbund.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Ich habe jetzt mal folgenden code geschrieben:

Code: Alles auswählen

MyAlphabet$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
For a = 0 To Len(MyAlphabet$)
  String$ = Mid(MyAlphabet$,a,1)
  Debug String$
Next
Debug "--------------------------------------"
Debug "2 Zeichen..."
Debug "--------------------------------------"
For a = 0 To Len(MyAlphabet$)
  For b = 0 To Len(MyAlphabet$)
    String1$ = Mid(MyAlphabet$,a,1)
    String2$ = Mid(MyAlphabet$,b,1)
    String$ = String1$ + String2$
    Debug String$
  Next
Next
Debug "--------------------------------------"
Debug "3 Zeichen"
Debug "--------------------------------------"
For a = 0 To Len(MyAlphabet$)
  For b = 0 To Len(MyAlphabet$)
    For c = 0 To Len(MyAlphabet$)
      String1$ = Mid(MyAlphabet$,a,1)
      String2$ = Mid(MyAlphabet$,b,1)
      String3$ = Mid(MyAlphabet$,c,1)
      String$ = String1$ + String2$ + String3$
      Debug String$
    Next
  Next
Next
Nur wie schaffe ich es, dass ich in eine Variable, z.b. TextLaenge, schreiben kann, wie lang das Kennwort sein soll und das Prog dann auch diese Länge benutzt? ich kann ja schlecht für jede TextLänge einen Extra Code schreiben...
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Ich wollte mal das selbe machen, hatte das Passwort von einem eigenen Programm vergessen :mrgreen:

Der Code ist vom Remi_Meier, find ihn ganz nützlich & es hat funktioniert!
Aber damit er so wie du willst funktioniert musst du ihn wohl noch ein wenig umschreiben.

Code: Alles auswählen

Global id,n

Declare visit(k)  ;der name kommt von einer procedure, die für das durchsuchen von graphen gedacht ist

Structure meinstring
  String.b[26]
EndStructure
Global *k.meinstring
*k.meinstring=@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"


n=1  ;anz. zu permutierende zahlen
Global Dim Vali(n) ;array, welches die zahlen aufnimmt
id=-1 ;muss mit -1 initialisiert werden
visit(0) ;(start bei knoten 0)

For a=2 To 26
 n=a
 ReDim Vali(a)
 id=-1 
 visit(0)
Next

Procedure visit(k)
  id+1
  Vali(k)=id
  If id=n
    For z=1 To n
      stt.s+Str(Vali(z))
      str.s+Chr(*k\String[Vali(z)-1])
    Next
    Debug str
    stt=""
  EndIf
  For t=1 To n
    If Vali(t)=0
      visit(t)
    EndIf
  Next
  id-1
  Vali(k)=0
EndProcedure
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Hey, der Code funktioniert ja wirklich....

Der ist aber wirklich ein bisschen zu kompliziert für mich. Ich habe mich noch nicht mit sowas befasst:

Code: Alles auswählen

Chr(*k\String[Vali(z)-1]
Was genau soll das eigentlich bringen? Wie funktoinert das ganze? Kann mir den Code mal bitte jemand erklären? Es geht mir ja nicht darum, dass ich endlich einen funktionierenden Code habe, sondern, dass ich verstehe, was in solchen Codes gemacht wird...

Der Code ist finde ich ein bisschen komisch von den Variablennamen her aufgebaut. Wenn man den selbst geschrieben hat, blickt man natürlich noch durch. Aber wenn den ein außenstehender sieht, versteht der erstmal nur Bahnhof.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

PureBasic4.0 hat geschrieben:

Code: Alles auswählen

MyAlphabet$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
For a = 0 To Len(MyAlphabet$)
  String$ = Mid(MyAlphabet$,a,1)
  Debug String$
Next
Debug "--------------------------------------"
Debug "2 Zeichen..."
Debug "--------------------------------------"
For a = 0 To Len(MyAlphabet$)
  For b = 0 To Len(MyAlphabet$)
    String1$ = Mid(MyAlphabet$,a,1)
    String2$ = Mid(MyAlphabet$,b,1)
    String$ = String1$ + String2$
    Debug String$
  Next
Next
Debug "--------------------------------------"
Debug "3 Zeichen"
Debug "--------------------------------------"
For a = 0 To Len(MyAlphabet$)
  For b = 0 To Len(MyAlphabet$)
    For c = 0 To Len(MyAlphabet$)
      String1$ = Mid(MyAlphabet$,a,1)
      String2$ = Mid(MyAlphabet$,b,1)
      String3$ = Mid(MyAlphabet$,c,1)
      String$ = String1$ + String2$ + String3$
      Debug String$
    Next
  Next
Next
Du hast meinen Text nur halb gelesen. Vergleiche beide Sachen. Suche die Unterschiede.

Simpel gesagt, gibts pro 1 Zeichen Länge, eine Schleife und ein Mid(Bla, Bla, Bla) mehr. Die Anzahl der Schleifen und Mid() kann man doch wiederum von einer Schleife machen lassen. Los, los, streng deine grauen Zellen an, du bist kurz vor der Lösung ^^
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@Laurin: ich würde gerne den Publikumsjoker nehmen!

@all: den Code hab ich gerade geschrieben:

Code: Alles auswählen

MyAlphabet$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
#PwLaenge = 10
Dim Zeichen$(#PwLaenge)
For Laenge = 0 To #PwLaenge
  Zeichen$(Laenge) = Mid(MyAlphabet$,?,1)
Next
Nur wie komme ich an die StartPosition im Mid-Befehl? ich würde es ja mit schleifen machen, aber dazu müsste ich ja auch wieder alles einzeln proggen :cry:
Zuletzt geändert von PureBasic4.0 am 17.07.2007 15:32, insgesamt 2-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

Hier mal ein Beispiel mit zwei Buchstaben:

Code: Alles auswählen

Structure MyStruc
  Char.s{1}
  Pos.c
EndStructure

#Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

Dim Char.MyStruc(1)
Char(0)\Char = "A"
Char(0)\Pos  = 1
Char(1)\Char = "A"
Char(1)\Pos  = 1

Repeat
  Debug Char(0)\Char + Char(1)\Char
  
  If Char(1)\Pos < Len(#Chars)
    Char(1)\Pos + 1
    Char(1)\Char = Mid(#Chars,Char(1)\Pos,1)
  ElseIf Char(0)\Pos < Len(#Chars)
    Char(0)\Pos + 1
    Char(0)\Char = Mid(#Chars,Char(0)\Pos,1)
    
    Char(1)\Pos = 1
    Char(1)\Char = "A"
  Else
    Break
  EndIf
ForEver
Die Erweiterung zu beliebig vielen Buchstaben sollte nun nicht mehr so schwer sein.

Mfg DerProgger
Zuletzt geändert von Sicro am 17.07.2007 15:31, insgesamt 1-mal geändert.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@DerProgger und Deluxe0321:

Nehmt es mir bitte nicht übel, aber ich finde meinen Code (wenn der dann irgendwann mal funktioniert) um einiges übersichtlicher. Mit MemoryBuffers und ReDim und dem ganzen Zeug habe ich zwar schon einiges gemacht, aber nicht in diesem Ausmaße. :allright: . Ich möchte meinen Code zu Ende schreiben. :freak:

@DerProgger: Danke für das Beispiel, ich werde es mir mal durchschauen, denke aber nicht, dass ich diesen Code für meine weiteren Projekte verwenden könnte.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Tu das Mid() in ne Prozedur und rufe die innerhalb deiner Schleife so oft auf, wie das Passwort lang sein soll.

Also dass du dich ein wenig selbst geistig anstrengst, kann man doch erwarten.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Antworten