Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt."—  Präsentation transkript:

1 Verschachtelte Schleifen

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

3 * Die oberste Zeile wird jeweils multipliziert mit:

4 Programmier-Idee:

5 ausgabe_zeile_ 1 1·1, 1·2, 1·3,..., 1·10 das bedeutet konkret die Ausgabe: ausgabe_zeile_ 2 2·1, 2·2, 2·3,..., 2·10 das bedeutet konkret die Ausgabe: ausgabe_zeile_ 10 10·1, 10·2, 10·3,..., 10·10 das bedeutet konkret die Ausgabe:... Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

6 Oder anders dargestellt: for(i=1; i<=10; i++) ausgabe_zeile_ i das bedeutet konkret die Ausgabe: i·1, i·2, i·3,..., i·10 zeilenumbruch

7 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 ?

8 for(i=1; i<=10; i++) zeilenumbruch for(j=1; j<=10; j++) ausgabe(i*j)

9 umgesetzt in C ergibt dies:

10 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"); }

11 0#0#0 0#0#1 0#0#2... 9#9#7 9#9#8 9#9#9 Aufgabe: Erstellen Sie ein Programm, das die Zahlen von 0 bis 999 in der Form (siehe rechts) auf dem Bildschirm ausgibt:

12 Vorbemerkungen:

13 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

14 Beispiel: ausgabe_zeile_6#3#8 6#3#8

15 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:

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

17 Beispiel: ausgabe_zeile_5#7 5#7#0 5#7#1 5#7#2... 5#7#8 5#7#9

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

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

20 Beispiel: ausgabe_zeile_3 3#0#0 3#0#1 3#0#2... 3#9#8 3#9#9

21 Programmier-Idee

22 ausgabe_zeile_0 Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ? ausgabe_zeile_1 ausgabe_zeile_2 ausgabe_zeile_3 ausgabe_zeile_4 ausgabe_zeile_5 ausgabe_zeile_6 ausgabe_zeile_7 ausgabe_zeile_8 ausgabe_zeile_9

23 for(i=0; i<10; i++) ausgabe_zeile_ i oder systematischer dargestellt: das bedeutet konkret die Ausgabe: i#0#0 i#0#1 i#0#2... i#9#8 i#9#9

24 for(i=0; i<10; i++) i#1#0 i#1#1 i#1#2... i#1#7 i#1#8 i#1#9 i#2#0 i#2#1 i#2#2... i#2#7 i#2#8 i#2#9... i#8#0 i#8#1 i#8#2... i#8#7 i#8#8 i#8#9 i#9#0 i#9#1 i#9#2... i#9#7 i#9#8 i#9#9 i#0#0 i#0#1 i#0#2... i#0#7 i#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)

25 for(i=0; i<10; i++) ausgabe_zeile_i#0 ausgabe_zeile_i#1 ausgabe_zeile_i#2 ausgabe_zeile_i#9 ausgabe_zeile_i#8...

26 for(i=0; i<10; i++) for(j=0; j<10; j++) ausgabe_zeile_i#j Oder anders dargestellt:

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

28 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 ?

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

30 for(i=0; i<10; i++) for(j=0; j<10; j++) ausgabe_zeile_i#j#k for(k=0; k<10; k++)

31 umgesetzt in C ergibt dies:

32 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); }

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

34 durchläuft alle Werte von 0 bis 9 jik also:

35 000 von:

36 999 bis:

37 Wie kann man die Anzahl der Schleifendurchgänge berechnen ?

38 * * *10* *

39 Aufgabe (Zahlenrätsel): gleiche Buchstaben - gleiche Ziffern, verschiedene Buchstaben - verschiedene Ziffern send + more money

40 send + more money Wie versuchen durch "Probieren" eine Lösung zu bekommen Ist diese Lösung korrekt? Nein, denn

41 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

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

43 Antwort: Durch eine 8-fach verschachtelte Schleife !

44 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*1 erg2=m*10000+o*1000+n*100+e*10+y*1 erg1==erg2 f w Buchst. verschieden Ausgabe(s, e, n, d, m, o, r, y) f w was heißt das genau ?

45 Die Werte der Variablen: s, e, n, d, m, o, r, y sind alle verschieden. Dies bedeutet konkret:

46 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

47 umgesetzt in C ergibt dies:

48 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* o* 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

49 Frage (Rechenzeit): Wieviel Zahlenkombinationen der Variablen s, e, n, d, m, o, r, y gibt es ?

50 s durchläuft jeweils alle Werte von 0 bis Anzahl der Zahlenkombinationen ist also (siehe vorher): endmory

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

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

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

54 Also kann es maximal nur verschiedene Möglichkeiten geben.

55 Die Methode sämtliche Möglichkeiten zu testen, nennt man auch. Brute Force

56 Wo wird Brute Force noch benutzt ?

57 Programme, die Passwörter ausspionieren sollen


Herunterladen ppt "Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt."

Ähnliche Präsentationen


Google-Anzeigen