Bedingungen
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
N : Integer := 15;
Note : Integer := 2;
begin
if N mod 15 = 0 then
Put_Line ("FizzBuzz");
elsif N mod 3 = 0 then
Put_Line ("Fizz");
elsif N mod 5 = 0 then
Put_Line ("Buzz");
else
Put_Line (Integer'Image (N));
end if;
case Note is
when 1 => Put_Line ("sehr gut");
when 2 | 3 => Put_Line ("gut bis befriedigend");
when 4 .. 5 => Put_Line ("ausreichend bis mangelhaft");
when others => Put_Line ("ungültig");
end case;
if N > 10 and then N < 20 then
Put_Line ("zwischen 10 und 20");
end if;
Put_Line (Boolean'Image (N = 15 or N = 16));
Put_Line (Boolean'Image (not (N > 3)));
Put_Line (Boolean'Image ((N > 3) xor (N > 20)));
end Main;FizzBuzz gut bis befriedigend zwischen 10 und 20 TRUE FALSE TRUE
and then und or else sind Kurzschluss-Operatoren. Wer and und or mischt, braucht Klammern.
Schleifen
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
I : Integer := 0;
begin
for K in 1 .. 5 loop
Put (Integer'Image (K));
end loop;
New_Line;
for K in reverse 1 .. 5 loop
Put (Integer'Image (K));
end loop;
New_Line;
while I < 3 loop
Put ("w" & Integer'Image (I));
I := I + 1;
end loop;
New_Line;
loop
I := I + 1;
exit when I > 6;
Put (Integer'Image (I));
end loop;
New_Line;
for K in 1 .. 10 loop
if K mod 2 = 0 then
goto Weiter;
end if;
exit when K > 7;
Put (Integer'Image (K));
<<Weiter>> null;
end loop;
New_Line;
Aussen:
for Z in 1 .. 3 loop
for S in 1 .. 3 loop
exit Aussen when Z * S = 4;
Put (Integer'Image (Z * S));
end loop;
end loop Aussen;
New_Line;
end Main;1 2 3 4 5 5 4 3 2 1 w 0w 1w 2 4 5 6 1 3 5 7 1 2 3 2
Die Laufvariable einer for-Schleife ist automatisch deklariert und schreibgeschützt.
Prozeduren und Funktionen
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
function Quadrat (X : Integer) return Integer is
begin
return X * X;
end Quadrat;
function Fakultaet (N : Natural) return Long_Long_Integer is
begin
if N <= 1 then
return 1;
else
return Long_Long_Integer (N) * Fakultaet (N - 1);
end if;
end Fakultaet;
procedure Begruesse (Name : String; Gruss : String := "Hallo") is
begin
Put_Line (Gruss & ", " & Name & "!");
end Begruesse;
procedure Tausche (A, B : in out Integer) is
Tmp : constant Integer := A;
begin
A := B;
B := Tmp;
end Tausche;
procedure Teile (A, B : Integer; Quotient, Rest : out Integer) is
begin
Quotient := A / B;
Rest := A mod B;
end Teile;
X : Integer := 1;
Y : Integer := 2;
Q, R : Integer;
begin
Put_Line (Integer'Image (Quadrat (7)));
Put_Line (Long_Long_Integer'Image (Fakultaet (15)));
Begruesse ("Mia");
Begruesse (Name => "Tom", Gruss => "Servus");
Tausche (X, Y);
Put_Line (Integer'Image (X) & Integer'Image (Y));
Teile (17, 5, Q, R);
Put_Line (Integer'Image (Q) & Integer'Image (R));
end Main;49 1307674368000 Hallo, Mia! Servus, Tom! 2 1 3 2
Parameter-Modi: in (Standard, nur lesen), out (nur schreiben), in out (lesen und schreiben). Aufrufe können Parameter per Namen übergeben (Name => ...).
Merke
if/elsif/else,case,for,whileundloop ... exit whensteuern den Ablauf- Prozeduren (kein Rückgabewert) und Funktionen (
return) mitin,out,in out and then/or elsesind Kurzschluss-Operatoren- Benannte Parameter (
Name => Wert) und Standardwerte erhöhen die Lesbarkeit
Aufgabe
Schreibe eine Funktion Ist_Prim und gib alle Primzahlen bis 50 aus.