Alle möglichen Zahlen durchgehen!

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Alle möglichen Zahlen durchgehen!

    Hey Community,
    ich wollte mir ein kleines Programm schreiben, dass mir alle Zahlenkombinationen durchgeht, die bei einer 20-stelligen Zahlenkette bestehen können.
    Dazu habe ich mir mal folgenden Code überlegt:

    VB.NET-Quellcode

    1. Dim stellen(21) As Integer
    2. Do While finish = False
    3. stellen(0) += 1
    4. For i = 0 To 20
    5. If stellen(i) = 9 Then
    6. stellen(i) = 0
    7. stellen(i + 1) += 1
    8. If stellen(21) = 1 Then
    9. MsgBox("Fertig")
    10. finish = True
    11. End If
    12. End If
    13. Next
    14. Loop



    Doch leider kommt es nie zu der erwünschten MessageBox. Den Fehler kann ich auch nicht finden :(
    Hat einer den Fehler erkannt?


    Mfg

    Cronax
    Dürfte so gehen:

    VB.NET-Quellcode

    1. dim ZahlZumRechnen as long = 00000000000000000001
    2. dim EndZahl as long = 99999999999999999999
    3. do until ZahlZumRechnen >= EndZahl
    4. ZahlZumRechnen += 1
    5. loop
    6. MsgBox("Fertig!")
    Schon mal was von einer For-Schleife gehört? Und die Zahl "99999999999999999999" passt nicht in einen Long. Mal drüber nachdenken...
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    SpaceyX schrieb:

    Schon mal was von einer For-Schleife gehört? Und die Zahl "99999999999999999999" passt nicht in einen Long. Mal drüber nachdenken...


    ja, ich mache aber alles immer mit do

    Ups, das mit dem Long habe ich nicht beachtet
    @ich5003
    Probier das mal aus und dann änder deine Meinung ;)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Dim t As New Threading.Thread(AddressOf DoU)
    4. t.Start()
    5. Dim tt As New Threading.Thread(AddressOf ForS)
    6. tt.Start()
    7. End Sub
    8. Public Sub DoU()
    9. Dim s As New Stopwatch
    10. Dim i As Integer = 0
    11. s.Start()
    12. Do Until i >= 1000000000
    13. i += 1
    14. Loop
    15. MessageBox.Show("Do Until " & s.ElapsedMilliseconds.ToString(""))
    16. End Sub
    17. Public Sub ForS()
    18. Dim s As New Stopwatch
    19. s.Start()
    20. For a As Integer = 0 To 1000000000
    21. Next
    22. s.Stop()
    23. MessageBox.Show("For-Schleife " & s.ElapsedMilliseconds.ToString())
    24. End Sub
    25. End Class
    Ich möchte nicht einfach bis zu einer gewissen Zahl zählen lassen.
    Ich möchte alle Möglichkeiten einer 20-stelligen Zahlenkette durchgehen, dass heißt, dass nach 10 Schritten aufjedenfall die erste Zahl 0 sein muss.
    Ich möchte die 10^20 möglichkeiten durchgehen lassen. Das hochzählen zu lassen kann ich auch...

    Hoffe man versteht nun was ich meine :-/
    Nein, ist nicht klar, was Du vor hast... Hast Dir mal die Zahl 10^20 aufgeschrieben? Und alle Möglichkeiten durchgehen, bedeutet nun mal bei 0 anfangen und bei 10^20 aufhören. Happy waiting....
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @AliveDevil

    Danke für den Tipp, aber ich wollte eig wissen was an meinem Code falsch ist.
    Mit einem Int-Array sollte dass doch auch gehen, ich wüsste nicht, wieso das nicht gehen sollte, deswegen werde ich nicht auf BigInteger greifen.


    PS: Ich möchte alle Möglichkeiten der Zeichenkette durchgehen, genauso wie bei einer Bruteforce-Attacke!
    Weil das, was du machst, Müll ist.
    Wieso solltest du ein Array haben wollen, wo die Elemente von 0 bis 9 gehen? (n Byte hätte da auch gereicht).
    Das geht am Sinn hinter Zahlen komplett vorbei. Wenn du nun .ToString("00000000000000000000") machst, ist das doch a) performanter und b) einfacher. Da stimmst du mir zu, korrekt?
    Warum also den Umweg über ein Array gehen, was dabei auch noch überdimensioniert ist?

    VB.NET-Quellcode

    1. For i As BigInteger = 0 To BigInteger.Pow(10, 20)
    2. Console.WriteLine(i.ToString("00000000000000000000"))
    3. Next
    4. Console.ReadLine()

    Ist doch eindeutig kürzer als dein Ansatz.
    @Alive Devil

    ja aber stellen wir uns jetzt mal eine BruteForce attacke vor:

    Das zu ermittelnde PW lautet: 00130122

    Deine Methode wird doch gar nicht erst die ersten beiden Nullen nehmen, nein es wird einfach 130122 nehmen anstatt 00130122.
    Da ich aber alle möglichkeiten nehmen will, dann MÜSSEN die ersten beiden Nullen mitgenommen werden.

    Gewährleistet der BigInteger das mit den zwei Nullen?