Ergebnis 1 bis 7 von 7
-
24.05.2011, 18:45 #1xallex
Virsual Basic Primzahlengenerator funktioniert nich.
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
Natürlich gibt es anleitungen im internet, aber ich würde gerne wissen, wo hier das problem liegt.
-
Virsual Basic Primzahlengenerator funktioniert nich.
Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
-
28.05.2011, 09:59 #2Bl4ck 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
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
-
28.05.2011, 18:46 #3HardAndSoft
AW: Virsual Basic Primzahlengenerator funktioniert nich.
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.
-
01.06.2011, 19:59 #4xallex
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
-
02.06.2011, 05:17 #5HardAndSoft
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!
-
03.06.2011, 09:39 #6xallex
AW: Virsual Basic Primzahlengenerator funktioniert nich.
Habs ausprobiert, und es brinkt keinen (merklichen) geschwindikeitsvorteil. also lasse ich das, weil mein lehre das mit dem cdbl gut findet
-
04.06.2011, 09:56 #7Bl4ck 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
-
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... -
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... -
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... -
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 -
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...
Du kannst das Pikachu Deck ganz gut mit Voltoball / Lektroball und Zapdos spielen. Dann schaffst du es in aller Regel der Fälle, dass deine Bank...
Pokémon Trading Card: Pocket