Lektion 11:

else dem richtigen if zuordnen

Sie erinnern sich noch an das schlecht eingerückte Programm?

Hier ist es noch einmal:

#include <iostream.h>
void main()
{
   const float LIMIT=80;
   float geschwindigkeit;
   cout<<"Bitte geben Sie die Geschwindigkeit ein: ";
   cin>>geschwindigkeit;
   if(geschwindigkeit>LIMIT)
      if(geschwindigkeit>LIMIT+30)
         cout<<"Zu schnell gefahren. Punkte in Flensburg!"<<endl;
   else
      cout<<"Nicht zu schnell gefahren."<<endl;
};

Wir wollen aber, daß es das tut, was es durch die Einrückung zu tun scheint. Dazu gibt es zwei Lösungen:

a) Block

#include <iostream.h>
void main()
{
   const float LIMIT=80;
   float geschwindigkeit;
   cout<<"Bitte geben Sie die Geschwindigkeit ein: ";
   cin>>geschwindigkeit;
   if(geschwindigkeit>LIMIT)
   {
      if(geschwindigkeit>LIMIT+30)
         cout<<"Zu schnell gefahren. Punkte in Flensburg!"<<endl;
   }
   else
      cout<<"Nicht zu schnell gefahren."<<endl;
};

Alles, was im Block steht, ist außerhalb des Blocks nicht sichtbar. Deswegen ist für das else das if im Block nicht sichtbar, und das else bezieht sich auf das richtige if.

 b) if abfackeln

#include <iostream.h>
void main()
{
   const float LIMIT=80;
   float geschwindigkeit;
   cout<<"Bitte geben Sie die Geschwindigkeit ein: ";
   cin>>geschwindigkeit;
   if(geschwindigkeit>LIMIT)
      if(geschwindigkeit>LIMIT+30)
         cout<<"Zu schnell gefahren. Punkte in Flensburg!"<<endl;
      else
         ;
   else
      cout<<"Nicht zu schnell gefahren."<<endl;
};

 Das ungebundene if wird einfach mit einem neu erzeugten aber leeren (leere Anweisung) else verheiratet, und das else bezieht sich auf das richtige if. Welche Version zu empfehlen ist, hängt ganz von den Umständen ab.

Einsendungen:

Muß man if grundsätzlich "abfackeln"?

Übung:

Wann hat der Februar 29 Tage?

Das ist der Fall, wenn die Jahreszahl durch 4 teilbar ist, aber wenn sie durch 100 teilbar ist, dann nicht, außer wenn sie durch 400 teilbar ist.

1995:   kein Schaltjahr
1996:   Schaltjahr
1900:   kein Schaltjahr
2000:   Schaltjahr

Schreiben Sie eine Funktion, die überprüft, ob ein bestimmtes Jahr ein Schaltjahr ist! Verwenden Sie zur Überprüfung der Teilbarkeit den Modulo-Operator!

bool istSchaltjahr(int jahr)
{
   // Bitte tragen Sie hier ihren Code ein
};

Einsendungen:

Lösungsvorschlag A
Lösungsvorschlag B
Wie rufe ich die Funktion richtig auf?


Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00