Logische Verknüpfungen

von: Ansgar Schiffler

zurück zu 'Die Programmiersprache C++'

 

Eine Anweisung soll nur dann ausgeführt werden, wenn der Wert der Variablen a nicht zwischen 0 und 100 liegt (incl. der Grenzen).

Die zugehörige  Bedingung lautet:

if ( a < 0 || a > 100)

Hierbei steht '||' für 'oder'. '&&' bedeutet 'und'. Die Anweisung wird also ausgeführt, wenn entweder der Wert von a kleiner als 0 ist oder der Wert von a größer als 100 ist.

Zur Erinnerung: 

Die Oder-Verknüpfung: Die Gesamtaussage ist wahr, wenn mindestens eine der Aussagen wahr ist.

Die UND-Verknüpfung: Die Gesamtaussage ist wahr, wenn alle Aussagen wahr sind.

Dies sind die zugehörigen Wertetabellen, wobei '1' für 'die Aussage ist wahr' steht und '0' bedeutet: 'die Aussage ist nicht wahr'

A B A || B   A B A && B
0 0 0 0 0 0
0 1 1 0 1 0
1 0 1 1 0 0
1 1 1 1 1 1

Die Bedingung    if ( a < 0 || a > 100)    lässt sich auch so darstellen:  if ( !(a >= 0 && a <= 100))

Hierbei steht das '!' für 'nicht'. Die Bedingung    a >= 0 && a <= 100 ist dann erfüllt, wenn der Wert von a größer oder gleich 0 ist und außerdem der Wert von a kleiner oder gleich 100 ist. Diese Bedingung ist also immer dann erfüllt, wenn der Wert von a zwischen 0 und 100 liegt (incl. der Grenzen). Wenn diese Aussage durch das '!' verneint wird, ist die Bedingung genau dann erfüllt, wenn der Wert von a nicht zwischen 0 und 100 liegt.

Die Regel 'UND' vor 'ODER'

Angenommen es soll eine Anweisung ausgeführt werden, wenn folgende beiden Bedingungen erfüllt sind: 

1. Es soll entweder der Wert von a kleiner als 0 sein oder der Wert von b kleiner als 0 sein.

2. Es soll der Wert von c größer als 100 sein.

Zunächst überlegen wir uns Werte, mit denen wir unserer Bedingung testen können. 

Wenn wir wählen a = -20, b = 50 und c = 200 wählen, muss die Bedingung erfüllt sein, denn es ist ja einer der beiden Werte a,b kleiner als 0 und der Wert von c ist größer als 100.

Dann sollten wir uns noch Testwerte überlegen, mit denen die Bedingung nicht erfüllt ist. Das könnten folgende Werte sein: a = -20, b = 50 und c = 50. Zwar ist die erste Bedingung erfüllt, da einer der beiden Werte a,b kleiner als 0 ist, aber die zweite Bedingung ist nicht erfüllt, weil der Wert von c nicht größer als 100 ist.

Sehen Sie sich bitte die folgende Bedingung an:

if ( a < 0 || b < 0 && c > 100 )

Testen Sie diese Bedingung nun mit obigen Werten. Die ersten Testwerte ergeben 'true' (Bedingung erfüllt), so wir es erwartet hatten. Aber die zweiten Testwerte ergeben ebenfalls 'true' (Bedingung erfüllt), was vielleicht zunächst überrascht. Hier erhalten Sie eine detailierte Begründung.

Testwerte: a = - 20 ; b = 50 ; c = 50

if ( a < 0 || b < 0 && c > 100 )

      true      false         false                 //die erste Aussage ist erfüllt, die anderen nicht.

                  false    &&    false        // es wird erst die UND-Verknüpfung ausgewertet

                          false                    // die Auswertung der UND-Verknüpfung ergibt 'false'

          true    ||     false                  // die beiden verbleibenden Aussagen werden verknüpft

              true  // damit die Gesamtaussage 'wahr' ist, muss nur eine der beiden Aussagen wahr sein.

Dies ist nicht das Ergebnis, das wir beabsichtigt haben. Wir wollten, dass zunächst geprüft wird, ob einer der beiden Zahlen a,b kleiner als 0 ist. Da aber die Regel 'UND' vor 'ODER' gilt, ist dies nicht geprüft worden. Wir möchten also, dass als erstes die ODER-Verknüpfung getestet wird. Hierzu müssen wir Klammern setzen. Die richtige Bedingung ist somit:

if ( ( a < 0 || b < 0 )  &&  c > 100 )

      true      false              false                 //die erste Aussage ist erfüllt, die anderen nicht.

          true  ||  false                  // die ersten beiden Aussagen werden mit 'oder' verknüpft

             true                  // die Auswertung der ODER-Verknüpfung ergibt 'true'

.             true         &&     false     // die beiden verbleibenden Aussagen werden verknüpft

.                          false  

// die Gesamtaussage ist  nicht 'wahr'(false), weil nicht  beiden Aussagen wahr sind.

Dieses Bespiel zeigte im Detail, dass Sie Klammern setzen müssen, wenn Sie möchten, dass zunächst eine ODER-Verknüpfung vorgenommen werden soll und dann erst das Ergebnis dieser ODER-Verknüpfung mit einer anderen Aussage UND-verknüpft werden soll.

zurück zu 'Die Programmiersprache C++'