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'PosundCharacter'Valwandeln zwischen Zeichen und Codes
Aufgabe
Erweitere den Rechner um Potenzen und Modulo.