CUBE.CODES: Schleifen mit for: Unterschied zwischen den Versionen

Aus MINT.lentner.net
Zur Navigation springen Zur Suche springen
Zeile 56: Zeile 56:
 
Dass die Folge dreier Sprachelemente in '''for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i);''' (Programm 4) so unproblematisch funktioniert, verwundert Euch vielleicht und ist auch nicht selbstverständlich. Vergleiche dazu die vier Programme:
 
Dass die Folge dreier Sprachelemente in '''for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i);''' (Programm 4) so unproblematisch funktioniert, verwundert Euch vielleicht und ist auch nicht selbstverständlich. Vergleiche dazu die vier Programme:
  
 +
Programm5a:
 
  for(i=1; i<=10; ++i) y=i*2; UI.log(y);
 
  for(i=1; i<=10; ++i) y=i*2; UI.log(y);
  
 
und ...
 
und ...
  
 +
Programm5b:
 
  for(i=1; i<=10; ++i) {y=i*2; UI.log(y);}
 
  for(i=1; i<=10; ++i) {y=i*2; UI.log(y);}
  
 
sowie
 
sowie
  
 +
Programm5c:
 
  for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i);
 
  for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i);
  
 
und ...
 
und ...
  
 +
Programm5d:
 
  for(i=1; i<=2000; ++i) {if(2000%i==0) UI.log(i);}
 
  for(i=1; i<=2000; ++i) {if(2000%i==0) UI.log(i);}

Version vom 21. Januar 2022, 09:08 Uhr

CUBE.CODES blank

Programm 1: für(... ) tue ...

 for(i=1; i<1000; i=i+1) UI.log(i);

Das Sprachkonstrukt for(<Anfangsbefehl>; <Wiederholungsbedingung>; <Veränderung>) vor dem Befehl UI.log(i) steuert ähnlich dem while-Konstrukt, wie der nachfolgende Befehl (hier: UI.log(i)) wiederholt wird. Man kann aber (anders als bei while) alle typischen Wünsche einer einzigen Zeile unterbringen:

  1. Der <Anfangsbefehl> wird ausgeführt, bevor alles losgeht. Dabei setzt man meistens die Zählervariable auf einen gewünschten Anfangszustand. Man kann aber auch beliebige andere Befehle anfangs ausführen lassen.
  2. Die <Wiederholungsbedingung> wird immer überprüft, bevor der nachfolgende Befehl ausgeführt wird. Trifft die Bedingung zu, wird er (nochmal) ausgeführt, trifft er nicht (mehr) zu, wird der nachfolgende Befehl nicht mehr ausgeführt, also die Serie unterbrochen.
  3. Die <Veränderung> ist ein Befehl, der nach jeder Durchführung ausgeführt wird. Wir benutzen ihn meist, um die Zählervariable zu verändern. Würden wir die Situation nicht verändern, wäre die Wiederholungsbedingung ja immer richtig und wir hätten eine Endlosschleife.

Programm 2: Teste die folgenden Schleifen

for(i=0; i<100; i=i+2) UI.log(i);
for(i=1; i<100; i=i+2) UI.log(i);
for(i=1; i<1000; i=i*2) UI.log(i);
for(i=100; i>-1; i=i-1) UI.log(i);
for(i=1; i<10; i=i+1) UI.log("1/"+i);
for(i=1; i>0; i=i/2) UI.log(i);

Programm 3: Man kann damit in einer Zeile auch einfach Wertetabellen ausgeben, die beliebig skaliert sind

for(i=0; i<100; i=i+1) UI.log(i+" - "+i*i);
for(i=-10; i<=10; i=i+1) UI.log(i+" | "+i*i);
for(i=0; i<1000; ++i) UI.log(i+" | "+(3*i+11));
for(i=-10; i<=10; i=i+0.5) UI.log(i+" | "+(2*i*i-i+2.5));

Programm 4: Teiler ermitteln

Auch unser Teilerprogramm können wir jetzt in einer einzigen Zeile verwirklichen

for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i);

... führt zur Ausgabe:

[07:57:54] Program starting ...
[07:58:00] Program running ...
1
2
4
5
8
10
16
20
25
40
50
80
100
125
200
250
400
500
1000
2000
[07:58:00] Program finished successfully

Programm 5: Wir wiederholen mehrere Befehle

Dass die Folge dreier Sprachelemente in for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i); (Programm 4) so unproblematisch funktioniert, verwundert Euch vielleicht und ist auch nicht selbstverständlich. Vergleiche dazu die vier Programme:

Programm5a:

for(i=1; i<=10; ++i) y=i*2; UI.log(y);

und ...

Programm5b:

for(i=1; i<=10; ++i) {y=i*2; UI.log(y);}

sowie

Programm5c:

for(i=1; i<=2000; ++i) if(2000%i==0) UI.log(i);

und ...

Programm5d:

for(i=1; i<=2000; ++i) {if(2000%i==0) UI.log(i);}