Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau...

57
Verschachte lte Schleifen

Transcript of Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau...

Page 1: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Verschachtelte Schleifen

Page 2: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Aufgabe:Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Page 3: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

* 1 2 3 4 ... 10

1 1 2 3 4 ... 10

2 2 4 6 8 ... 20

3 3 6 9 12 ... 30

4 4 8 12 16 ... 40

... ... ... ... ... ... ...

10 10 20 30 40 ... 100

Die oberste Zeile wird jeweils multipliziert mit:

1

2

3

4

10

Page 4: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Programmier-Idee:

Page 5: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

ausgabe_zeile_ 1

1·1, 1·2, 1·3,..., 1·10das bedeutet konkret die Ausgabe:

ausgabe_zeile_ 2

2·1, 2·2, 2·3,..., 2·10das bedeutet konkret die Ausgabe:

ausgabe_zeile_ 10

10·1, 10·2, 10·3,..., 10·10das bedeutet konkret die Ausgabe:

... Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

Page 6: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Oder anders dargestellt:

for(i=1; i<=10; i++)

ausgabe_zeile_ idas bedeutet konkret dieAusgabe:i·1, i·2, i·3,..., i·10

zeilenumbruch

Page 7: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=1; i<=10; i++)

ausgabe(i·1), ausgabe(i·2), ausgabe(i·3),..., ausgabe(i·10)

zeilenumbruch

Wie kann man diese Anweisungen mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

Page 8: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=1; i<=10; i++)

zeilenumbruch

for(j=1; j<=10; j++)

ausgabe(i*j)

Page 9: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

umgesetzt in C ergibt dies:

Page 10: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

int main(){ int i,j, erg; for(i=1;i<=10;i++){ for(j=1;j<=10;j++){ erg=i*j; printf("%d ",erg); } printf("\n"); }}

Page 11: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

0#0#00#0#10#0#2...9#9#7

9#9#89#9#9

Aufgabe:Erstellen Sie ein Programm, das die Zahlen von 0 bis 999 in der Form (siehe rechts) auf dem Bildschirm ausgibt:

Page 12: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Vorbemerkungen:

Page 13: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

ausgabe_zeile_i#j#k ist Abkürzung für die Ausgabe der Zeile, die an der 1. Spalte den Wert i, an der 2. Spalte den Wert j und an der 3. Spalte den Wert k hat, also: i#j#k

Page 14: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Beispiel:ausgabe_zeile_6#3#86#3#8

Page 15: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

ausgabe_zeile_i#j ist Abkürzung für die Ausgabe aller Zeilen, die an der 1. Spalte den Wert i und der 2. Spalte den Wert j haben, also:

Page 16: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

i#j#0i#j#1... i#j#8i#j#9

Page 17: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Beispiel:ausgabe_zeile_5#7

5#7#05#7#15#7#2...5#7#85#7#9

Page 18: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

ausgabe_zeile_i ist Abkürzung für die Ausgabe aller Zeilen, die an der 1. Spalte den Wert i haben, also:

Page 19: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

i#0#0i#0#1... i#9#8i#9#9

Page 20: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Beispiel:ausgabe_zeile_3

3#0#03#0#13#0#2...3#9#83#9#9

Page 21: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Programmier-Idee

Page 22: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

ausgabe_zeile_0 Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

ausgabe_zeile_1ausgabe_zeile_2

ausgabe_zeile_3

ausgabe_zeile_4

ausgabe_zeile_5

ausgabe_zeile_6

ausgabe_zeile_7

ausgabe_zeile_8ausgabe_zeile_9

Page 23: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

ausgabe_zeile_ i

oder systematischer dargestellt:

das bedeutet konkret dieAusgabe:i#0#0i#0#1i#0#2...

i#9#8i#9#9

Page 24: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

i#1#0 i#1#1 i#1#2 ... i#1#7i#1#8 i#1#9

i#2#0 i#2#1 i#2#2... i#2#7i#2#8 i#2#9

...

i#8#0 i#8#1 i#8#2... i#8#7i#8#8 i#8#9

i#9#0 i#9#1 i#9#2... i#9#7i#9#8 i#9#9

i#0#0 i#0#1 i#0#2... i#0#7i#0#8 i#0#9

Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

Jeder Block kommt jeweils untereinander (aus Platzgründen hier nebeneinander dargestellt)

Page 25: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

ausgabe_zeile_i#0ausgabe_zeile_i#1ausgabe_zeile_i#2

ausgabe_zeile_i#9ausgabe_zeile_i#8...

Page 26: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

for(j=0; j<10; j++)

ausgabe_zeile_i#j

Oder anders dargestellt:

Page 27: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

for(j=0; j<10; j++)

Page 28: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

for(j=0; j<10; j++)

ausgabe_zeile_i#j#0

...ausgabe_zeile_i#j#9

ausgabe_zeile_i#j#1

Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

Page 29: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

for(j=0; j<10; j++)

Page 30: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(i=0; i<10; i++)

for(j=0; j<10; j++)

ausgabe_zeile_i#j#k

for(k=0; k<10; k++)

Page 31: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

umgesetzt in C ergibt dies:

Page 32: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

int main(){ int i,j,k; for(i=0;i<10;i++){ for(j=0;j<10;j++){ for(k=0;k<10;k++){ printf("%d#%d# %d\n",i,j,k); } } }}

Page 33: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Wichtige Bemerkung:In der innersten Schleife durchläuft die Zahlenkombination i, j, k alle möglichen Werte, also

Page 34: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

durchläuft alle Werte von 0 bis 9

ji k

durchläuft alle Werte von 0 bis 9

durchläuft alle Werte von 0 bis 9

also:

Page 35: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

00 0

von:

Page 36: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

99 9

bis:

Page 37: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Wie kann man die Anzahl der Schleifendurchgänge berechnen ?

Page 38: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

0

0

0 9...

10

10*10

9

0 9.....

..

9

0

0 9...

10

10*10

9

0 9......

...

..

1010

10*10*10

..

1

0

0 9...

10

10*10

9

0 9.....

..10

Page 39: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Aufgabe (Zahlenrätsel):gleiche Buchstaben - gleiche Ziffern, verschiedene Buchstaben - verschiedene Ziffern

send+ more------ money

Page 40: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

send+ more------ money

Wie versuchen durch "Probieren" eine Lösung zu bekommen ...

1 2 3 4

5 6 7 2

5 6 3 2 8

Ist diese Lösung korrekt?

Nein, denn ...

1234 + 5672 56328

Page 41: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Hinweis zur Lösung:Systematisch alle möglichen Zahlenkombinationen von s, e, n, d, m, o, r, y ausprobieren und jeweils nachprüfen, ob gilt: send + more = money

Page 42: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Frage:Durch welches Konstrukt bekommt man systematisch alle möglichen Zahlenkombinationen von s, e, n, d, m, o, r, y

Page 43: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Antwort:Durch eine 8-fach verschachtelte Schleife !

Page 44: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

for(s=0; s<10; s++)for(e=0; e<10; e++)for(n=0; n<10; n++)for(d=0; d<10; d++)for(m=0; m<10; m++)for(o=0; o<10; o++)for(r=0; r<10; r++)for(y=0; y<10; y++)erg1=s*1000+e*100+n*10+d*1 + m*1000+o*100+ r*10+e*1erg2=m*10000+o*1000+n*100+e*10+y*1

erg1==erg2f wBuchst. verschieden

Ausgabe(s, e, n, d, m, o, r, y)f w

was heißt das genau ?

Page 45: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Die Werte der Variablen: s, e, n, d, m, o, r, y

sind alle verschieden. Dies bedeutet konkret:

Page 46: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

se sn sd sm so sr sy en ed em eo er ey nd nm no nr ny dm do dr dy mo mr my or oy ry

Page 47: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

umgesetzt in C ergibt dies:

Page 48: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

int main(){ int s,e,n,d,m,o,r,y; int erg1, erg2, erg3; for (s=0; s<=9; s++){ for (e=0; e<=9; e++){ for (n=0; n<=9; n++){ for (d=0; d<=9; d++){ for (m=0; m<=9; m++){ for (o=0; o<=9; o++){ for (r=0; r<=9; r++){ for (y=0; y<=9; y++){ erg1=s*1000+e*100+n*10+d*1+m*1000+o*100+r*10+e*1; erg2 = m*10000 + o*1000 + n*100 + e*10 + y*1; if(erg1 == erg2){ erg3=s!=e && s!=n && s!=d && s!=m && s!=o && s!=r && s!=y && e!=n && e!=d && e!=m && e!=o && e!=r && e!=y && n!=d && n!=m && n!=o && n!=r && n!=y && d!=m && d!=o && d!=r && d!=y && m!=o && m!=r && m!=y && o!=r && o!=y && r!=y; if(erg3!=0){ printf(" %d %d %d %d\n",s,e,n,d); printf(" %d %d %d %d\n",m,o,r,e); printf("%d %d %d %d %d\n\n",m,o,n,e,y);

schliessende Klammern mussten aus Platzgründen leider weggelassen werden

Page 49: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Frage (Rechenzeit):Wieviel Zahlenkombinationen der Variablen

s, e, n, d, m, o, r, y

gibt es ?

Page 50: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

s

durchläuft jeweils alle Werte von 0 bis 9

108

Anzahl der Zahlenkombinationen ist also (siehe vorher):

e n d m o r y

Page 51: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Frage:Wieviel Möglichkeiten kann es maximal bei dieser Art von Zahlenrätseln maximal geben?

Page 52: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Wieviel verschieden Buchstaben kann es in so einem Zahlenrätsel maximal geben?

Page 53: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Nur 10, weil es ja nur 10 verschieden Ziffern geben kann.

Page 54: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Also kann es maximal nur

1010 verschiedene Möglichkeiten geben.

Page 55: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Die Methode sämtliche Möglichkeiten zu testen,

nennt man auch. Brute Force

Page 56: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Wo wird Brute Force noch benutzt ?

Page 57: Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt.

Programme, die Passwörter ausspionieren sollen