Pseudocode einer For-Schleife
-
Hi,
ich hab hier grad mal eine banale Frage.
Konkret geht es um die Berechnung einer mathematischen Formel
und darin kommt folgendes Codefragment vor:for k=1 to n do { ... }
Frage: Wenn in diesem Fall n=1 gilt, wird die Schleife dann ausgeführt oder nicht? Es handelt sich um keine spezielle Programmiersprache, sondern
Pseudocode. Mir ist nicht klar inwiefern die Bedingung exakt logisch umgesetzt sein soll. Soll es etwa k<=n oder k<n heißen?Unter http://de.wikipedia.org/wiki/For-Schleife hab ich nochmal nachgeschaut- und die For-Schleife sollte ausgeführt werden, wenn der boolsche Ausdruck der Bedingung nicht false ist. Bleibt aber die Frage, wie ist die logische Bedingung exakt definiert? Ich hab ja oben 2 Varianten. Welche davon ist richtig?
-
Normalerweise ist mit "for k=1 to n" das selbe gemeint wie mit "for(k=0; k<=n; ++k)"
Mathematiker denken sonst auch oft in Summen- oder Produktzeichen. Da ist der "obere Index" auch immer inklusive.
-
Es gibt keinen standardisierten Pseudocode. Aber ich tippe mal, dass dieser von Pascal oder Basic inspiriert wurde, eher noch Pascal. Dort schreibt man auch for i = 1 to n do ..., nur ohne geschweifte Klammern. Und dort gehört die Obergrenze zum Iterationsbereich dazu.
-
Also in C++ würde der Schleifenrumpf genau einmal ausgeführt. Wenn Du die geschweiften Klammern durch "begin" und "end" ersetzt, hast Du Delphi.
-
Mups schrieb:
Normalerweise ist mit "for k=1 to n" das selbe gemeint wie mit "for(k=0; k<=n; ++k)"
Mathematiker denken sonst auch oft in Summen- oder Produktzeichen. Da ist der "obere Index" auch immer inklusive.
Hmm in PHP und C++ würde das dann 2x ausgeführt werden.
-
Konkret geht es um diesen Algo (Seite 8/11 PDF bzw. Seite 180 im Buch)
http://www.cs.umbc.edu/~lomonaco/s08/441/handouts/GarnerAlg.pdf
-
Mups schrieb:
Normalerweise ist mit "for k=1 to n" das selbe gemeint wie mit "for(k=0; k<=n; ++k)"
Eher das hier: "for(k=1; k<=n; ++k)".
-
Nups schrieb:
Mups schrieb:
Normalerweise ist mit "for k=1 to n" das selbe gemeint wie mit "for(k=0; k<=n; ++k)"
Eher das hier: "for(k=1; k<=n; ++k)".
Ja, ging auch von 1x ausführen aus (Bekannter meinte 0x).
Jedenfalls wirft der Algo dann ein Problem in Schritt 2 auf,
wenn es "1x ausführen" heißt.Schritt 2:
Da heißt es dannfor k from 1 to n do { ... //unwichtig for j from k-2 to 0 by -1 do //Problem, k=1 -> k-2 = -1. Von -1 nach 0 in -1er Schritten? ... }
-
Topic schrieb:
for k from 1 to n do { ... //unwichtig for j from k-2 to 0 by -1 do //Problem, k=1 -> k-2 = -1. Von -1 nach 0 in -1er Schritten? ... }
Da wird die Schleife dann halt 0-mal durchlaufen.
-
Bashar schrieb:
Topic schrieb:
for k from 1 to n do { ... //unwichtig for j from k-2 to 0 by -1 do //Problem, k=1 -> k-2 = -1. Von -1 nach 0 in -1er Schritten? ... }
Da wird die Schleife dann halt 0-mal durchlaufen.
Hmmm nicht unendlich oft?
from -1 to 0 by -1 do
Es startet mit -1, 0 ist nicht erreicht,
zieht -1 ab, landet bei -2 usw...
-
Bei negativer Schrittweite wird die Schleifenbedingung umgedreht.