TAG 2: ANIMTATIONEN UND SCHLEIFEN Brückenkurs Programmierung WiSe 15/16 Toni Barthel
Organisatorisches I Themen: Tag 1: Variablen Operatoren, Verzweigungen Tag 2: Animationen, Schleifen Tag 3: Events, Arrays Tag 4: Funktionen, Objektorientierung Tag 5: Ausblick auf Java und C Heute: Wiederholung Tag 1 Hinweise zur Reference, Cheat Sheet Große Übung zu Animationen
Organisatorisches II Tagesablauf: Zwei Vorlesungsblöcke (ca. 90min), 15min Kaffeepause Neuankömmlinge melden sich bitte in der Pause bei mir Kursunterlagen Informationen: Am Mittwoch tragen bitte alle ROT ;-) http://bit.ly/1kdjymy
Hinweis auf Reference Offizielle Referenz Übersetzte Referenz Cheat Sheet http://bit.ly/1vjo2ot http://bit.ly/1lkz9ke http://bit.ly/1jr5a6n
TAG 2.0: WIEDERHOLUNG Brückenkurs Programmierung WiSe 15/16 Toni Barthel
WDH: Theroie Was verstehen Sie unter Programmierung? Programmieren ist das Schreiben von Computerprogrammen. Ein Computerprogramm ist eine in einer Programmiersprache verfasste Anweisungsabfolge, die ein bestimmtes Problem löst. Wie werden Programme in höheren Pro.-sprachen ausführbar gemacht? Ebenfalls mit einem Programm. Dieses Programm nennt man Compiler. Nenne Sie 3 Programmiersprachen die Sie seit gestern beim Namen kennen. Processing (sozusagen Java), C, Ruby
WDH: Processing Was ist Processing, wofür wird es eingesetzt? Processing ist eine objektorientierte, stark typisierte Programmiersprache, sozusagen stark vereinfachten Version der Programmiersprache Java. Es ist jedoch möglich auf Java in Gänze zurück zugreifen. Processing ist spezialisiert auf die Einsatzbereiche Grafik, Simulation und Animation. Welche Funktion benötigen Sie um ein Viereck zu zeichnen? //rect(x,y,w,h) rect(225,300,200,100); Welche Funktion benötigen Sie um eine Linie zu zeichnen? //line(x1,y1,x2,y2) line(50,50,200,50);
WDH: Sprachunabhängig Nennen Sie die zwei unterschiedliche Hauptgruppen von Datentypen? Einfache (primitive) Datentypen und komplexe Datentypen. Unterteilen Sie primitive Datentypen in Untergruppen. Nennen Sie jeweils einen Datentyp als Beispiel. Integer (int, byte,short,int,long), Gleitkomma (float, double), Zeichen (char), Boolscher (boolean) Wie viele primitive Datentypen haben Sie kennengelernt? 8 (int, float, boolean, char, double, byte, short, long) Wie bilden Sie eine Zeichenkette ( Hallo Welt ) in einem Datentypen ab? String x = Hallo Welt ;
WDH: Verzweigungen I Formulieren Sie folgende die Verzweigung. b>c!= b<a ja wahr nein falsch if(b>c!= b<c) { Antwort //Anweisungsungsblock Anweisungsblock
WDH: Verzweigungen II Formulieren Sie folgende die Verzweigung. ja wahr x<2 nein falsch if(x<2) { Antwort //Anweisungsungsblock Anweisungsblock Anweisungsblock else { //Anweisungsblock
Sprechen Sie PROCESSING Problemstellung Stellen Sie rechts abgebildete Animation mit den ihnen bekannten Funktionen dar. black white 0 < > 255 void setup(){ size(450,600); Antwort void draw(){ 0 255 0 fill(mousex,mousey,mousex); ellipse(mousex,mousey,100,100); 0
TAG 2.1: SCHLEIFEN Brückenkurs Programmierung WiSe 15/16 Toni Barthel
Einfache Wiederholungen und Zufall Problemstellung Stellen Sie rechts abgebildete Animation mit den ihnen bekannten Funktionen dar. void setup() { size(400, 400); smooth(); background(255); nostroke(); Antwort void draw() { // Halbtransparente Farbe in grün/blau-tönen color col = color(0, random(255), random(255), 127); fill(col); // Größe zwischen 50 und 100 Pixeln float s = random(50, 100); ellipse(random(width), random(height), s, s);
Ablaufsteuerung Ablaufsteuerung Kontrollstrukturen IF-(else) Anweisung Swicht-Case Anweisung Schleifen while do-while for-schleife
Wiederholungen: While-Schleife Definition: Eine Schleife (engl. loop) erlaubt die wiederholte Ausführung eines Anweisungsblocks solange eine Fortsetzungsbedingung erfüllt ist. Syntax: while (<Bedingung>) { <Anweisungsblock> Beispiel: while (x <= 600) { x = x+10;
Anschauliches Beispiel Beispiel aus dem (studentischen) Leben: Solange du dich noch nicht am Boden festhalten musst, trinke ein weiteres Bier. boolean gleichgewichtok = true; int alkoholpegel = 0; while (gleichgewichtok) { gleichgewichtok = alkoholpegel < random(10); alkoholpegel = alkoholpegel + 1;
Anschauliches Beispiel Definition: Was passiert, wenn die Fortsetzungsbedingung immer erfüllt wird? boolean gleichgewichtok = true; int alkoholpegel = 0; while (gleichgewichtok) { alkoholpegel = alkoholpegel + 1; Der Computer hört nie auf zu rechnen!
WHILE-Schleife Beispiel I Problemstellung Stellen Sie rechts abgebildete Linienfolge mittels einer Schleife dar. size(400, 650); background(255); strokeweight(2); Antwort while (<Bedingung>) { <Anweisungsblock> // Einfache Linien int y = 0; while (y <= height) { line(0, y, width, y); y = y + 10;
For-Schleife Definition: Oft möchte man in einer Schleife einen Zähler verwenden und man weiß von Anfang an schon, wie oft die Anweisungen in der Schleife ausgeführt werden sollen. Syntax: for (<Initialisierung>; <Bedingung>; <Schrittanweisung>) { <Anweisungsblock> Beispiel: for (int x = 0; x<10; x++) { //Anweisungsblock
Beispiel-For-Schleife I Problemstellung Formulieren Sie folgende Bedingung in eine FOR-Schleife um. size(400, 650); background(255); strokeweight(2); // Einfache Linien int y = 0; while (y <= height) { line(0, y, width, y); y = y + 10; size(400, 650); background(255); strokeweight(2); Antwort // Einfache Linien for (int y = 0; y <= height; y = y + 10) { line(0, y, width, y); Syntax: for (<Initialisierung>; <Bedingung>; <Schrittanweisung>) { <Anweisungsblock>
Beispiel-For-Schleife II Problemstellung Wie können Sie einzelne Punkte mittels FOR-Schleife(n) über die gesamte Arbeitsfläche darstellen? Färben Sie die Punkte zufällig ein. Zutaten: For-Schleife I For-Schleife II Zufall für die Farbe Punkt übersetzt bedeutet das: for( ) for( ) float r = random(a,b) point (x, y); size(400, 650); background(255); strokeweight(5); Antwort // Einfache Linien for (int i = 10; i < width; i = i+10) { for (int j = 10; j < height; j = j+10) { float r = random(0,255); float g = random(0,255); float b = random(0,255); stroke(r, g, b); point(i, j);
TAG 2.2: ANIMATIONEN Brückenkurs Programmierung WiSe 15/16 Toni Barthel
Moving-Ball: Zielstellung
Moving-Ball: Zutaten Problemstellung a) Wie teilen Sie Ihren Quellcode ein? b) Welche Elemente um das Fenster zu initalisieren? c) Welche Funktion benötigen Sie um die Ellipse zu zeichnen? d) Legen Sie Variablen mit dem entsprechenden Datentyp fest: farbebg -> gibt die Farbe des Hintergrunds an farbeball -> gibt die Farbe des Balls an durchmesser -> gibt die Größe des Balls an xposbal -> gibt die x-koordinate der Startposition an yposbal -> gibt die y-koordinate der Startposition an xmovbal -> gibt die Distanz an um die sich der Ball in x Bewegt ymovbal -> gibt die Distanz an um die sich der Ball in y Bewegt //Initalisierung der Variablen void setup () {... void draw () {... size(500, 500); ellipse(x, y, w, h); color farbebg = color(...); color farbeball = color(255,165,0); float durchmesser; float xposbal; float yposbal; float xmovbal; float ymovbal;
Moving-Ball: Initialisierung Problemstellung e) Setzen Sie Ihre Programmcode-Teile zusammen. f) Initialisieren die Variablen. g) Zeichnen Sie die Ellipse. color farbebg = color(255); color farbeball = color(255,165,0); float durchmesser; float xposbal; float yposbal; float xmovbal; float ymovbal; void setup() { size(500, 500); smooth(); durchmesser = 50; xposbal = 0; yposbal = 50; xmovbal = 1; ymovbal = 0; void draw() { // re-draw the background background(white); // draw the ball fill(orange); ellipse(xposbal, yposbal, durchmesser, durchmesser);
Moving-Ball: Bewegung Problemstellung h) Wie bewegen Sie den ball zur nächsten Postion? i) Fügen die Brechnung an geeigneter Stelle ein. xposbal = xposbal + xmovbal; yposbal = yposbal + ymovbal; void draw() { // re-draw the background background(white); // draw the ball fill(orange); ellipse(xposbal, yposbal, durchmesser, durchmesser); // move the ball to its next position xposbal = xposbal + xmovbal; yposbal = yposbal + ymovbal;
Moving-Ball: Rückstoß Problemstellung j) Wie kommen Sie wieder zurück? k) Fügen die Brechnung an geeigneter Stelle ein. // hit the left edge? if (xposbal < 0) { xmovbal = xmovbal*-1; // hit the right edge? if (xposbal > 500) { xmovbal = xmovbal*-1; void draw () {...
Moving-Ball: Ergebnis color white = color(255); color orange = color(255, 165, 0); float xposbal; // (x, y) is the center float yposbal; // of the ball float xmovbal; // move up float ymovbal; // move to the right float durchmesser; void setup() { size(500, 500); smooth(); // set the ball's initial position and velocity xposbal = 0; // start in the center of the screen yposbal = 50; // start in the center of the screen xmovbal = 10; // move to the right / left ymovbal = 0; // move up / down durchmesser = 50; void draw() { background(white); nostroke(); fill(orange); ellipse(xposbal, yposbal, durchmesser, durchmesser); xposbal = xposbal + xmovbal; yposbal = yposbal + ymovbal; if (xposbal < 0) { xmovbal = xmovbal*-1; if (xposbal > 500) { xmovbal = xmovbal*-1; if (yposbal < 0) { ymovbal = -1*yMovBal; if (yposbal > 500) { ymovbal = -1*yMovBal;
TAG 2.3: AUSBLICK KLASSEN UND OBJEKTE Brückenkurs Programmierung WiSe 15/16 Toni Barthel
Was wenn Normale Datentypen nicht reichen? Problemstellung Stellen Sie zwei Bälle mit unterschiedlichen Farben dar. Zwei Variablensätze float x1,y1; color c1; float x2,y2; color c2; Eigener Typ Ball Ball b1, b2;
Zur Verdeutlichung Zur Erinnerung Objektorientierung Programme bestehen aus Objekten, die bestimmte (Teil-)Probleme lösen und zum Lösen eines Gesamtproblems mit anderen Objekten über Nachrichten kommunizieren können
Klassen Definition: Eine Klasse ist eine allgemeingültige Beschreibung von Dingen, in verschiedenen Ausprägungen vorkommen können, aber alle eine gemeinsame Struktur und ein gemeinsames Verhalten haben. Sie ist ein Bauplan für die Erzeugung von einzelnen konkreten Ausprägungen. Syntax: class <Klassen-Name> { //Attribute <Typ> name; Beispiel: class MeinBall { //Attribute int durchmesser; //Konstruktor <Klassen-Name>(<Parameter>){ this.name = nam1; //Konstruktor MeinBall(int radius){ this.durchmesser = 2*radius;
Objekte Definition: Diese Ausprägung einer Klasse bezeichnet man als Objekte oder Instanzen einer Klasse. Syntax: <KlassenName> name = new <Klassenname>(<Parameter>); Beispiel: MeinBall b1 = new MeinBall(30);
Erzeugen und Verwenden von Objekten Klassendefinition class MeinBall { //Attribute int durchmesser; color col = color(0, random(255), random(255), 127); rgb(y,x,z) //Konstruktor MeinBall(int radius){ this.durchmesser = 2*radius; //Variable anlegen MeinBall b1; Objekt erzeugen //Variable über Konstrukteur Aufruf initalisieren b1 = new MeinBall(30); //Änderung der Farbe über Zugriff auf Instanzvariable b1.col = col(0,0,0);
Zusammenfassung While-Schleife: while (<Bedingung>) { <Anweisungsblock> Random random(y,x); random(x); For-Schleife: for (<Initialisierung>; <Bedingung>; <Schrittanweisung>) { <Anweisungsblock> MORGEN: KLASSEN UND OBJEKTE IM DETAIL -> Events und Arrays
Aufteilung der Übungsgruppen A20.1.08 Betriebswirtschaft (1), Elektro- und Informationstechnik (2), Allgemeine Elektrotechnik (17), Energiesysteme (1), Maschinenbau (61), Maschinenbau und Energiesysteme (2) A20.1.09 Allgemeine Elektrotechnik (6), Medieninformatik (16), Technische Informatik (6) A20.2.09 Bahningenieur (2), Physikalische Technik (2), Wirtschaftsmathematik (2), Wirtschaftsinformatik (16), Maschinenbau (1), Mechatronik (4) A20.2.10 Bioinformatik (2), Informatik (10), Ingenieur-Informatik (9) Wirtschaftsinformatik (14) B14.3.15 Biomedizinische Technik (4), Medizinische Physik (1), Umwelt-, Hygiene- u. Sicherheitsingenieurwesen (2), Medizinische-Informatik (9), StudiumPlus (23), Wirtschaftsingenieurwesen (2), Architektur (1), Bauingenieurwesen (2)
HERZLICHEN DANK FÜR IHRE AUFMERKSAMKEIT Toni Barthel