![]() |
For-do Schleife mit Sprung
Ich programmiere gerade einen Primzahlgenerator. Der soll von einer Zahl, bis zu einer Zahl(die der Anwender eingibt) prüfen.
Da braucht man ja eigentlich nur alle ungeraden Zahlen zu prüfen, denn alle geraden Zahlen kann man ja durch 2 teilen. Ich habe die Suchfunktion schon fertig programmiert, allerdings mit einer For-Do-Anweisung. Und die geht bei mir immer nur 1 hoch. Kann man da noch irgendwas dranhängen, wie z.B.:
Delphi-Quellcode:
Sollte es keine For-DoAnweisung mit einem solchen(oder ähnlichem) Feature geben, was könntet ihr mit noch empfehlen.
for I := 3 to ZAHL Step 2 do begin
... end; Es kommt halt auch auf die Geschwindigkeit an, sonst würde ich alle Zahlen nehmen, und vorher mit "if Trunc(Zahl/2)*2 = Zahl then GERADE ZAHL" auf gerade Zahlen überprüfen lassen, aber da dauerte es (wenn auch nur wenige Sekunden, aber das summiert sich ja) länger. Danke schonmal! :mrgreen: |
Re: For-do Schleife mit Sprung
Ein Hallöle von
![]()
Code:
Da ja auch nur bis Zahl / 2 geprüft werden braucht:
[b]For[/b] I := 1 [b]to[/b] (ZAHL - 1) [b]div[/b] 2 [b]do Begin[/b]
[color=red]TestZahl[/color] := (I * 2) + 1; ... [b]End[/b];
Code:
http://www.delphipraxis.net/images/common/divider.jpg
[b]For[/b] I := 1 [b]to[/b] ZAHL [b]div[/b] 4 [b]do Begin[/b]
[color=red]TestZahl[/color] := (I * 2) + 1; ... [b]End[/b]; ![]() ![]() ![]() |
Re: For-do Schleife mit Sprung
du könntest in die prozedur doch "inc(I)" einfügen
|
Re: For-do Schleife mit Sprung
Meines wissens nach darf man die Schleifenvariable nicht innerhalb der Schleife verändern :mrgreen:
|
Re: For-do Schleife mit Sprung
und wieso?
|
Re: For-do Schleife mit Sprung
Stell dir vor was passiert wenn du i größer als die Bedingung zum Abbruch der Schleife änderst ;)
Außerdem meckert der Komplizierer dann :P |
Re: For-do Schleife mit Sprung
Entweder du nimmst ne while oder eine repeat Schleife, das die einzige möglichkeit in meinen augen :cyclops:
|
Re: For-do Schleife mit Sprung
Ist das nicht egal, welche Schleife?
Alle 3 bewirken, meiner Meinung nach, das gleiche:
Delphi-Quellcode:
Naja, gleich ist es nicht, aber es müsste ja das Ähnliche bewirken, oder?
for i:=1 to Zahl do
begin ... end; while i<Zahl do begin ... end; repeat ... until i=Zahl |
Re: For-do Schleife mit Sprung
Es ging ja darum, dass die Laufvariable geändert werden soll. Das ist bei For-Schleifen nun mal nicht möglich. Naja Repeat und While ist eigentlich das gleiche - eins hat halt ne Eintrittsbedingung und das andre ne Austrittsbedingung. Musste halt immer nehmen wie's am besten passt grad (auch von der Logik her). Der Quellcode sollte ja möglichst selbstkommentierend sein.
MfG Niels |
Re: For-do Schleife mit Sprung
Bei while und repeat bist du selbst dafür verantwortlich dass die Abbruchbedingung greift, sprich hie rmuss man in diesem Fall selber i inkrementieren, bei der for-Schleife wird vorher die Anzahl der Schleifendurchläufe ermittelt und dann die Schleife auch nur so und so viel mal druchlaufen.
Das man den Schleifen in einer for-Schleife nicht ändern kann (so ohne weiteres, mit einem Trick geht es) ist Compiler bedingt. Mit C/C++ Compiler kann man das machen. Nur wenn der Compiler weiß, wie oft eine Schleife durchlaufen wird, kann er besser optimieren. Desweitern sehe ich keinen Sinn darin in einer for-Schleife den Schleifenzähler ändern zu wollen, sie wurde extra für Schleifen komzepiert bei denen man weiß, wie oft sie durchlaufen wird. Die Lösung wäre also hier eine while-Schleife. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz