Programmieren! - Informatik, TU Wien

Werbung
Programmieren!
Meine ersten Schritte als ProgrammiererIn!
Prolog 2014
Stefan Podlipnig, TU Wien
Ziele
• Kennenlernen einer einfachen Programmiersprache
• Verständnis für einfache Programmierkonzepte entwickeln
Diese Veranstaltung soll Ihnen einen einfachen Einstieg in die
Programmierung ermöglichen
Prolog 2014
Programmieren!
2
Organisation
• Vier Vorlesungen im Audi-Max




Do 25.09., 10:45 – 12:15
Fr 26.09., 9:00 – 10:30
Mo 29.09., 15:15 – 16:45
Di 30.09., 10:45 – 12:15
• Übungen im Computerraum
 90 Minuten
 HG EG 05 (Frogger Raum), Favoritenstrasse 9 – 11
 29.09. – 02.10.
 Genaue Termine auf der TISS-Homepage des Prologs
 Anmeldung zu einem Termin
 Auf der TISS-Homepage des Prologs unter Gruppen-Anmeldung
 29.09. – Extra zwei Gruppen für „Fortgeschrittene“
 Fragen an [email protected]
Prolog 2014
Programmieren!
3
Umfrage 1
Wer hat schon einmal programmiert?
Prolog 2014
Programmieren!
4
Umfrage 2
In welcher Programmiersprache haben Sie schon
Programme geschrieben?
•
•
•
•
•
•
•
•
•
•
•
Prolog 2014
Java
C
C++
C#
Objective-C
Python
JavaScript
Visual Basic
PHP
Processing
Andere Sprache
Programmieren!
5
Umfrage 3
Wie groß (in Codezeilen) war Ihr größtes Programm?
a. Kleiner als 100 Zeilen
b. 100 – 1000 Zeilen
c. Mehr als 1000 Zeilen
Prolog 2014
Programmieren!
6
Überblick
Operatoren
Variablen
Processing Grundlagen
Prolog 2014
Verzweigungen
Kleine
Programme
Programmieren!
Schleifen
7
PROCESSING – GRUNDLAGEN
Prolog 2014
Programmieren!
8
Programmierung (in Processing)
Quellcode in Processing
Übersetzung
(mehrere Schritte)
size(450, 150);
fill(150);
rect(20, 10, 100, 100);
Maschinensprache
0101010010010010
0101111010010111
0101110101011011
0110101110100001
0100011010101100
0100101011011101
1010101110101011
0111010101101101
• Maschinensprache = Befehle, die die CPU versteht
 Unterschiedliche Rechner (CPUs) können unterschiedliche
Maschinensprachen haben
• Programmieren in höherer Programmiersprache (z.B. Processing)
 Für Menschen leichter
 Muss aber bestimmten Regeln folgen (Unterstützung der Übersetzung)
Prolog 2014
Programmieren!
9
Processing
• Einfache Programmierumgebung für visuelle Elemente und
Interaktionen
• Einfache Entwicklung von Programmen
• Keine eigene Programmiersprache
 Stark vereinfachte Version der Programmiersprache Java
• Webseite
 http://processing.org/
Prolog 2014
Programmieren!
10
Entwicklungsumgebung
Menüleiste
Toolbar (Shortcuts,
Tab-Leiste)
Texteditor
Nachrichten
(Fehlermeldungen etc.)
Konsole
(Textausgabe)
Grafische Ausgabe
(Sketchfenster)
Prolog 2014
Programmieren!
11
Sketches und Sketchfenster
• Skizzen (Sketches)
 Für ein neues Programm
 Ausgabe erfolgt in das sogenannte Sketchfenster
• Koordinatensystem im Sketchfenster
 Achtung: positive Y-Werte gehen nach unten
Prolog 2014
Programmieren!
12
Zeichnen mit Funktionen
• Funktion in Processing
 Kleines „Programm“ für eine bestimmte Aufgabe
• Beispiel für einen Aufruf einer Funktion
 size(300, 150);
• Aufbau
 Name der Funktion
 Öffnende Klammer
 Argumente durch Beistriche getrennt
 Dienen zur Parametrisierung
size(300, 150);
 Schließende Klammer
 Strichpunkt
 Schließt die gesamte Anweisung ab
Prolog 2014
Programmieren!
13
Beispiele
• Beispiel
 Sketchfenster mit der Größe 200 × 200 (Breite × Höhe) erzeugen
size(200, 200);
• Beispiel
 Sketchfenster mit der Größe 200 × 200 erzeugen und danach
 Punkt an die Stelle mit den Koordinaten x=100 und y=50 zeichnen
size(200, 200);
point(100, 50);
Prolog 2014
Programmieren!
14
Beispiel
• Beispiel
 Sketchfenster mit der Größe 200 × 200 erzeugen
 Zeichenfarbe für Linien auf weiß setzen
 Linie zwischen dem Startpunkt (10, 10) und dem Endpunkt(150, 150)
zeichnen
Prolog 2014
Programmieren!
15
Informationen zu den Funktionen
• Auflistung der unterschiedlichen Funktionen in Processing
 http://www.processing.org/reference/
• Beispiel stroke
Prolog 2014
Programmieren!
16
Maßgeschneiderte Formen
• Eigene Formen festlegen
• Benötigte Anweisungen (in dieser Reihenfolge)
 beginShape() (ohne Parameter)
 Nacheinander Eckpunkte mit x- und y-Koordinaten mit Anweisung vertex
angeben
 endShape() mit Parameter CLOSE (um Form abzuschließen)
• Beispiel
size(480, 120);
beginShape();
vertex(180, 82);
vertex(207, 36);
vertex(214, 63);
vertex(407, 11);
vertex(412, 30);
vertex(219, 82);
vertex(226, 109);
endShape(CLOSE);
Prolog 2014
Programmieren!
17
Quiz zu Anweisungen
Welche der folgenden Anweisungen sind in Processing korrekt?
a)
b)
c)
d)
e)
f)
Prolog 2014
size(450, 150);
line(20, 10, 100, 100);
size(450, 150)
point 100, 50;
line(20, 10, 100, 100);
vertex(160, );
Programmieren!
18
VARIABLEN
Prolog 2014
Programmieren!
19
Motivation
• Ausgangsbeispiel
size(450, 150);
rect(20, 10, 100, 100);
rect(160, 10, 100, 100);
rect(300, 10, 100, 100);
• Änderungswünsche (Beispiel)
 Jedes Rechteck sollte 120 × 120 Bildpunkte groß sein
 Jedes Rechteck sollte auf der y-Achse bei 20 beginnen
• Änderung
 Alles händisch ändern?
 Was passiert, wenn wir danach wieder neue Anforderungen haben?
Lösung? - Variablen!
Prolog 2014
Programmieren!
20
Variable
• Benannte Speicherstelle
• Wird einmal vereinbart (deklariert)
 Name
 Datentyp
• Danach Zugriff über Name
• Wert kann sich im Laufe des Programms ändern
Prolog 2014
Programmieren!
21
Beispiel für Variable – Integer (ganze Zahlen)
• Beispiel: Variable für eine ganze Zahl mit dem Namen number
• In Processing
int number;
• Bedeutung
 int = Datentyp (steht für ganze Zahlen)
 number = Name
• Datentyp für ganze Zahlen
 In Processing werden 4 Bytes (32 Bits) für ganze Zahlen verwendet
 Wertebereich (232 Möglichkeiten = 4 294 967 296 Zahlen)
 -2 147 483 648 bis +2 147 483 647
Prolog 2014
Programmieren!
22
Datentyp
• Daten haben einen bestimmten Typ (Datentyp)
• Beispiele für einfache (primitive) Datentypen





Ganze Zahlen
Kommazahlen
Zeichen
Zeichenfolge
Wahrheitswert
• Der Datentyp legt fest
 Wertebereich
 Repräsentation im Speicher (wie viele Bytes werden belegt)
 Erlaubte Operationen
Prolog 2014
Programmieren!
23
Wert zuweisen
• Form
 Variable = „Wert“;
• Bedeutung
 Die rechte Seite (Wert) wird der linken Seite (Variable) zugewiesen
• Beispiele (Integer Variable)
 Einfache Vereinbarung, danach Zuweisung
int number;
…
number = 10;
 Vereinbarung mit Initialisierung
int number = 10;
 Vereinbarung mit Initialisierung, Vereinbarung mit Zuweisung aus anderer
Variable
int number = 10;
int number2 = number;
Prolog 2014
Programmieren!
24
Literal
• Wird zur direkten Darstellung eines Wertes verwendet
• Beispiele für Literale





Ganze Zahlen: 10, +10, -10
Kommazahlen: 10.50, +10.50, - 10.50
Einzelne Zeichen: ˈaˈ
Zeichenketten: "Hello"
Wahrheitswerte: true, false
Prolog 2014
Programmieren!
25
Ausgangsbeispiel mit Variablen
• Ausgangsbeispiel ohne Variablen -> Ausgangsbeispiel mit Variablen
size(450, 150);
int y = 10;
int s = 100;
rect(20, y, s, s);
rect(160, y, s, s);
rect(300, y, s, s);
size(450, 150);
rect(20, 10, 100, 100);
rect(160, 10, 100, 100);
rect(300, 10, 100, 100);
• Beispiel mit anderer Variableninitialisierung
size(450, 150);
int y = 20;
int s = 120;
rect(20, y, s, s);
rect(160, y, s, s);
rect(300, y, s, s);
Prolog 2014
Programmieren!
26
Verändern von Variableninhalten
• Beispiel
size(450, 250);
int y = 10, s = 100;
rect(20, y, s, s);
rect(160, y, s, s);
rect(300, y, s, s);
y = 120;
s = 110;
rect(20, y, s, s);
rect(160, y, s, s);
rect(300, y, s, s);
• Hinweise
 Variablen des gleichen Typs können in einer Zeile vereinbart werden
 Eine neue Zuweisung verändert das Bitmuster im Speicher und damit ist der
alte Wert nicht mehr vorhanden!
Prolog 2014
Programmieren!
27
Primitive Datentypen in Processing
Typ
Größe in Bits
Wertebereich
meist 8 true oder false
boolean
16
• Enthält u.a. Buchstaben (z.B. ˈAˈ), Zahlen, weitere Alphabete,
char
Sonderzeichen
• Kann als Zahl aufgefasst werden (0 bis 65535)
8
–128 bis +127
byte
(–27 bis 27 – 1)
16
–32768 bis +32767
short
(–215 bis 215 – 1)
32
–2147483648 bis +2147483647
int
(–231 bis 231 – 1)
64
–9223372036854775808 bis +9223372036854775807
long
(–263 bis 263 – 1)
32
ca. −3.4×1038 bis 3.4×1038 (IEEE 754 Darstellung)
float
64
ca. −1.8×10308 bis 1.8×10308 (IEEE 754 Darstellung)
double
Prolog 2014
Programmieren!
28
Zuweisungskompatibilität
• Beispiel
int x;
short y = 10;
x = y;
• Processing erlaubt solche Zuweisungen
• Kompatibilitätsbeziehung
 → = kann konvertiert werden in
 byte → short → int → long → float → double
 char → int …
• Umkehrung
 Nicht automatisch
 Das muss beim Programmieren explizit gesagt werden (Cast)
 Beispiel von oben (x zusätzlich mit Wert belegt): y = (short) x;
Prolog 2014
Programmieren!
29
Processing-Variablen
• Processing verwaltet einige spezielle Variablen
• Diese speichern Informationen über das ablaufende Programm
 Beispiele
 width = Breite des Sketchfensters
 height = Höhe des Sketchfensters
• Daneben bietet Processing auch konstante Werte (Konstanten), die
sich nicht ändern
 Beispiele
 PI entspricht Kreiszahl π
 HALF_PI entspricht π/2
• Beispiel
size(200, 200);
arc(width/2, height/2, 100, 70, 0, PI);
Prolog 2014
Programmieren!
30
Quiz 1 zu Variablen
Welche der folgenden Vereinbarungen sind korrekt?
a)
b)
c)
d)
e)
f)
g)
Prolog 2014
int x;
float y;
i float;
long huge;
double d;
char c;
large num;
Programmieren!
31
Quiz 2 zu Variablen
• Sie haben folgende Variablen gegeben
int i; float f; long l; double d; char c;
Welche der folgenden Zuweisungen sind korrekt?
a)
b)
c)
d)
e)
f)
g)
Prolog 2014
i
f
l
d
f
c
i
=
=
=
=
=
=
=
10;
12;
i;
12.25;
d;
'A';
c;
Programmieren!
32
OPERATOREN
Prolog 2014
Programmieren!
33
Motivation
• Wir möchten Variablen nicht nur einfach belegen oder einzelne
Werte zuweisen
• Sehr oft will man rechnen und dann das Ergebnis einer Variable
zuweisen
Lösung? - Operatoren!
Prolog 2014
Programmieren!
34
Wichtige Operatoren
•
•
•
•
•
•
Addition (+)
Subtraktion (-)
Multiplikation (*)
Division (/)
Modulo (%)
Zuweisung (=)
Prolog 2014
Programmieren!
35
Ausdruck
• Kombination von Operatoren und Operanden (Variablen, Zahlen)
• Beispiele
3 + 4
2 + 4 * 5
• Durch Anhängen eines Semikolons (;) wird aus einem Ausdruck
eine Anweisung (einfache Anweisung), z.B.
x = 3 + 4;
x = y + 5 - 2;
• Beispiel
size(300, 150);
int x = 20;
int y = x + x;
rect(x, y, 100, 50);
Prolog 2014
Programmieren!
36
Präzedenz
• Processing berücksichtigt bei unterschiedlichen Operatoren in
einem Ausdruck bestimmte Regeln für den Vorrang
 Zum Beispiel „Punkt- vor Strichrechnung“
• Beispiel





x = 2 + 4 * 5;
Operatoren: *, +, = (geordnet nach Vorrang)
Es wird 4 * 5 ausgewertet
Dann wird 2 + 20 berechnet
Zuletzt wird 22 der Variable x zugewiesen
Prolog 2014
Programmieren!
37
Beispiel für Operatoren mit Präzedenz
size(480, 120);
int x = 50;
int h = 20;
int y = 25;
int y2;
rect(x, y, 300, h);
x = x + 100;
y2 = y + h;
rect(x, y2, 300, h);
x = x - 150;
y2 = y + h * 2;
rect(x, y2, 300, h);
size(480, 120);
int x = 50;
int h = 20;
int y = 25;
rect(x, y, 300, h);
rect(x + 100, y + h, 300, h);
rect(x - 50, y + h * 2, 300, h);
Prolog 2014
Ausdrücke wie y + h * 2 werden nur
ausgewertet (keine Variable verändert) und
das Ergebnis als Argument übergeben!
Programmieren!
38
Kürzere Schreibweise
• Kürzere Schreibweise für Operatoren
Operation
Bezeichnung
entspricht
Op1 += Op2
Additionszuweisung
Op1 = Op1 + Op2
Op1 -= Op2
Subtraktionszuweisung
Op1 = Op1 - Op2
Op1 *= Op2
Multiplikationszuweisung
Op1 = Op1 * Op2
Op1 /= Op2
Divisionszuweisung
Op1 = Op1 / Op2
Op1 %= Op2
Modulozuweisung
Op1 = Op1 % Op2
Prolog 2014
Programmieren!
39
Inkrement und Dekrement
• Mit dem Inkrementoperator (++) bzw. dem Dekrementoperator (--)
wird der Wert einer Variable um 1 erhöht bzw. erniedrigt
 a++ entspricht a += 1 entspricht a = a + 1
Operator
Benennung
Beispiel
Erklärung
++
Präinkrement
++a
a wird vor seiner weiteren Verwendung um 1 erhöht
++
Postinkrement
a++
a wird nach seiner weiteren Verwendung um 1 erhöht
--
Prädekrement
--b
b wird vor seiner weiteren Verwendung um 1 erniedrigt
--
Postdekrement
b--
b wird nach seiner weiteren Verwendung um 1 erniedrigt
• Beispiel (Folge von drei Anweisungen)
a = 3;
a++;
b = ++a + 3;
Prolog 2014
Welchen Wert hat b nach
der dritten Anweisung - 8
Programmieren!
40
Ausdrücke und unterschiedliche Datentypen
• Variablen unterschiedlichen Typs in einem Ausdruck verwenden
 Beispiel
int x = 10;
float y = 20.0;
print(x + y);
• Typ des Ausdrucks = „größter“ Typ im Ausdruck
• Obiges Beispiel
 Ergebnis von x + y hat Datentyp float
 Ergebnis kann ohne Cast nur einer float- oder double-Variable zugewiesen
werden
Prolog 2014
Programmieren!
41
Kommentare
• Größerer Programmcode sollte immer kommentiert werden
• Processing erlaubt Kommentare
 Werden beim Ausführen ignoriert
 Beginnen mit // bei einzeiligen Kommentaren
 Können über mehrere Zeilen mit /* … */ realisiert werden
• Beispiel
/*
Simple
program
with
output
*/
size(400, 400);
arc(100, 100, 100, 100, 0, PI); // semi circle
// Draw a Pac-Man
noStroke();
fill(255, 255, 0); // yellow
arc(width/2, height/2, 100, 100, 0.63, PI * 1.8);
Prolog 2014
Programmieren!
42
Namenswahl
• Variablen
 Kurze aber aussagekräftige (sprechende) Namen
 Englisch bevorzugt
 „lowerCamelCase“-Schreibweise
 totalSum, numberOfValues, lineWidth, ….
• Hilfsvariable für kleine Programme
 Kurze Namen oder nur Buchstaben (z. B: x, y, i)
Prolog 2014
Programmieren!
43
Quiz 1 zu Operatoren
Welche der folgenden Zuweisungen sind korrekt?
a)
b)
c)
d)
e)
f)
Prolog 2014
x = 2 + 3;
y = y + ;
a + 1 = 2 + 3;
a = + 2 3;
b = +2 + 2;
+c = 2 + 3;
Programmieren!
44
Quiz 2 zu Operatoren
• Sie haben folgende Vereinbarungen gegeben
int a = 2, b = 4, c = 0, d = 0;
float x = 1.75, y = 2.5, z = 1.0;
Welche Werte haben die Variablen c, d, z, a, c und b nach der
Ausführung der folgenden Anweisungen?
c = 3 +
d = d *
z = x +
a++;
c = a++
b = a +
Prolog 2014
2 * -2 + a * 3;
a - 2 * b + 4;
y * a + 2;
+ 2;
2;
Programmieren!
45
VERZWEIGUNGEN
Prolog 2014
Programmieren!
46
Motivation
• In realen Programmen muss in bestimmten Fällen eine
Entscheidungen getroffen werden
• Beispiel
 Variable x hat Wert < 10
 In diesem Fall soll ein bestimmter Codeabschnitt ausgeführt werden
 Ansonsten darf dieser Codeabschnitt nicht ausgeführt werden
Lösung? – Verzweigungen!
Prolog 2014
Programmieren!
47
Verzweigungen in Processing
• Einfache Form
if (test) {
statements
}
• Schlüsselwort if
• test = Ausdruck (in Klammern), der ausgewertet wird
 Muss immer ein boolescher Ausdruck sein (also true oder false ergeben)
 Falls die Auswertung wahr (true) ergibt, dann werden die Anweisungen im
Block zwischen { und } ausgeführt
 Eine Anweisung kann auch wieder eine if-Anweisung sein (Verschachtelung)!
 Wenn nur eine Anweisung ausgeführt werden soll, dann kann man auf die
Klammern { } verzichten
Prolog 2014
Programmieren!
48
Vergleichsoperatoren
• Vergleichsoperatoren
Notation
Mathematische Notation
a < b
a < b
a > b
a > b
a <= b
a ≤ b
a >= b
a ≥ b
a == b
a = b
a != b
a ≠ b
• Beispiel
size(200, 200);
int rand = int(random(10));
if (rand > 5) {
fill(100);
}
rect(20, 20, 160, 160);
Prolog 2014
Programmieren!
x=5
x=9
49
Logische Werte
• Wertebereich umfasst 2 Werte
 true und false
• Operationen
 Negation: !
 Oder: ||
 Und: &&
Prolog 2014
a
b
!a
a && b
a || b
false
false
true
false
false
false
true
false
true
true
false
false
true
true
true
true
true
false
Programmieren!
50
Beispiele
Prolog 2014
size(200, 200);
int a = int(random(10));
int b = int(random(10));
if ((a > 5) && (b > 5)) {
fill(100);
}
rect(20, 20, 160, 160);
a=7
b=3
size(200, 200);
int a = int(random(10));
int b = int(random(10));
if ((a > 5) || (b > 5)) {
fill(100);
}
rect(20, 20, 160, 160);
a=2
b=3
Programmieren!
a=8
b=9
a=4
b=6
51
Präzedenz in Processing (Auswahl)
• Operatoren nach Präzedenz (Vorrang) geordnet
 Höchste Präzedenz zuerst
 Innerhalb einer Zeile gleiche Präzedenz
• Auswertung bei Operatoren auf gleicher Stufe (Assoziativität)
 Meist von links nach rechts
 Manchmal von rechts nach links (z.B. Zuweisung)
Symbole
Prolog 2014
Beispiel
()
a * (b + c)
++ -- !
a++, --b, !b
*/%
a*b
+-
a+b
> < <= >=
if (a < b) { … }
== !=
if (a == b) { … }
&&
if ((a < c) && (b > c)) { … }
||
if (a || ( b > c)) { … }
= += -= *= /= %=
a += 10
Programmieren!
52
Komplexere Formen der Verzweigung
• Mit else-Zweig
if (test) {
statements1
} else {
statements2
}
 Wenn test auf true auswertet, dann werden die Anweisungen in
statements1 ausgeführt, andernfalls die Anweisungen in statements2
• Mehrere Alternativen
if (test1) {
statements1
} else if (test2) {
statements2
} else if (test3) {
…
} else {
statementsX
}
Prolog 2014
Programmieren!
53
Beispiel
size(200, 200);
int rand = int(random(10));
if (rand > 5) {
background(0);
stroke(200);
fill(100);
}
if (rand % 2 == 0) {
rect(20, 20, 160, 160);
} else {
line(20, 20, 180, 180);
}
fill(50);
ellipse(100, 100, 50, 50);
Prolog 2014
Programmieren!
x=2
x=5
x=7
x=8
54
Quiz 1 zu Verzweigungen
• Sie haben folgenden Processing-Code gegeben
if (x > 5 || y < 4 && z > 6) {
fill(100);
rect(10, 10, 100, 100);
}
Bei welchen Kombinationen von Werten für x, y und z werden die
Anweisungen im Block ausgeführt?
a)
b)
c)
d)
Prolog 2014
x=2,
x=6,
x=7,
x=3,
y=4,
y=5,
y=3,
y=3,
Programmieren!
z=5
z=8
z=7
z=8
55
Quiz 2 zu Verzweigungen
• Sie haben folgenden Processing-Code und eine dazugehörige
Ausgabe gegeben
size(200, 200);
int rand = int(random(10));
if (rand < 5) {
rect(50, 50, 100, 100);
ellipse(100, 100, 100, 100);
} else {
ellipse(100, 100, 100, 100);
rect(75, 75, 50, 50);
}
if (rand % 2 == 0) {
line(180, 20, 20, 180);
} else {
line(20, 20, 180, 180);
}
Welche Werte für rand erzeugen die obige Ausgabe?
Prolog 2014
Programmieren!
56
SCHLEIFEN
Prolog 2014
Programmieren!
57
Motivation
• Ausgangsbeispiel
size(480, 120);
smooth();
strokeWeight(8);
line(20, 40, 80, 80);
line(80, 40, 140, 80);
line(140, 40, 200, 80);
line(200, 40, 260, 80);
line(260, 40, 320, 80);
line(320, 40, 380, 80);
line(380, 40, 440, 80);
• Problem
 Eine Anweisung wird sehr oft mit kleinen Änderungen bei den Argumenten
wiederholt
Lösung? - Schleifen!
Prolog 2014
Programmieren!
58
for-Schleife
• Aufbau
for (init; test; update) {
statements
}
• Schlüsselwort for
• init = Initialisierung vor dem Start der Schleife
 Z.B. Laufvariable für Schleife vereinbaren und initialisieren
 Eine Laufvariable gilt dann nur innerhalb der Schleife
• test = Abbruchtest für Beenden der Schleife
• update = Veränderung von Schleifenvariablen
 Wird nach den Anweisungen ausgeführt
• statements = ein oder mehrere Anweisungen in einem Block
 Bei einer einzigen Anweisung können die Klammern { } weggelassen werden
Prolog 2014
Programmieren!
59
Beispiel
• Beispiel: Die Zahlen von 0 bis 9 ausgeben
• Ablauf










for (int i = 0; i < 10; i++) {
println(i);
}
Betreten der Schleife: i wird mit 0 initialisiert;
Test auf i < 10 ergibt true
println(i) gibt 0 aus
i wird um 1 erhöht: i hat den Wert 1
Test auf i < 10 ergibt true
println(i) gibt 1 aus
i wird um 1 erhöht: i hat den Wert 2
…
i wird um 1 erhöht: i hat den Wert 10
Test auf i < 10 ergibt false: Ende der Schleife
Prolog 2014
Programmieren!
60
Ausgangsbeispiel angepasst
• Ausgangsbeispiel mit Schleife
size(480, 120);
smooth();
strokeWeight(8);
for (int i = 20; i < 400; i += 60) {
line(i, 40, i + 60, 80);
}
Prolog 2014
Programmieren!
61
Weitere Beispiele
size(480, 120);
smooth();
strokeWeight(2);
for (int i = 20; i < 400; i += 8) {
line(i, 40, i + 60, 80);
}
size(480, 120);
smooth();
strokeWeight(2);
for (int i = 20; i < 400; i += 20) {
line(i, 0, i + i/2, 80);
}
Prolog 2014
Programmieren!
62
Komplexeres Beispiel 1 - Beschreibung
• Wir möchten das folgende Bild (ein Beispiel für eine optische
Täuschung) mit Processing erstellen
• Vorgehensweise
 Hintergrund
 Alle Graustufen von links nach rechts durchlaufen
 Es gibt 256 Graustufen
 Breite des Fensters sollte ein Vielfaches der Anzahl der Graustufen sein
 Höhe kann beliebig gewählt werden (hier Anzahl der Graustufen)
Prolog 2014
Programmieren!
63
Komplexeres Beispiel 1 - Hintergrund
• Wir legen fest
 Anzahl der Graustufen (shades)
 Faktor für Vielfaches (factor)
 Größe des Sketchfensters (shades * factor, shades)
• Zeichnen
 Eine Graustufe mit einer Breite von factor Pixel
 Kann mit einem Rechteck erreicht werden
– Wird mit entsprechender Graustufe gefüllt
– Hat keine Umrandungslinie (noStroke())
• Ergebnis
int shades = 256;
int factor = 2;
size(shades * factor, shades);
noStroke();
for (int i = 0; i < shades; i++) {
fill(i);
rect(i * factor, 0, factor, height);
}
Prolog 2014
Programmieren!
64
Komplexeres Beispiel 1 - Abschluss
• Einfarbiger Balken wird über den Hintergrund gezeichnet
 Größe möglichst flexibel gestalten
 Startpunkt, Breite und Höhe werden mit Hilfe von width und height
realisiert
• Farbe muss jetzt neu gesetzt werden
 Mittlere Graustufe gewählt
• Ergebnis
int shades = 256;
int factor = 2;
size(shades * factor, shades);
noStroke();
for (int i = 0; i < shades; i++) {
fill(i);
rect(i * factor, 0, factor, height);
}
fill(128);
rect(width*0.1, height*0.3, width*0.8, height*0.4);
Prolog 2014
Programmieren!
65
Komplexeres Beispiel 1 – Alternative Lösung
• Aber es geht auch anders




Zeichenfläche beliebig festlegen
Von links nach rechts pro X-Koordinate eine vertikale Linie zeichnen
Die Graustufe ergibt sich aus der X-Koordinate der Linie
Wir haben width Punkte und 256 Graustufen
 width muss nicht 256 entsprechen
 Wir müssen die aktuelle X-Koordinate auf den Bereich 0 – 255 abbilden (map)
• Ergebnis
Prolog 2014
size(600,300);
for (int x = 0; x < width; x++){
stroke(map(x, 0, width - 1, 0, 255));
line(x, 0, x, height - 1);
}
noStroke();
fill(128);
rect(width*0.1, height*0.3, width*0.8, height*0.4);
Programmieren!
66
Verschachtelte Schleifen
• Schleifen können ineinander geschachtelt werden
 Anzahl der Durchläufe erhöht sich entsprechend
• Beispiel
size(480, 120);
background(0);
smooth();
noStroke();
for (int y = 0; y <= height; y += 40) {
for (int x = 0; x <= width; x += 40) {
fill(255, 140);
ellipse(x, y, 40, 40);
}
}
Prolog 2014
Programmieren!
Durchlauf
x
y
1
0
0
2
40
0
3
80
0
4
120
0
5
160
0
6
200
0
7
240
0
8
280
0
9
320
0
10
360
0
11
400
0
12
440
0
13
480
0
14
0
40
…
…
…
52
480
120
67
Komplexeres Beispiel 2 - Beschreibung
• Wir möchten das folgende Bild (ein Beispiel für eine optische
Täuschung) mit Processing erstellen
• Vorgehensweise
 Schleife für horizontale Linien
 Schleife für kürzere Linien
 Abwechselnd nach links oder nach rechts geneigt
Prolog 2014
Programmieren!
68
Komplexeres Beispiel 2 – Horizontale Linien
• Horizontale Linien
 X-Achse: Start bei 0, Länge entspricht Breite des Fensters
 Y-Achse (Werte frei gewählt): Start bei 40, Inkrement von 60
• Ergebnis
size(620, 620);
strokeWeight(6);
int increment = 60;
for (int y = 40; y < height; y += increment) {
line(0, y, width, y);
}
Prolog 2014
Programmieren!
69
Komplexeres Beispiel 2 – Kürzere Linien
• Für jede horizontale Linie
 Zeichne mehrere kürzere Linien
 Abwechselnd nach links oder nach rechts geneigt
• Beispiel (noch einzeln realisiert)
size(620, 220);
strokeWeight(6);
int increment = 60;
int step = 40;
for (int x = 20; x < width; x += increment) {
line(x, 60, x + increment, 60 + step);
line(x + increment, 120, x, 120 + step);
}
Prolog 2014
Programmieren!
70
Komplexeres Beispiel 2 – Abschluss
• Schleifen verschachteln und abwechselnd kürzere Linien nach links
oder nach rechts zeichnen
• Ergebnis (einfacher Ansatz)
size(620, 620);
strokeWeight(6);
int increment = 60;
int step = 40;
boolean even = false;
for (int y = 20; y < height; y += increment) {
line(0, y + step/2, width, y + step/2);
for (int x = 20; x < width; x += increment) {
if (even) {
line(x, y, x + increment, y + step);
} else {
line(x + increment, y, x, y + step);
}
}
even = !even;
}
Prolog 2014
Programmieren!
71
Quiz 1 zu Schleifen
Welche Ausgabe wird durch folgende Schleifen erzeugt?
for (int i = 0; i <= 5; i++) {
print(i);
}
for (int i = 0; i <= 5; i += 2) {
print(i);
}
for (int i = 5; i > 0; i--) {
print(i);
}
Prolog 2014
Programmieren!
72
Quiz 2 zu Schleifen
• Sie haben folgende Ausgabe gegeben (Größe 480 × 120)
Durch welche Schleife wurde diese Ausgabe erzeugt?
for (int i = 20; i < 400; i += 20) {
line(i, 0, i + i/2, 80);
line(i + i/2, 80, i * 1.2, 120);
}
for (int i = 20; i < 400; i += 20) {
line(i, 0, i + i/2, 80);
line(i, 80, i * 1.2, 120);
}
for (int i = 20; i < 400; i += 20) {
line(i + i/2, 80, i * 1.2, 120);
line(i, 0, i + i/2, 80);
}
Prolog 2014
Programmieren!
73
AUSBLICK
Prolog 2014
Programmieren!
74
Was haben Sie in diesem Prolog-Teil kennengelernt ?
•
•
•
•
•
Beispiele für Funktionen in Processing
Variablen
Operatoren
Verzweigungen
Schleifen
Prolog 2014
Programmieren!
75
Beispiele für weitere Aspekte in Processing
•
•
•
•
•
•
Viele weitere Funktionen für grafische Ausgaben (2D, 3D)
Aktiver Modus für Animationen
Funktionen selbst implementieren
Datenstrukturen (wie zum Beispiel Arrays)
Aufteilung von Programmcode in Klassen
Vorgefertigte Klassen (für Bilder, Videos, …)
Prolog 2014
Programmieren!
76
Was man mit Processing programmieren kann ….
Präsentation von Beispielen aus [Greenberg 2013]
Prolog 2014
Programmieren!
77
Processing und Java
• Ähnlichkeiten zwischen Processing und Java (Beispiele)
 Vereinbarungen und Datentypen
 Verzweigungen
 Schleifen
• Änderungen in Java (Beispiele)
 Keine einfachen Sketches mehr
 Mehr Schreibarbeit für lauffähiges Programm
 Viele Programme erzeugen als Output keine Grafik 
 Nicht mehr einfache Funktionen aufrufen
 Aufrufe werden komplexer
Mehr dazu ab Donnerstag in der VO Programmkonstruktion
Prolog 2014
Programmieren!
78
Literatur
• [Reas 2010] Casey Reas, Ben Fry: Getting Started with Processing,
1. Auflage, O'Reilly & Associates, 2010
• [Greenberg 2013] Ira Greenberg, Dianna Xu, Deepak Kumar:
Processing: Creative Coding and Generative Art in Processing 2, 2.
Auflage, friendsofED, 2013
Prolog 2014
Programmieren!
79
Herunterladen