Ergebnis 1 bis 7 von 7
  1. #1
    xallex xallex ist offline
    Avatar von xallex

    Virsual Basic Primzahlengenerator funktioniert nich.

    Hallo.
    Wir sollen für die schule einen Primzahlengenerator, der alle Primzahlen in einem Zahlenraum (in meinem fall 2-9) Ausspuckt. lieder gibt meiner nur die 2 und 3 raus, was natürlich falsch ist.
    Code:
    Private Sub Knopf_Click()
        Dim Zahl As Double, Rechnung As Double, Teilen As Double
        For Zahl = 2 To 9
            For Teilen = 2 To Zahl - 1
                Rechnung = Zahl / Teilen
                If Rechnung = Int(Rechnung) Then
                    Teiler = Teiler + 1
                    Else
                    Teiler = Teiler
                End If
                Next Teilen
            If Teiler = 0 Then
                Ausgabe.Caption = Zahl
                MsgBox (Ausgabe.Caption)
                Else
            End If
        Next Zahl
        
    End Sub
    Dass manche dinge überflüssig sind, liegt daran, dass er nicht funktioniert hat, weshalb ich z.B. eine eher unnötige variable eingefürht habe
    Natürlich gibt es anleitungen im internet, aber ich würde gerne wissen, wo hier das problem liegt.

  2. Anzeige

    Virsual Basic Primzahlengenerator funktioniert nich.

    Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
  3. #2
    Bl4ck M4ch!n3 Bl4ck M4ch!n3 ist offline
    Avatar von Bl4ck M4ch!n3

    AW: Virsual Basic Primzahlengenerator funktioniert nich.

    Mit welcher Version von Visual Basic arbeitet ihr denn? o_O
    Total unübersichtlich und deine gewollte Funktion kann ich auch nicht erkennen
    Machs dir einfacher :

    Listbox und Button in die Form.

    4 Variablen deklarieren z.B
    Code:
    Dim Zahl As UShort  
    Dim Teiler As UShort          
    Dim Ergebnis As Single         
    Dim Zaehler As UShort
    Du hattest alle Variablen als Double => Die sind nur unnötige Ressourcenfresser
    Eine Variable vom Typ Single reicht für dein Vorhaben locker aus.

    Im Code für den Button machst du folgendes :

    -> Eine For - Schleife von 2-9 für die Zahlen
    -> Darin wieder eine For-Schleife von 1-9 für das Teilen
    -> In der Teiler-Schleife teilst du dann die Zahl Durch den Teiler ABER : Mit dem MODULO Befehl (Ergebnis = Zahl Mod Teiler)

    Der Modulo gibt den Restwert einer Division zurück.
    Da du nur die Zahlen von 2 bis 9 testest und eine Primzahl nur durch 1 und sich selber teilbar ist müsstest du (wegen der For-Schleife von 1-9) bei jeder Primzahl genau sieben mal einen größeren Restwert als 0 zurückkriegen.

    Also schreibst du noch in die Teiler-Schleife, dass jedesmal wenn der Wert größer 0 ist die Variable Zähler um 1 hochgezählt werden soll.

    Ist die Zähler-Schleife fertig prüfst du ob die Variable Zähler den Wert 7 hat und wenn ja, dann fügst du der Listbox die Aktuelle Zahl hinzu.
    Danach die Zählervarriable wieder auf 0 setzen.

    Das wars ;D
    Sind bei mir 8 Zeilen Code.
    Es würde sicher noch effizienter gehen, ohne das man jede Zahl 9 mal teilen muss, aber ich würde fast wetten das das Programm dann länger wird
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Virsual Basic Primzahlengenerator funktioniert nich.  

  4. #3
    HardAndSoft HardAndSoft ist offline
    Avatar von HardAndSoft

    AW: Virsual Basic Primzahlengenerator funktioniert nich.

    Hi xallex,

    Du solltest mal die Variable "Teiler" vor Beginn der inneren Schleife initialisieren (Teiler=0); dann klappt's auch mit den Primzahlen!
    Ganz sauber wäre es, wenn Du die Variable auch noch deklarieren würdest.

  5. #4
    xallex xallex ist offline
    Avatar von xallex

    AW: Virsual Basic Primzahlengenerator funktioniert nich.

    In der Tat war das das Problem. ich habe das jetzt noch schneller gemacht und verbessert, findet ihr das so ok:
    Code:
    'Primzahlgenerator 2011 by Alex
    'Ungültige Eingaben in Feld 1 werden verhindert
    Private Sub Eingabe1_KeyPress(KeyAscii As Integer)
        Select Case KeyAscii
            Case 48 To 57
            Case 8
            Case Else
                KeyAscii = 0
        End Select
    End Sub
    
    'Ungültige Eingaben in Feld 2 werden verhindert
    Private Sub Eingabe2_KeyPress(KeyAscii As Integer)
        Select Case KeyAscii
            Case 48 To 57
            Case 8
            Case Else
                KeyAscii = 0
        End Select
    End Sub
    
    'Überprüfung
    Private Sub Knopf_Click()
        Dim PZahl As Double, Teiler As Double, Definition As Boolean
        For PZahl = CDbl(Eingabe1.Text) To CDbl(Eingabe2.Text) 'Äußere Schleife, stellt die zu überprüfende zahl zu verfügung
            Definition = True
            'Hier werden gerade Zahlen dierekt aussortiert
            If Int(PZahl / 2) = PZahl / 2 Then
                Definition = False
            Else
                For Teiler = 3 To Sqr(PZahl)  Step 2 'Innere Schleife, prüft Teilbarkeit
                    If PZahl / Teiler = Int(PZahl / Teiler) Then
                        Definition = False
                        Exit For
                    Else
                        Definition = True
                    End If
                Next Teiler
            End If
            If Definition = True Then
                Primzahlen.AddItem PZahl
            End If
        Next PZahl
    End Sub

  6. #5
    HardAndSoft HardAndSoft ist offline
    Avatar von HardAndSoft

    AW: Virsual Basic Primzahlengenerator funktioniert nich.

    Hi xallex,

    habe noch nicht sehr intensiv reingeschaut. Was mir allerdings auf den ersten Blick aufgefallen ist, sind Deine Schleifen. Konstrukte wie
    For PZahl = CDbl(Eingabe1.Text) To CDbl(Eingabe2.Text)
    For Teiler = 3 To Sqr(PZahl)
    sind in sehr vielen Programmiersprachen die reinsten Performancekiller. Insbesondere die Umwandlung von Character nach Double ist eine der aufwändigsten Operationen, die's gibt. Sowas sollte man natürlich so selten wie möglich machen.

    Ich weiß nicht, wie es momentan in .NET implementiert ist, aber es gibt viele Sprachen, da werden die Anfangs- und Endwerte des Schleifendurchlaufs bei jedem Durchlauf neu berechnet. Das kostet natürlich irre Rechenleistung. Deshalb berechnet man solche Schleifenbedingungen vor der Schleife und verwendet als Schleifenanfang und -ende nur das jeweilige Ergebnis.

    Beispiel: Anstelle von
    FOR nX=1 TO nY / 3 schreibt man besser

    nEnde=nY / 3
    FOR nX=1 TO nEnde

    Viel Erfolg!

  7. #6
    xallex xallex ist offline
    Avatar von xallex

    AW: Virsual Basic Primzahlengenerator funktioniert nich.

    Danke!
    Habs ausprobiert, und es brinkt keinen (merklichen) geschwindikeitsvorteil. also lasse ich das, weil mein lehre das mit dem cdbl gut findet

  8. #7
    Bl4ck M4ch!n3 Bl4ck M4ch!n3 ist offline
    Avatar von Bl4ck M4ch!n3

    AW: Virsual Basic Primzahlengenerator funktioniert nich.

    Natürlich merkst du sowas bei einem so kleinen Programm nicht, aber du schreibst ja nicht nur Primzahlengeneratoren ;D
    Je früher du dir einen sauberen Programmierstil aneignest desto leichter hast du es später ;D

Ähnliche Themen


  1. Virsual Basic: Aloha, ich möchte anfangen mit Visual Basic zu arbeiten. Es gibt da gewisse Chats & ich möchte mittels VB ein paar Bots konstruieren. Kennt jemand...

  2. wlan mit wii funktioniert nich fehler 51330: hallo ..tut mir leid dass ich einen neuen thread aufmache obwohl es schon so viele über dieses thema gibt nur leider habe ich nichts brauchbares was...

  3. Otheros auf ps3 funktioniert nich!!!!: hallo zusamman!! Ich habe ein Problem mit meiner Ps3!! -Ich habe Otheros auf eine HD geladen, ahe sie an die ps3 angeschlossen, und habe...

  4. Rainbow Six Vegas funktioniert nich mehr!: Rainbow Six Vegas http://www.forumla.de/bilder/2006/10/60.jpg System: Computer Genre: Modern, Shooter, Taktik Altersfreigabe: ab 18

  5. Musiktaste funktioniert nich kaputt? HILFEE: hey, hab vorhin erst bemerkt das meine musiktaste gar nicht tut wofuer ist die eigentlich? wenn ich sie druecke passiert nichts auch nich wenn ich...

Besucher kamen mit folgenden Begriffen auf die Seite

virsualbasic