EMZETT.
Login

Kurz: procedure Main is Grenze : constant := 50; Prim : array (2 .. Grenze) of Boolean := (others => True); begin for I in 2 .. Grenze loop if Prim (I) then for J in I * I .. Grenze loop if J mod I = 0 then Prim (J) := False; end if.

Teil des Kurses Ada

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

Primzahlsieb

with Ada.Text_IO; use Ada.Text_IO;
 
procedure Main is
   Grenze : constant := 50;
   Prim : array (2 .. Grenze) of Boolean := (others => True);
begin
   for I in 2 .. Grenze loop
      if Prim (I) then
         for J in I * I .. Grenze loop
            if J mod I = 0 then
               Prim (J) := False;
            end if;
         end loop;
      end if;
   end loop;
   for I in Prim'Range loop
      if Prim (I) then
         Put (Integer'Image (I));
      end if;
   end loop;
   New_Line;
end Main;

Ausgabe:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

Caesar-Verschlüsselung

with Ada.Text_IO; use Ada.Text_IO;
 
procedure Main is
   function Verschiebe (Text : String; Schluessel : Integer) return String is
      Ergebnis : String := Text;
   begin
      for I in Text'Range loop
         case Text (I) is
            when 'A' .. 'Z' =>
               Ergebnis (I) := Character'Val ((Character'Pos (Text (I)) - 65 + Schluessel) mod 26 + 65);
            when 'a' .. 'z' =>
               Ergebnis (I) := Character'Val ((Character'Pos (Text (I)) - 97 + Schluessel) mod 26 + 97);
            when others => null;
         end case;
      end loop;
      return Ergebnis;
   end Verschiebe;
 
   Geheim : constant String := Verschiebe ("Hallo Ada!", 3);
begin
   Put_Line (Geheim);
   Put_Line (Verschiebe (Geheim, -3));
end Main;

Ausgabe:

Kdoor Dgd!
Hallo Ada!

Stapel als generisches Paket

with Ada.Text_IO; use Ada.Text_IO;
 
procedure Main is
 
   generic
      type Element is private;
      Kapazitaet : Positive;
   package Stapel is
      procedure Push (X : Element);
      function Pop return Element;
      function Leer return Boolean;
   end Stapel;
 
   package body Stapel is
      Daten : array (1 .. Kapazitaet) of Element;
      Oben  : Natural := 0;
      procedure Push (X : Element) is
      begin
         Oben := Oben + 1;
         Daten (Oben) := X;
      end Push;
      function Pop return Element is
      begin
         Oben := Oben - 1;
         return Daten (Oben + 1);
      end Pop;
      function Leer return Boolean is (Oben = 0);
   end Stapel;
 
   package Int_Stapel is new Stapel (Integer, 10);
begin
   for I in 1 .. 4 loop
      Int_Stapel.Push (I * I);
   end loop;
   while not Int_Stapel.Leer loop
      Put (Integer'Image (Int_Stapel.Pop));
   end loop;
   New_Line;
end Main;

Ausgabe:

16 9 4 1

Rechner mit Ausnahmen

with Ada.Text_IO; use Ada.Text_IO;
 
procedure Main is
   Syntax_Fehler : exception;
 
   function Rechne (A : Integer; Op : Character; B : Integer) return Integer is
   begin
      case Op is
         when '+' => return A + B;
         when '-' => return A - B;
         when '*' => return A * B;
         when '/' => return A / B;
         when others => raise Syntax_Fehler;
      end case;
   end Rechne;
 
   procedure Zeige (A : Integer; Op : Character; B : Integer) is
   begin
      Put_Line (Integer'Image (A) & " " & Op & Integer'Image (B) & " =" & Integer'Image (Rechne (A, Op, B)));
   exception
      when Constraint_Error => Put_Line ("Division durch null");
      when Syntax_Fehler    => Put_Line ("Unbekannter Operator " & Op);
   end Zeige;
begin
   Zeige (6, '*', 7);
   Zeige (9, '-', 12);
   Zeige (1, '/', 0);
   Zeige (1, '%', 2);
end Main;

Ausgabe:

6 * 7 = 42
 9 - 12 =-3
Division durch null
Unbekannter Operator %

Merke

  • Ada eignet sich für klare, nachvollziehbare Algorithmen mit Laufzeitprüfungen
  • Generische Pakete kapseln wiederverwendbare Datenstrukturen
  • Ausnahmen behandeln Sonderfälle lokal im Unterprogramm
  • Character'Pos und Character'Val wandeln zwischen Zeichen und Codes

Übungsaufgabe

Erweitere den Rechner um Potenzen und Modulo.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Container, Dateien und Zeit

Weiter: Referenz und Spickzettel

Alle Kapitel: Ada im Überblick