40
WHILE - Anweisung

WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Embed Size (px)

Citation preview

Page 1: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

WHILE - Anweisung

Page 2: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Aufgabe:

Ausgabe aller ganzen Zahlen von 0 bis 100

auf dem Bildschirm

Page 3: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

SchreibaufwendigeLösung:

Page 4: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

int main(){ printf("0 \n"); printf("1 \n"); printf("2 \n"); // usw. //... printf("100 \n"); return 0;}

Page 5: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

ElegantereLösung:

Page 6: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

int main(){ int i; i=0; // wie geht es // weiter ??

Page 7: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (i<=100){printf("%d\n",i);i=i+1;

}

Bedingung

Bedingung wahr

Bedingung falsch

printf("Das war es"); return 0;}

Die while–Anweisung ist EINE (komplexe) Anweisung, in der

Anweisungen vorkommen.

Page 8: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Programmverlauf

Page 9: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (i<=100){ printf("%d\n",i); i=i+1;}

i = 0;

printf("Das war es"); return 0;}

Page 10: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Dynamische Entwicklung

des Inhalts der Variablen

i

Page 11: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (i<=100){ printf("%d\n",i); i=i+1;}

printf("Das war es");

i 0 1

i = 0;

Page 12: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (i<=100){ printf("%d\n",i); i=i+1;}

printf("Das war es");

i 0 1 2

i = 0;

Page 13: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

.... usw. bis i den Wert 100

hat

Page 14: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (i<=100){ printf("%d\n",i); i=i+1;}

printf("Das war es");

i 0 1 2 ... 100 101

i = 0;

Page 15: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (i<=100){ printf("%d\n",i); i=i+1;}

printf("Das war es");

i 0 1 2 ... 100 101

i = 0;

Page 16: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

C-Syntax fürWHILE -

Anweisung

Page 17: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (Ausdruck){ Anweisung(en);}

bei einer Anweisung sind Klammern nicht nötig.

Trotzdem:Immer Klammern machen.

Blockende

kein Semikolon

Page 18: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Warum Endlosschleife ?i=0;

i = i+1;}

while (i<=3); {

Page 19: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Warum Endlosschleife ?i=0;

i = i+1;}

while (i<=3);

Nach der Bedingung (i<=3) muss eine Anweisung kommen !Diese Anweisung ist die "leere Anweisung" (die nichts macht bzw. bewirkt), die durch den leeren Ausdruck, der mit einem Semikolon

abgeschlossen wird, zu einer Anweisung wird.Diese wird solange ausgeführt, solange i<=3 (in diesem Fall: 0 <=3)

ist, also immer.

{man braucht keine

öffnende { Klammer, da es nur 1 Anweisung gibt

Page 20: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Warum Endlosschleife ?i=0;

i = i+1;}

while (i<=3); {

Diese Schleife ist also eine Endlosschleife.

Page 21: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Das heißt

while (i<=3);

while (i<=3) ;

wird vom Compiler wie folgt interpretiert:

Page 22: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Aufgabe:Flußdiagramm der

WHILE – Anweisung mit einer beliebigen Bedingung

B und beliebigen Anweisung(en) A, also der folgenden Anweisung …

Page 23: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

while (B) { A;}

Page 24: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Bfalsch

wahr

A

Page 25: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

WHILE - Anweisung als

Struktogramm

Page 26: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Anweisung(en)

Bedingung

Page 27: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

i = 0; while (i<=100){ printf("%d\n",i); i=i+1;} printf("Das war es");

AUFGABE:Stellen Sie den Programmteil unten als Struktogramm dar

Page 28: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Ausgabe(i)while(i<=100)

i = i+1

Ausgabe("Das war es")

i = 0

Page 29: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Die WHILE - Anweisung nennt man auch kopfgesteuerte bzw. abweisende Schleife, weil die Bedingung am Kopf der Schleife steht, bzw. die Schleife nicht durchlaufen werden muss (Durchgang wird abgewiesen)

Page 30: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Wie oft wird eine kopfgesteuerte Schleife durchlaufen. Nennen Sie die obere bzw. untere Grenze.

Page 31: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

0 ... Durchgänge

Page 32: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Zum Schluss ein kleiner Ausflug.

Page 33: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Manchmal braucht man Zufallszahlen, um z.B. die Gewinnchancen beim Lotto zu simulieren. Dies ist für Leute von Vorteil, die keine größeren Kenntnisse in Wahrscheinlichkeitstheorie haben.

Page 34: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Dafür stellt die Entwicklungsumgebung die Funktionen srand(...) und rand() zur Verfügung.

Page 35: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

srand(...) bewirkt, dass bei jedem Programmstart ein anderer Satz von Zufallszahlen gewählt wird. Würde dies nicht gemacht, würde jeder Programmlauf mit dem gleichen Satz von Zufallszahlen arbeiten.

Page 36: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

srand(...) soll als erste Anweisung im Programm genau einmal verwendet werden.rand() liefert eine Zufallszahl zwischen 0 und einer (großen) maximalen Zahl (siehe Hilfe)

Page 37: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

#include "stdafx.h"#include <stdlib.h>#include <stdio.h>#include <time.h>

int main(){ int i = 0; int zufallszahl;

srand((unsigned)time(NULL)); while(i<100){ i=i+1; zufallszahl=rand(); printf("%d\n",zufallszahl); } return 0;}

genau ein Mal am Programmanfang

verwenden

erzeugt eine Zufallszahl

Page 38: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

Ist die folgende Schleife eine Endlosschleife?

Page 39: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

#include "stdafx.h"#include <stdio.h>

int main(){ int i; i = 0; while (i>=0){ i=i+1; } printf("i=%d ", i); return 0;}

Beachten Sie dazu, dass i eine integer-Variable ist und 4 Byte Speicher benötigt.Der Zahlenbereich geht von:-2147483648 bis2147483647

Page 40: WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm

#include "stdafx.h"#include <stdio.h>

int main(){ int i; i = 0; while (i>=0){ i=i+1; } printf("i=%d ", i); return 0;}

i wird also bis 2147483647 hochgezählt, das ist als Dualzahl:

01111111 11111111 11111111 11111111

dies um 1 hochgezählt ergibt:

10000000 00000000 00000000 00000000

-2147483648 ... 2147483647

Das ist als Dezimalzahl:

-2147483648 (die kleinste negative Zahl)

was wird also auf dem Bildschirm ausgegeben?

-2147483648also keine Endlosschleife !!