5. Sprachelemente / Operatoren
   
zu 5.12 Qualifizierte Ausdrücke


-- Im Mathematikunterricht heisst es immer, man solle nicht Aepfel mit
-- Birnen vergleichen, deshalb hier mal ein kleines Programm...

procedure Aepfel_und_Birnen is

   type Aepfel is new Integer;
   type Birnen is new Integer;
   Anzahl_Aepfel : Aepfel;
   Anzahl_Birnen : Birnen;
   Nachbars_Aepfel : Aepfel;
   Nachbars_Birnen : Birnen;

   procedure Kaufe (Anzahl : Aepfel) is
   begin
      Anzahl_Aepfel := Anzahl_Aepfel + Anzahl;
   end;

   procedure Kaufe (Anzahl : Birnen) is
   begin
      Anzahl_Birnen := Anzahl_Birnen + Anzahl;
   end;

   procedure Iss (Anzahl : Aepfel) is
   begin
      Anzahl_Aepfel := Anzahl_Aepfel - Anzahl;
   end;

   procedure Iss (Anzahl : Birnen) is
   begin
      Anzahl_Birnen := Anzahl_Birnen - Anzahl;
   end;

begin

   -- Bestandsaufnahme:
   Anzahl_Aepfel := 2;
   Anzahl_Birnen := 10;

   -- ... und noch eben ueber'n Zaun schauen:
   Nachbars_Aepfel := 5;
   Nachbars_Birnen := 2;

   -- Kaufe (5);
   -- Geht nicht, man geht ja auch nicht einfach in's Geschaeft und sagt:
   -- "Ich haette gerne fuenf."
   -- Es muss angegeben werden, wovon man fuenf haben moechte, die Zahl
   -- muss qualifiziert werden.
   Kaufe (Aepfel'(5));

   -- Iss (2);
   -- Das gleiche gilt natuerlich auch fuer zu essende Birnen.
   Iss (Birnen'(2));

   -- if Anzahl_Aepfel > Anzahl_Birnen then
   --    Iss (Anzahl_Aepfel);
   -- else
   --    Iss (Anzahl_Birnen);
   -- end if;
   -- Ein Vergleich von Aepfeln und Birnen ist nicht moeglich, hier waere es
   -- sinnvoll auf der gemeinsamen Ebene von Aepfeln und Birnen, dem Typ
   -- Integer, zu vergleichen. Hierzu muessen beide Werte konvertiert werden.
   if Integer (Anzahl_Aepfel) > Integer (Anzahl_Birnen) then
      Iss (Anzahl_Aepfel);
   else
      Iss (Anzahl_Birnen);
   end if;

   -- Anzahl_Aepfel := Anzahl_Birnen;
   -- Eine Zuweisung von Birnen an Aepfel ist nicht moeglich, man steckt ja
   -- auch keine Birnen in einen Karton, auf dem Aepfel abgebildet sind.
   -- Die Birnen muessen erst in Aepfel umgewandelt, also konvertiert werden.
   Anzahl_Aepfel := Aepfel (Anzahl_Birnen);

   -- Kein Problem bekommt man hingegen, wenn man Nachbars Aepfel kaufen
   -- will, da ja somit schon bekannt ist, dass es sich um Aepfel handelt.
   Kaufe (Nachbars_Aepfel);

   -- Das Essen von Nachbars Birnen, ohne sie vorher zu kaufen, sollte man
   -- trotzdem unterlassen, auch wenn es von der Zuweisung her keine
   -- Probleme geben sollte...
   Iss (Nachbars_Birnen);

   -- Das kann auch mit dem Essen der eigenen Birnen kombiniert werden,
   -- schliesslich sind ja Nachbars Birnen auch nur Birnen.
   Iss (Anzahl_Birnen + Nachbars_Birnen);

end;


 

zurück Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.