Was ist Ada?
Ada (benannt nach Ada Lovelace) wurde in den 1980ern im Auftrag des US-Verteidigungsministeriums entwickelt; der aktuelle Standard ist Ada 2022. Ada ist auf Zuverlässigkeit ausgelegt: starke Typisierung, Prüfungen zur Laufzeit, eingebaute Nebenläufigkeit (Tasks) und Verträge (Vor-/Nachbedingungen). Eingesetzt wird Ada im Airbus und in der Boeing-777-Flugsoftware, in Zügen und Metros (z. B. Pariser Metro-Linie 14), in Satelliten und im Flugverkehr. Die Teilmenge SPARK erlaubt sogar mathematische Beweise der Fehlerfreiheit.
Dieser Kurs nutzt GNAT, den GCC-Ada-Compiler.
Ausführen
gnatmake main.adb # übersetzen und binden, erzeugt ./main
./main
gnatmake -gnat2022 -gnata main.adb # Ada 2022 und Zusicherungen
gprbuild -P projekt.gpr # Projektdatei
alr init --bin demo # Alire: Paketmanager für AdaDie Quelldatei heißt wie das Hauptprogramm (main.adb → procedure Main).
Das erste Programm
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
Put_Line ("Hallo, Welt!");
Put ("ohne Zeilenumbruch");
New_Line;
Put_Line ("1 + 2 =" & Integer'Image (1 + 2));
end Main;Hallo, Welt! ohne Zeilenumbruch 1 + 2 = 3
with macht ein Paket verfügbar, use erlaubt kurze Namen. Ada unterscheidet nicht zwischen Groß- und Kleinschreibung. Anweisungen enden mit ;, Text steht in doppelten Anführungszeichen, & verkettet.
Variablen und Typen
Deklarationen stehen vor begin:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
procedure Main is
Alter : Integer := 17;
Preis : Float := 9.99;
Name : String := "Mia";
Ok : Boolean := True;
Zeichen : Character := 'z';
Gross : Long_Long_Integer := 9_000_000_000;
Pi_Wert : constant Float := 3.14159;
begin
Put_Line (Name & " ist" & Integer'Image (Alter) & " Jahre alt");
Put (Preis, Fore => 1, Aft => 2, Exp => 0);
New_Line;
Put_Line (Boolean'Image (Ok) & " " & Character'Image (Zeichen));
Put_Line (Long_Long_Integer'Image (Gross));
Put_Line (Float'Image (Pi_Wert));
Put_Line (Integer'Image (Integer'First) & Integer'Image (Integer'Last));
end Main;Mia ist 17 Jahre alt 9.99 TRUE 'z' 9000000000 3.14159E+00 -2147483648 2147483647
Zahlen formatiert ausgeben
Für Ganzzahlen und Fließkommazahlen gibt es eigene Pakete:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
procedure Main is
X : Float := 10.0 / 3.0;
begin
Put (42, Width => 6); New_Line;
Put (X, Fore => 2, Aft => 3, Exp => 0); New_Line;
Put (7 / 2); New_Line;
Put (7 mod 3); New_Line;
Put (-7 rem 3); New_Line;
Put (2 ** 10); New_Line;
Put (abs (-5)); New_Line;
Put (Float (7) / 2.0, Fore => 1, Aft => 1, Exp => 0); New_Line;
Put (Integer (3.6)); New_Line;
Put (Integer'Max (3, 9)); New_Line;
end Main;42
3.333
3
1
-1
1024
5
3.5
4
9Typumwandlungen sind in Ada immer explizit: Float (7), Integer (3.6) (rundet).
So führst du den Code aus: Datei main.adb speichern, mit gnatmake main.adb übersetzen und ./main starten (GNAT, Teil der GCC-Compiler-Suite; Dateiname muss zum Hauptprogramm passen).
Merke
withbindet Pakete ein;procedure Main is ... begin ... end Main;ist das Grundgerüst- Ada ist nicht case-sensitiv, aber streng typisiert; Umwandlungen sind explizit
Put_Line,Put,New_Linestammen ausAda.Text_IO; Zahlen brauchenAda.Integer_Text_IO/Ada.Float_Text_IO- Attribute wie
Integer'Image,Integer'First,Integer'Lastliefern Informationen zu Typen
Aufgabe
Berechne die Fläche eines Kreises mit Radius 2,5 und gib sie auf zwei Nachkommastellen aus.