Kurz: 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.
Teil des Kurses Ada
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;Ausgabe:
Hallo, Welt!
ohne Zeilenumbruch
1 + 2 = 3with 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;Ausgabe:
Mia ist 17 Jahre alt
9.99
TRUE 'z'
9000000000
3.14159E+00
-2147483648 2147483647Zahlen 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;Ausgabe:
42
3.333
3
1
-1
1024
5
3.5
4
9Typumwandlungen sind in Ada immer explizit: Float (7), Integer (3.6) (rundet).
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
Übungsaufgabe
Berechne die Fläche eines Kreises mit Radius 2,5 und gib sie auf zwei Nachkommastellen aus.
Quiz zur Selbstkontrolle
Wie heißt die Quelldatei zum Hauptprogramm "Main"?
- main.adb (richtig)
- main.ada
- main.c
- hallo.adb
Wofür steht der Operator &?
- Verketten von Strings (richtig)
- Logisches Und
- Bitweises Und
- Adresse
Muss man in Ada Typen explizit umwandeln?
- Ja, immer (richtig)
- Nie
- Nur bei Strings
- Nur bei Zeigern
Weiter im Kurs
Weiter: Kontrollfluss, Prozeduren und Funktionen
Alle Kapitel: Ada im Überblick