Primzahlen @ Quick Basic

Julatsch

Lt. Junior Grade
Registriert
Juli 2005
Beiträge
397
Moin, ich fange gerade an ein wenig Programmieren zu lernen. Ich bin dabei mir Quick Basic beizubringen.

Ich hab auch so die Grundschritte alle hinter mir und kenne so die standard Befehle.

Nun wollte ich mich an ein Primzahlen Programm ranwagen. Nur häng ich da irgendwie total. Ich weiß nicht so recht womit oder wie ich da anfangen soll. Also es geht darum, dass ich alle Primzahlen zwischen 1 und 1000 auf dem BIldshirm ausgebe.

Ich wollte mir eine For Schleife Machen von 1 bis 1000. Allerdings weiß ich nicht genau wie ich jetz die Berechnung der Primzahlen schreiben soll.

Könntet ihr mir für das Programm eine Kleine ANleitung geben?
 
Ich kann kein Quickbasic.
Aber du musst ja nur abfragen, ob sich die Zahlen durch etwas anderes als eins und sich selbst teilen lassen.
Nun, das ist einfach wenn QB Den Modulo (Rest) berechnen kann. Sonst einfach schauen obs eine Ganzzahl ist, das Ergebnis.
Pseudocode:
Code:
for zahl = 1 to 1000
   prim = true
      for teiler = 2 to (zahl/2)
      if zahl%teiler == 0 then
         prim = false
         nächste zahl
      end if
   next
   if prim == true print zahl
next

% ist jedenfalls in C# der Modulo-Operator.

hoffe das hat geholfen...

/edit: sry, habe den Abbruch vergessen + anderer denkfehler
 
Zuletzt bearbeitet: (denkfehler)
Mh, wenn ich das so versuche wie du meinst wird bei mir komischerweise fast jede Zahl mehrmals ausgegeben so hab ich von 1 to 1000 jede zahl bestimmt 5-8 mal. Wobei ich nicht genau weiß wie er sortiert... Da er Primzahlen sowie normale Zahlen ausgegeben hat, ab und zu aber fehlen zahlen. Zum Beispiel steht da am Ende:

996
998
999
999
999
999
999
999
1000
1000
1000
etc... sinnlos ^^
 
Unter VBA sollte es so klappen
Code:
Sub primzahlen()
Dim prim(1000) As Boolean
    a = 8 Mod 3
    For i =[COLOR="Red"] 2[/COLOR] To 1000
        prim(0) = True
        For teiler = 2 To i / 2
            If i Mod teiler <> 0 Then
                prim(teiler) = True
            Else
                prim(teiler) = False
            End If
        Next
        For j = 2 To i / 2
            If prim(j) = False Then
                prim(0) = False
                Exit For
            End If
        Next
        If prim(0) = True Then
            If ausgabe <> Empty Then
                ausgabe = ausgabe & " / "
            End If
            ausgabe = ausgabe & i
        End If
    Next
    MsgBox (ausgabe)
End Sub
Bissel umständlich aber läuft ;-)
Der Befehl mod ist das was Backslash unter % benutzt.
PS: 1 ist keine Primzahl - Die Schleife sollte daher bei 2 losgehen ;)
 
Zuletzt bearbeitet:
Ihr beiden habt ja mal voll am Thema vorbeigepostet. Er muss nicht bis morgen seine Hasuaufgaben fertig haben, sondern will die Denkweise der Problemlösung nachvollziehen können.

Ich versuch das mal darzustellen (aller Code ist pseudo):

1. Was macht eine Primzahl aus?
-> Sie ist durch keine Zahl teilbar außer blablabbla

2. Wie erkenne ich also ob eine Zahl eine Primzahl ist?
-> Ich teile sie einfach durch alle Zahlen die kleiner sind als ihre hälfte (kleine Aufgabe an dich: Warum nur bis zu Hälfte? ;)).

3. Wie setze ich das als Programm um?
-> Ich gehe zunächst davon aus dass die Zahl, die ich gerade überprüfe, eine Primzahl ist:
Code:
int zahl = irgendeineZahl ;)
bool ist_primzahl = true

-> Ich überprüfe ob die Zahl ohne rest durch alle kleineren Teilbar ist (google: modolu-operator):
Code:
teiler = 2
while( teiler <= zahl / 2 )
       int rest = zahl mod teiler

-> Wenn der Rest dieser division null ist, dann ist es keine Primzahl:
Code:
       wenn ( rest == 0 )
             ist_primzahl = false
             stoppe die überprüfung dieser zahl
       sonst erhöhe teiler

zusammengesetzt:

Code:
int zahl = irgendeineZahl ;)
bool ist_primzahl = true
teiler = 2
while( teiler <= zahl / 2 )
          int rest = zahl mod teiler
          wenn ( rest == 0 )
               ist_primzahl = false
               stoppe die überprüfung dieser zahl
          sonst erhöhe teiler

Jede Zahl, für die nach dieser schleife noch ist_primzahl == true gilt, ist eine primzahl ;)

Eine Schleife von 2 bis 1000 darum zu bauen überlass ich mal dir :)
 
Wenn er den C# Pseudocode oder den fertigen VBA-Code interpretiert, kriegt er auch seinen Denkansatz.
Sonst hätt ich ihm das ganze auch in QuickBASIC geschrieben und nur eine Datei hinterlegt.

Wenn man nämlich programmieren will, muss man ja auch erkennen können was da passiert ;)
Und das ist eher wichtig. Das er weiß wie man an eine Primzahl kommt wird er wohl selber wissen. Nur an der Umsetzung haperts
 
Ich kriegs einfach net hin -.- hab mich wohl überschätzt so dolle is mein wissen nu doch net^^

Also ich hab nu die For schleife ^^

CLS
For i = 1 to 1000 Step 2
.
.
.
Next i

Ich habe mich für Step 2 entschlossen, weil ich ja so die geraden Zahlen ausschließe, und wenn ne Zahl durch eine gerade teilbar ist, ist es eh keine Primzahl.

Nehmen wir als Beispiel mal die 11

Diese soll ich jetzt durch alle ungeraden Zahlen davor teilen um herauszukriegen obs nu ne Primzahl ist oder nicht.

Also 11/9, 11/7, 11/5, 11/3 ....

Dazu brauch ich dann ne Schleife, die das ganze für jede neue Ungerade Zahl macht.

Nur wie schreibe ich das ganze in Basic? Pseudo Code bringt mir nicht so viel. Ich weiß zwar wies funktioniert dann, allerdings nicht wie ichs im Basic schreib.

Hoffe jemand versteht mein Problem.


Vielen Dank schonmal
 

Ähnliche Themen

Antworten
15
Aufrufe
5.039
Zurück
Oben