EMZETT.
Login

Kurz: 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)).

Teil des Kurses Ada

Kapitel 2 von 8 im Kurs Ada. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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;

Ausgabe:

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;

Ausgabe:

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;

Ausgabe:

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, while und loop ... exit when steuern den Ablauf
  • Prozeduren (kein Rückgabewert) und Funktionen (return) mit in, out, in out
  • and then/or else sind Kurzschluss-Operatoren
  • Benannte Parameter (Name => Wert) und Standardwerte erhöhen die Lesbarkeit

Übungsaufgabe

Schreibe eine Funktion Ist_Prim und gib alle Primzahlen bis 50 aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Einführung und erstes Programm

Weiter: Typen, Arrays und Records

Alle Kapitel: Ada im Überblick