14: Logische Verknüpfungen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Icon Chalk board.png
Was du in diesem Schritt lernst
  • 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.

Logische Operatoren
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.)
Icon Info.png

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.

Icon Heft.png
Arbeitsauftrag
  1. Analysiere die folgenden Programmzeilen und gib eine Vermutung ab, ob das Ergebnis true oder false ist. Probiere erst dann die Zeilen (einzeln) in Processing aus.
    1. println(width < 4000 || height < 100);
    2. println(width < 4000 && height < 100);
    3. println(width < 4000 && height < 4000);
    4. println(width > 500 && height < 4000);
    5. println(width == height || width != height);
    6. println(width-height == height-width);


Icon Heft.png
Arbeitsauftrag
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;
  }
}
  1. Ü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.
    Klicken, um das Programm zu starten.
  2. Ändere das Programm so ab, dass der Ball außerhalb des Bereichs rot wird (und innen weiß bleibt).
Lösung zu Aufgabe 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);

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


Icon Heft.png
Arbeitsauftrag
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.)

Klicken, um das Programm zu starten.
Tipp

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.

Lösung
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;
}