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