blitz - Primzahlen ausrechnen (Programmieren)

blitz - Primzahlen ausrechnen (Programmieren)

mein programm soll alle primzahlen ausrechnen, nach 3 hört es aber auf. warum???



zahl = 0

.start1
zahl = zahl + 1
teiler = 1

.start2
teiler = teiler + 1
If teiler > (zahl / 2) Then Goto ziel
If Int(zahl / teiler) <> (zahl / teiler) Then Goto start2
If Int(zahl / teiler) = (zahl / teiler) Then Goto start1

.ziel
Print zahl
Goto start1
Zahlenvariablen in Blitz Basic speichern standardmäßig ganze Zahlen; da funktioniert Dein Dividieren nicht.

Damit eine Variable reelle (bzw. Fließkomma-) Zahlen speichert, mußt Du wenigstens bei ihrer ersten Benutzung ein # an ihren Namen hängen:

zahl# = 0

.start1
zahl = zahl + 1
teiler# = 1

PS: Versuche, Goto zu vermeiden; damit werden Programme unübersichtlich.
ja, natürlich, habe ich total vergessen...

danke sehr...
Kleine Zwischenfrage: Gibt's bei Blitz Basic keine ordentlichen Schleifen?
Doch.
Und genau jetzt erkenne ich Renés Postskriptum >_<
wichtige schleifen:



WHILE - WEND

Beschreibung
Dieser Befehl definiert eine WHILE-WEND-Schleife. Am Anfang der Schleife steht WHILE, das zusammen mit einer Bedingung angegeben wird. Am Ende steht WEND, das das Schleifenende kennzeichnet. Dazwischen stehen mehrere Befehle, die innerhalb dieser Schleife ausgeführt werden sollen.

Die Prüfung der Bedingung geschieht bei WHILE-WEND-Schleife immer am Anfang. Sollte die Bedingung erfüllt werden, so werden alle Befehle in der Schleife ausgeführt.

Beispiel
Dieses Beispiel zeichnet bunte Linien. Erst nach einem Tastendruck wird die Schleife beendet:

GRAPHICS 800,600
WHILE NOT KEYHIT(1)
COLOR RND(255),RND(255),RND(255)
LINE RND(800),RND(600),RND(800),RND(600)
WEND


----------------------------------------------------


REPEAT - UNTIL

Beschreibung
Dieser Befehl definiert eine REPEAT-UNTIL-Schleife. Am Anfang steht REPEAT und am Ende UNTIL bzw. FOREVER. Dazwischen stehen beliebig viele Befehle. Nach einem Schleifendurchgang wird eine Bedingung mit UNTIL-Befehl geprüft. Falls die Bedingung nicht erfüllt wurde, dann wird die Schleife nochmal abgearbeitet.

Wird UNTIL gegen FOREVER ersetzt, so entfällt die Prüfung einer Bedingung und die Schleife wird ewig ausgeführt.

Beispiel
Dieses Programm wartet solange, bis die ESC-Taste betätigt wird:

PRINT "Drücke ESC"
REPEAT
UNTIL KEYHIT(1)=1


----------------------------------------------------


FOR Variable = Start TO Ende [STEP Stufe]


Beschreibung
Diese Anweisung definiert eine Zählschleife, die mit NEXT abgeschlossen werden muss. Der Variable wird ein Startwert zugewiesen. Nach einem kompletten Durchlauf der Schleife bis NEXT wird der Wert der Variable erhöht. Dieser Befehl kann nur zusammen mit TO und NEXT benutzt werden (zusätzlich sind EACH und STEP möglich).

Beachte, dass man mehrere Schleifen ineinander verschachteln darf (eine Schleife in die andere). Diese Schleifen können nicht die gleichen Variablennamen haben, da sonst ein Konflikt entsteht und das Programm sich dann totläuft.

Parameter
Variable = beliebiger Variablenname (für einfache Zählungen wird meistens i genommen)

Rückgabewert
Der Variable wird sofort ein Startwert zugewiesen. Nach jedem Durchlauf wird der Wert um Stufe-Wert vergrößert/verkleinert.

Beispiel
Dieses Beispiel schreibt 20x den Text "Hello World":

FOR i=1 TO 20
PRINT "Hello World"
NEXT

----------------------------------------------------


quelle: BlitzBasic - Onlinehilfe





ich benutze aber lieber goto gerade weil es unkompliziert und übersichtlich ist...
@ greenbluered

wenn du dein programm beschleunigen willst, dann dividiere nur durch die schon ausgerechneten primzahlen, statt immer bis zur hälfte der zahl...
@ greenbluered - Aber es ist gerade nicht übersichtlich. :)
René hat absolut recht.
Jedes goto ist zuviel.
Bei mir in der Schule wird ein goto z. B. als Fehler gewertet; ausser es war wirklich nicht zu umgehen, was wohl ein Ding der Unmöglichkeit ist.

Viel Spass mit Spagetticode und Co. greenbluered!!!...

Lusbueb33
Logge dich ein um einen Beitrag zu schreiben.