1 / 57

Verschachtelte Schleifen

Verschachtelte Schleifen. Aufgabe: Schreiben Sie ein Programm, das die folgende, hellblau gekennzeichnete Multiplikationstabelle erstellt. Die oberste Zeile wird jeweils multipliziert mit:. 1. 2. 3. 4. 10. Programmier-Idee:. ausgabe_zeile_ 1. das bedeutet konkret die Ausgabe:.

Download Presentation

Verschachtelte Schleifen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Verschachtelte Schleifen

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

  3. Die oberste Zeile wird jeweils multipliziert mit: 1 2 3 4 10

  4. Programmier-Idee:

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

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

  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++) for(j=1; j<=10; j++) ausgabe(i*j) zeilenumbruch

  9. umgesetzt in Java ergibt dies:

  10. int main(){ int i,j, erg; for(i=1;i<=10;i++){ for(j=1;j<=10;j++){ erg=i*j; print(erg); } println(); } }

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

  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#jist 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#0i#j#1... i#j#8i#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_iist Abkürzung für die Ausgabe aller Zeilen, die an der 1. Spalte den Wert i haben, also:

  19. i#0#0i#0#1... i#9#8i#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 das bedeutet konkret die Ausgabe: i#0#0 i#0#1 i#0#2 ... i#9#8 i#9#9 oder systematischer dargestellt:

  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#0#0 i#0#1 i#0#2 ... i#0#7 i#0#8 i#0#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 ... 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#8 ausgabe_zeile_i#9

  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#1 ... ausgabe_zeile_i#j#9 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++) for(k=0; k<10; k++) ausgabe_zeile_i#j#k

  31. umgesetzt in Java 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++){ println(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 durchläuft alle Werte von 0 bis 9 j i k durchläuft alle Werte von 0 bis 9 also:

  35. von: 0 0 0

  36. bis: 9 9 9

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

  38. 10*10*10 10*10 10*10 10*10 .. 0 1 9 10 10 10 10 10 10 .. .. .. 0 0 ... 9 9 0 9 0 ... 9 .. 0 ... 9 .. 0 0 9 9 ... ... 0 ... 9 ... 0 ... 9

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

  40. Wie versuchen durch "Probieren" eine Lösung zu bekommen ... send+ more------ money Ist diese Lösung korrekt? 1 2 3 4 Nein, denn ... 5 6 7 2 1234 + 5672  56328 5 6 3 2 8

  41. Hinweis zur Lösung:Systematisch alle möglichen Zahlenkombinationen von s, e, n, d, m, o, r, yausprobieren 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++) was heißt das genau ? 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 w f Buchst. verschieden w f Ausgabe(s, e, n, d, m, o, r, y)

  45. Die Werte der Variablen:s, e, n, d, m, o, r, ysind 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 Java 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*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){ println(" "+s+e+n+d); println(" "+m+o+r+e); println(m+o+n+e+y); schliessende Klammern mussten aus Platzgründen leider weggelassen werden

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

  50. durchläuft jeweils alle Werte von 0 bis 9 s e n d m o r y Anzahl der Zahlenkombinationen ist also (siehe vorher): 108

More Related