Lernpfad:Einführung in Processing/14: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{NNavigation}} | {{NNameAnzeigen}}{{NNavigation}} | ||
{{Tldr:Start|Was du in diesem Schritt lernst|Icon=Icon Chalk board.png}} | |||
* ''Logische Verknüpfungen'' | |||
{{Tldr:End}} | |||
In {{Pfad|11|bedingten Anweisungen}} und {{Pfad|13|bedingten Schleifen}} kontrolliert eine ''Bedingung'', welche Befehle als Nächstes ausgeführt werden. ''Bedingungen'' in {{Java}} sind Ausdrücke, die entweder ''wahr'' (<code>true</code>) oder ''falsch'' (<code>false</code>). <code>true</code> und <code>false</code> nennt man ''Wahrheitswerte''. Sie werden in {{Java}} mit dem Schlüsselwort <code>boolean</code> gekennzeichnet. | In {{Pfad|11|bedingten Anweisungen}} und {{Pfad|13|bedingten Schleifen}} kontrolliert eine ''Bedingung'', welche Befehle als Nächstes ausgeführt werden. ''Bedingungen'' in {{Java}} sind Ausdrücke, die entweder ''wahr'' (<code>true</code>) oder ''falsch'' (<code>false</code>). <code>true</code> und <code>false</code> nennt man ''Wahrheitswerte''. Sie werden in {{Java}} mit dem Schlüsselwort <code>boolean</code> gekennzeichnet. | ||
Zeile 6: | Zeile 11: | ||
<pre> | <pre> | ||
wenn es heute nicht | wenn es heute nicht regnet | ||
wenn es windig ist | wenn es windig ist | ||
gehen wir Drachen steigen lassen | gehen wir Drachen steigen lassen | ||
Zeile 19: | Zeile 24: | ||
</pre> | </pre> | ||
{{Java}} kennt auch solche Verknüpfungen: die logischen Verknüpfungen. | {{Java}} kennt auch solche Verknüpfungen: die ''logischen Verknüpfungen''. | ||
{| {{prettytable}} | {| {{prettytable}} | ||
|+ Logische Operatoren | |+ Logische Operatoren | ||
|- | |- | ||
! Art !! Syntax !! | ! Art !! Syntax !! Beispiel || Beschreibung | ||
|- | |- | ||
| UND || <code>&&</code> || <code> | | UND || <code>&&</code> || <code>i%2 == 0 && i < 100</code> || Ist ''wahr'', wenn die Ausdrücke links und rechts ''wahr'' sind. | ||
|- | |- | ||
| ODER || <code>||</code> || <code> | | ODER || <code>||</code> || <code>i >= 10 | i <= 40</code> || Ist ''wahr'', wenn ''mindestens einer'' der Ausdrücke links und rechts ''wahr'' ist. | ||
|- | |- | ||
| NICHT || <code>!</code> || <code>! | | NICHT || <code>!</code> || <code>!(i == 4)</code> || Ist ''wahr'', wenn der Ausdruck ''falsch'' ist. Dreht den Wahrheitswert um.<br/>(Das Beispiel kann auch als <code>i != 4</code> geschrieben werden.) | ||
|} | |} | ||
Zeile 38: | Zeile 42: | ||
Wie auch bei den Schaltungen lassen sich mit den drei Basisverknüpfungen ''UND'', ''ODER'' und ''NICHT'' komplexe Anfragen programmieren.}} | Wie auch bei den Schaltungen lassen sich mit den drei Basisverknüpfungen ''UND'', ''ODER'' und ''NICHT'' komplexe Anfragen programmieren.}} | ||
{{Aufgabe:Start}} | |||
# Analysiere die folgenden Programmzeilen und gib eine Vermutung ab, ob das Ergebnis <code>true</code> oder <code>false</code> ist. Probiere ''erst dann'' die Zeilen (einzeln) in {{Processing}} aus. | |||
## <code>println(width < 4000 || height < 100);</code> | |||
## <code>println(width < 4000 && height < 100);</code> | |||
## <code>println(width < 4000 && height < 4000);</code> | |||
## <code>println(width > 500 && height < 4000);</code> | |||
## <code>println(width == height || width != height);</code> | |||
## <code>println(width-height == height-width);</code> | |||
{{Aufgabe:End}} | |||
{{Aufgabe:Start}} | |||
<syntaxhighlight lang="java" line="1"> | |||
int x = 0; | |||
void draw() { | |||
background(0); | |||
// Linien zum Markieren der Zone | |||
stroke(255); | |||
line(25, 0, 25, height); | |||
line(75, 0, 75, height); | |||
// hier wird animiert... | |||
ellipse(x, 50, 20, 20); | |||
x++; | |||
if (x > width) { | |||
x = 0; | |||
} | |||
} | |||
</syntaxhighlight> | |||
# Übernimm das Programm oben in {{Processing}} und probier es aus. Du siehst zwei Linien und einen fliegenden Ball. Verwende '''genau eine''' ''bedingte Anweisung'', um den Ball ''zwischen den Linien'' rot werden zu lassen. | |||
#: {{P5js|https://editor.p5js.org/Ngb/full/IGsyhY2zQ|height=100}} | |||
# Ändere das Programm so ab, dass der Ball ''außerhalb'' des Bereichs rot wird (und innen weiß bleibt). | |||
{{Aufgabe:End}} | |||
{{Lösung:Start|Lösung zu Aufgabe 1}} | |||
<syntaxhighlight lang="java" line="1" highlight="11-16"> | |||
int x = 0; | |||
void draw() { | |||
background(0); | |||
// Linien zum Markieren der Zone | |||
stroke(255); | |||
line(25, 0, 25, height); | |||
line(75, 0, 75, height); | |||
// Farbe setzen | |||
if( x > 25 && x < 75 ) { | |||
fill(199, 43, 0); | |||
} else { | |||
fill(255); | |||
} | |||
// hier wird animiert... | |||
ellipse(x, 50, 20, 20); | |||
x++; | |||
if (x > width) { | |||
x = 0; | |||
} | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Aufgabe:Start}} | |||
<syntaxhighlight lang="java" line="1"> | |||
float angle = 0; | |||
void draw() { | |||
noStroke(); | |||
// Vier Zonen | |||
fill(0); | |||
rect(0,0,50,50); | |||
fill(50); | |||
rect(50,0,50,50); | |||
fill(100); | |||
rect(0,50,50,50); | |||
fill(150); | |||
rect(50,50,50,50); | |||
fill(255); | |||
// hier wird animiert... | |||
ellipse(50+25*sin(radians(angle)), 50+25*cos(radians(angle)), 20, 20); | |||
angle += 3; | |||
} | |||
</syntaxhighlight> | |||
Übernimm das Programm oben in {{Processing}} und probier es aus. Du siehst vier Zonen und einen fliegenden Ball. Verwende ''bedingte Anweisungen'', um den Ball in jeder Zone anders zu färben. (Wähle die Farben selbst.) | |||
{{P5js|https://editor.p5js.org/Ngb/full/er4IO-mto|height=100}} | |||
{{Aufgabe:End}} | |||
{{Tipp:Start}} | |||
Berechne zunächst die <code>x</code>- und <code>y</code>-Koordinate des Kreises und prüfe danach mit <code>if - else if - ...</code> Anweisungen die verschiedenen Bedingungen für die Position des Kreises. | |||
{{Tipp:End}}{{Lösung:Start}} | |||
<syntaxhighlight lang="java" line="1" highlight="17-29"> | |||
float angle = 0; | |||
void draw() { | |||
noStroke(); | |||
// Vier Zonen | |||
fill(0); | |||
rect(0,0,50,50); | |||
fill(50); | |||
rect(50,0,50,50); | |||
fill(100); | |||
rect(0,50,50,50); | |||
fill(150); | |||
rect(50,50,50,50); | |||
fill(255); | |||
// Farbe festlegen | |||
float x = 50+25*sin(radians(angle)); | |||
float y = 50+25*cos(radians(angle)); | |||
if( x < 50 && y < 50 ) { | |||
fill(199, 43, 0); | |||
} else if( x >= 50 && y < 50 ) { | |||
fill(0, 199, 43); | |||
} else if( x >= 50 && y >= 50 ) { | |||
fill(43, 0, 199); | |||
} else { | |||
fill(255); | |||
} | |||
// hier wird animiert... | |||
ellipse(x, y, 20, 20); | |||
angle += 3; | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} |
Aktuelle Version vom 16. Februar 2022, 21:44 Uhr
- Logische Verknüpfungen
In bedingten Anweisungen und bedingten Schleifen kontrolliert eine Bedingung, welche Befehle als Nächstes ausgeführt werden. Bedingungen in Java sind Ausdrücke, die entweder wahr (true
) oder falsch (false
). true
und false
nennt man Wahrheitswerte. Sie werden in Java mit dem Schlüsselwort boolean
gekennzeichnet.
Durch Verschachtelung von Bedingungen und Schleifen können mehrere Bedingungen miteinander verknüpft werden. Zum Beispiel
wenn es heute nicht regnet wenn es windig ist gehen wir Drachen steigen lassen ende wenn ende wenn
In natürlicher Sprache würden wir uns kompakter ausdrücken:
wenn es heute '''nicht''' regnet '''und''' es windig ist
Java kennt auch solche Verknüpfungen: die logischen Verknüpfungen.
Art | Syntax | Beispiel | Beschreibung |
---|---|---|---|
UND | && |
i%2 == 0 && i < 100 |
Ist wahr, wenn die Ausdrücke links und rechts wahr sind. |
ODER | || |
i >= 10 | i <= 40 |
Ist wahr, wenn mindestens einer der Ausdrücke links und rechts wahr ist. |
NICHT | ! |
!(i == 4) |
Ist wahr, wenn der Ausdruck falsch ist. Dreht den Wahrheitswert um. (Das Beispiel kann auch als i != 4 geschrieben werden.)
|
Du kennst logische Verknüpfungen vielleicht schon von logischen Schaltungen (bzw. digitalen Schaltungen). Die Wahrheitstafeln der UND-Verknüpfung (&&
) und des UND-Gatters sind zum Beispiel genau identisch.
Wie auch bei den Schaltungen lassen sich mit den drei Basisverknüpfungen UND, ODER und NICHT komplexe Anfragen programmieren.
- Analysiere die folgenden Programmzeilen und gib eine Vermutung ab, ob das Ergebnis
true
oderfalse
ist. Probiere erst dann die Zeilen (einzeln) in Processing aus.println(width < 4000 || height < 100);
println(width < 4000 && height < 100);
println(width < 4000 && height < 4000);
println(width > 500 && height < 4000);
println(width == height || width != height);
println(width-height == height-width);
int x = 0;
void draw() {
background(0);
// Linien zum Markieren der Zone
stroke(255);
line(25, 0, 25, height);
line(75, 0, 75, height);
// hier wird animiert...
ellipse(x, 50, 20, 20);
x++;
if (x > width) {
x = 0;
}
}
- Übernimm das Programm oben in Processing und probier es aus. Du siehst zwei Linien und einen fliegenden Ball. Verwende genau eine bedingte Anweisung, um den Ball zwischen den Linien rot werden zu lassen.
- Ändere das Programm so ab, dass der Ball außerhalb des Bereichs rot wird (und innen weiß bleibt).
int x = 0;
void draw() {
background(0);
// Linien zum Markieren der Zone
stroke(255);
line(25, 0, 25, height);
line(75, 0, 75, height);
// Farbe setzen
if( x > 25 && x < 75 ) {
fill(199, 43, 0);
} else {
fill(255);
}
// hier wird animiert...
ellipse(x, 50, 20, 20);
x++;
if (x > width) {
x = 0;
}
}
float angle = 0;
void draw() {
noStroke();
// Vier Zonen
fill(0);
rect(0,0,50,50);
fill(50);
rect(50,0,50,50);
fill(100);
rect(0,50,50,50);
fill(150);
rect(50,50,50,50);
fill(255);
// hier wird animiert...
ellipse(50+25*sin(radians(angle)), 50+25*cos(radians(angle)), 20, 20);
angle += 3;
}
Übernimm das Programm oben in Processing und probier es aus. Du siehst vier Zonen und einen fliegenden Ball. Verwende bedingte Anweisungen, um den Ball in jeder Zone anders zu färben. (Wähle die Farben selbst.)
Berechne zunächst die x
- und y
-Koordinate des Kreises und prüfe danach mit if - else if - ...
Anweisungen die verschiedenen Bedingungen für die Position des Kreises.
float angle = 0;
void draw() {
noStroke();
// Vier Zonen
fill(0);
rect(0,0,50,50);
fill(50);
rect(50,0,50,50);
fill(100);
rect(0,50,50,50);
fill(150);
rect(50,50,50,50);
fill(255);
// Farbe festlegen
float x = 50+25*sin(radians(angle));
float y = 50+25*cos(radians(angle));
if( x < 50 && y < 50 ) {
fill(199, 43, 0);
} else if( x >= 50 && y < 50 ) {
fill(0, 199, 43);
} else if( x >= 50 && y >= 50 ) {
fill(43, 0, 199);
} else {
fill(255);
}
// hier wird animiert...
ellipse(x, y, 20, 20);
angle += 3;
}