Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi For-do Schleife mit Sprung (https://www.delphipraxis.net/13032-do-schleife-mit-sprung.html)

F.W. 9. Dez 2003 17:48


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:
 for I := 3 to ZAHL Step 2 do begin
...
 end;
Sollte es keine For-DoAnweisung mit einem solchen(oder ähnlichem) Feature geben, was könntet ihr mit noch empfehlen.

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:

himitsu 9. Dez 2003 17:55

Re: For-do Schleife mit Sprung
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Code:
[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];
Da ja auch nur bis Zahl / 2 geprüft werden braucht:
Code:
[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];
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Pseudemys Nelsoni 9. Dez 2003 17:56

Re: For-do Schleife mit Sprung
 
du könntest in die prozedur doch "inc(I)" einfügen

phlux 9. Dez 2003 17:57

Re: For-do Schleife mit Sprung
 
Meines wissens nach darf man die Schleifenvariable nicht innerhalb der Schleife verändern :mrgreen:

Pseudemys Nelsoni 9. Dez 2003 18:00

Re: For-do Schleife mit Sprung
 
und wieso?

phlux 9. Dez 2003 18:01

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

phlux 9. Dez 2003 18:03

Re: For-do Schleife mit Sprung
 
Entweder du nimmst ne while oder eine repeat Schleife, das die einzige möglichkeit in meinen augen :cyclops:

Matze 9. Dez 2003 18:12

Re: For-do Schleife mit Sprung
 
Ist das nicht egal, welche Schleife?

Alle 3 bewirken, meiner Meinung nach, das gleiche:
Delphi-Quellcode:
for i:=1 to Zahl do
begin
...
end;

while i<Zahl do
begin
...
end;

repeat
...
until i=Zahl
Naja, gleich ist es nicht, aber es müsste ja das Ähnliche bewirken, oder?

Niels 9. Dez 2003 18:17

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

Luckie 9. Dez 2003 18:20

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 03:29 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz