Logische Operatoren

Oftmals dürfen Programmteile nur dann ausgeführt werden, wenn mehrere Bedingungen erfüllt sind.

Folgendes Problem: Unsere Anweisung soll ausdrücken „wenn a==5 und gleichzeitig b==7 oder b==3, wobei a dann egal ist, dann führe einen Programmteil aus“. Bei unserem jetzigen Wissenstand würde das so aussehen:

void Programmteil(void)
{
  /* ...Befehle... */
}
 
int main(void)
{
  long a=.., b=..;
 
  if(a == 5)
  {
    if(b == 7)
    {
      Programmteil();
    }
  }
  else
  {
    if(b == 3)
    {
      Programmteil();
    }
  }
 
  return 0;
}

C bietet für solche Abfragen Möglichkeiten, verschiedene Bedingungen zu verknüpfen.

Also gibt es logische UND- und logische ODER-Verknüpfungen: Wenn a == 5 UND b == 7 ODER b == 3 UND a == EGAL, dann… a == EGAL braucht man nicht abzufragen, schließlich ist es egal. Also lassen wir weg.

a == 5 UND b == 7 ODER b == 3

Werden wir uns nochmals über die Reihenfolge klar: a muss 5 sein UND b muss 7 sein, dann wird der Programmteil ausgeführt. Und wenn b gleich 3 ist, wird das Programm auch ausgeführt. Unsere Bedingung soll NICHT lauten, wenn a gleich 5 ist und b gleich 7 oder 3. Wir müssen also Prioritäten setzen. Das machen wir mit runden Klammern: ( a == 5 UND b == 7 ) ODER (b == 3) Somit wird das UND vorrangig vor dem ODER behandelt. Man kann Entscheidungen treffen, da die Bedingungen klar definiert sind. Übrigens ganz im Gegensatz zur deutschen Sprache, wo derartige Klammersetzung nicht möglich ist und man sich gelegentlich schwer tut, derartige Bedingungen korrekt auszudrücken. Beim Programmieren müssen wir das sehr genau formulieren. Für UND existiert in C der Operator '&&', für ODER existiert '||'. Die Bedingung in C ergibt folgenden Ausdruck:

( a == 5 && b == 7) || (b == 3)

Das ist die Bedingung, die if versteht. Im Sourcecode würde das dann so aussehen:

if( ( a == 5 && b == 7) || (b == 3) )

Das ganze Programm mal im Vergleich:

Alt Neu
void Programmteil(void)  
{
  /* ...Befehle... */
}
 
int main(void)
{
  long a=.., b=..;
  if(a == 5)
  {
    if(b == 7)
    {
      Programmteil();
    }
  }
  else
  {
    if(b == 3)
    {
      Programmteil();
    }
  }
 
  return 0;
}
Programmteil wird nur einmal
benutzt, eine eigene Prozedur
ist damit nicht nötig.
int main(void)
{
  long a=.., b=..;
 
  if( (a==5 && b==7) || (b==3) )
  {
    /* ...Befehle... */
  }
 
  return 0;
}

Macht vieles einfacher und kürzer :)


Diskussionsthread