Verschachtelte Schleifen

Slides:



Advertisements
Ähnliche Präsentationen
Mikrocomputertechnik
Advertisements

Hochschule Fulda – FB ET Sommersemester 2010
Aufgabe: Wie stellt man eine for-Schleife durch eine while-Schleife dar ?
Forschungszentrum caesar
Verzweigung oder bedingte Anweisung Weiter mit PP.
4. Serverbasierte Programmierung: Perl 4.1Grundlagen 4.1.1HTTP-Server und CGI-Schnittstelle 4.1.2Formulare 4.1.3Ein einfaches Perl Programm 4.2Interaktion.
Gliederung des Inhalts
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Programmierkurs für absolute Anfänger Listen und Arrays Caren Brinckmann Sommersemester 2005.
Entwicklung der Programmiersprachen
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
SWITCH - Anweisung.
SWITCH - Anweisung.
ARRAY oder FELD oder VEKTOR
Schleifen-beobachtung
Dynamischer Speicher und Struktur
WHILE - Anweisung.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Polymorphie (Vielgestaltigkeit)
V AdresseWert public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher.
FOR Anweisung.
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
DO...WHILE Anweisung.
Zusammenfassung Vorwoche
Summenformeln (2. Teil) UNIVERSITÄT KASSEL -FACHBEREICH 17 MATHEMATIK-
Wiederholung mit fester Anzahl (Buch S 115)
Schleifen mit der Turtle
Informatik Grundkurse mit Java
Struktogramme IF-ELSE FOR – Schleife
Java programmieren mit JavaKara
INHALT INHALT Inhalt Delphi IDE ObjectPascal Hello World! Delphi IDE
ENVIO 0 Willkommen zur Präsentation Datenexport: Zurück zu dieser Seite Eine Folie zurück Legende: Im Programm Envio: Fahren Sie mit der Maus über ein.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Technische Informatik Reihungen – Felder - Arrays.
Software-Technik „Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige.
2. Zustandsorientiertes Modellieren 2.1 Einfachauswahl
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
Konzept einer Programmiersprache!
Algorithmen und Datenstrukturen SS 2005
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 2 Dr. W. Narzt u. Dr. A. Stritzinger.
Starten der Entwicklungsumgebung (IDE)
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Informatik Datenstruktur Graph 3.2 Repräsentation von Graphen
Hochschule Fulda – FB ET Sommersemester 2014
„ Ein Programm mit Papier und Stift “
Programmiervorkurs WS 2014/15 Schleifen
Programmiervorkurs WS 2014 Referenzdatentypen
programmieren des casio FX-7400GII
Übung 2 - MdMT Methoden der Medizintechnik Übung zur Vorlesung Folge 2 – Basics Vom ersten Befehl zum Plot.
HTML Einführung.
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
1 VeranstaltungThemaTeilnehmerBetreuer AINF-Lehrgang PROGRAMMIEREN Martina GREILER Wolfgang KATOLNIG Peter RENDL Helfried TUISEL Peter ZYCH Heinz STEGBAUER.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Lernlandkarte OOP (ObjektOrientiertes Programmieren)
Informatik als Grundkursfach in der Oberstufe Was ist das Ziel? Problemstellungen modellieren und systematisch mit Softwarewerkzeugen einer Lösung zuführen.
Tabellen DAVID RUŽIĆ. Wie sehen Tabellen Codes aus? So: Hier beginnt die Tabelle (table row) erstellt eine Tabellenreihe (wagrecht) (table head) erstellt.
Felder (Arrays).
Pool Informatik, Sj 11/12 GZG FN W.Seyboldt 1 Pool Informatik 5 GZG FN Sj. 11/12 Kopieren, Daten, Programme.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Verschachtelte Schleifen
Huffman – Kodierbaum zur Textkompression
Durchschnitt (verbal)
Tutorium Programmieren I.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
 Präsentation transkript:

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 6 8 20 9 12 30 16 40 100 1 2 3 4 10

Programmier-Idee:

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

das bedeutet konkret die Ausgabe: i·1, i·2, i·3,..., i·10 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:

for(i=1; i<=10; i++) ausgabe(i·1), ausgabe(i·2), ausgabe(i·3), ..., zeilenumbruch Wie kann man diese Anweisungen mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

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

umgesetzt in C ergibt dies:

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

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

Vorbemerkungen:

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

Beispiel: ausgabe_zeile_6#3#8

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:

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

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

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

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

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

Programmier-Idee

ausgabe_zeile_0 ausgabe_zeile_1 ausgabe_zeile_2 ausgabe_zeile_3 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

das bedeutet konkret die Ausgabe: 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:

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

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

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

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

for(i=0; i<10; i++) for(j=0; j<10; j++) ausgabe_zeile_i#j#0 ... ausgabe_zeile_i#j#9 Wie kann man dies mit welcher Anweisung durch ein Struktogramm auch noch kompakter (kürzer) darstellen ?

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

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

umgesetzt in C ergibt dies:

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

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

i j k durchläuft alle Werte von 0 bis 9 also:

von:

bis: 9 9 9

Wie kann man die Anzahl der Schleifendurchgänge berechnen ?

10*10*10 10*10 10*10 10*10 .. 1 9 10 10 10 10 10 10 .. .. .. ... 9 9 9 ... 9 .. 9 ... 9 .. ... ... 9 ... 9 ... ... 9

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

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

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

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

Antwort: Durch eine 8-fach verschachtelte Schleife !

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 f w Buchst. verschieden f w Ausgabe(s, e, n, d, m, o, r, y)

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

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

umgesetzt in C ergibt dies:

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

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

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

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

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

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

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

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

Wo wird Brute Force noch benutzt ?

Programme, die Passwörter ausspionieren sollen