Browse files

Merge branch 'master' of github.com:ceemos/ada

  • Loading branch information...
2 parents 6e59f5c + bb5a359 commit e104c1144cc8c289a0df7b7a97892152321a61fe @ceemos committed Dec 6, 2011
Showing with 236 additions and 5 deletions.
  1. BIN ebnf-berg.pdf
  2. +147 −0 game_of_life.adb
  3. +57 −0 game_of_life_oszillierend.txt
  4. +25 −0 koerper2.adb
  5. +5 −3 res.adb
  6. +2 −2 springerproblem.adb
View
BIN ebnf-berg.pdf
Binary file not shown.
View
147 game_of_life.adb
@@ -0,0 +1,147 @@
+-- @File: game_of_life.adb
+--
+-- @Project: Programmieruebungen, Uebungsblatt 7
+-- @Version: 1
+-- @Created: 04. 12. 2011
+-- @Author: Marcel Schneider
+--
+-------------------------------------------------------------------------------
+--
+-- @Procedure: Game_of_Life
+--
+
+
+with Ada.Text_IO;
+with Ada.Integer_Text_IO;
+use Ada.Text_IO;
+with Ada.Numerics.Discrete_Random;
+
+with Ada.Containers.Vectors;
+
+procedure Game_of_Life is
+
+ type Platz is (Frei, Belegt);
+
+ -- Ermoeglicht automatisch die Torus-Form
+ type Index is mod 4;
+
+ type Pool is array (Index, Index) of Platz;
+
+ procedure Put (Feld : Pool) is
+ begin
+ for y in Index loop
+ for x in Index loop
+ case Feld (x, y) is
+ when Frei => Put (". ");
+ when Belegt => Put ("X ");
+ end case;
+ end loop;
+ New_Line;
+ end loop;
+ end Put;
+
+ package R is new Ada.Numerics.Discrete_Random (Platz);
+ -- G : R.Generator;
+ procedure Initiate (Feld : in out Pool) is
+ G : R.Generator;
+ begin
+ R.Reset (G);
+ for y in Index loop
+ for x in Index loop
+ Feld (x, y) := R.Random (G);
+ end loop;
+ end loop;
+ end Initiate;
+
+ function "+" (left : Integer; right : Platz) return Integer is
+ begin
+ case right is
+ when Frei => return left;
+ when Belegt => return left + 1;
+ end case;
+ end "+";
+
+ function Zaehle_Nachbarn (Feld : Pool; x, y : Index) return Natural is
+ begin
+ -- Felder rechts
+ return 0 + Feld (x + 1, y + 1)
+ + Feld (x + 1, y - 1)
+ + Feld (x + 1, y)
+ -- Felder links
+ + Feld (x - 1, y + 1)
+ + Feld (x - 1, y - 1)
+ + Feld (x - 1, y)
+ -- Oben + Unten
+ + Feld (x, y + 1)
+ + Feld (x, y - 1);
+ end Zaehle_Nachbarn;
+
+
+
+ procedure Next (Feld : in out Pool) is
+ Alter_Zustand : Pool := Feld;
+ Nachbarn : Natural;
+ begin
+ for y in Index loop
+ for x in Index loop
+ Nachbarn := Zaehle_Nachbarn (Alter_Zustand, x, y);
+ case Nachbarn is
+ when 0 => Feld (x, y) := Frei;
+ when 1 => null; -- keine Aenderung
+ when 2 => Feld (x, y) := Belegt;
+ when others => Feld (x, y) := Frei;
+ end case;
+ end loop;
+ end loop;
+ end Next;
+
+ package Pool_Vectors is new Ada.Containers.Vectors
+ (Element_Type => Pool,
+ Index_Type => Natural);
+ subtype Pools is Pool_Vectors.Vector;
+ use Ada.Containers;
+
+
+ Anzahl_Schritte : Natural;
+ Cycle_Start : Natural;
+ Geschichte : Pools;
+ Feld : Pool;
+begin
+ <<Anfang>>
+ Initiate (Feld);
+
+ Put_Line ("Startbelegung:");
+ Put (Feld);
+
+ loop
+ Geschichte.Append (Feld);
+ Next (Feld);
+ exit when Geschichte.Contains (Feld);
+ end loop;
+
+ Cycle_Start := Geschichte.Find_Index (Feld);
+
+ Put_Line ("Zyklus nach" & Natural'Image (Cycle_Start) & " Schritten.");
+
+ Anzahl_Schritte := Natural (Geschichte.Length) - Cycle_Start;
+
+ if Anzahl_Schritte = 1 then
+ Geschichte.Clear;
+ goto Anfang;
+ end if;
+
+ Put_Line ("Zykluslaenge:" & Natural'Image (Anzahl_Schritte) & " Schritte");
+
+-- Put_Line ("Wie viele Folgebelegungen sollen berechnet werden?");
+-- Ada.Integer_Text_IO.Get (Anzahl_Schritte);
+
+ for I in 1 .. Anzahl_Schritte loop
+ Put_Line (Natural'Image (I) & ". Folgebelegung:");
+ Next (Feld);
+ Put (Feld);
+ New_Line;
+ end loop;
+end Game_of_Life;
+
+-- kate: indent-width 3; indent-mode normal; dynamic-word-wrap on;
+-- kate: line-numbers on; space-indent on; mixed-indent off;
View
57 game_of_life_oszillierend.txt
@@ -0,0 +1,57 @@
+...
+X . X X
+X X X X
+. . . .
+Zyklus nach 3 Schritten.
+Startbelegung:
+X X X .
+. . . .
+. . . .
+X X X .
+Zyklus nach 0 Schritten.
+Zykluslaenge: 2 Schritte
+ 1. Folgebelegung:
+. . . .
+X . X X
+X . X X
+. . . .
+
+ 2. Folgebelegung:
+X X X .
+. . . .
+. . . .
+X X X .
+
+
+real 0m34.743s
+user 0m7.554s
+sys 0m13.497s
+Press any key to continue.
+
+
+
+Startbelegung:
+. . . .
+X X . .
+X X X .
+. X . X
+Zyklus nach 2 Schritten.
+Zykluslaenge: 2 Schritte
+ 1. Folgebelegung:
+. . . .
+X X X .
+X X X .
+. . . .
+
+ 2. Folgebelegung:
+X . X X
+. . . .
+. . . .
+X . X X
+
+
+real 0m21.918s
+user 0m4.515s
+sys 0m8.986s
+Press any key to continue.
+
View
25 koerper2.adb
@@ -31,6 +31,13 @@ procedure Koerper2 is
end case;
end record;
+ -- @Procedure: Put
+ --
+ -- Gibt die Daten eines Koerpers aus.
+ --
+ -- @Parameter:
+ -- + k: der Koerper.
+ --
procedure Put (k : Koerper) is
begin
case k.Typ is
@@ -51,6 +58,15 @@ procedure Koerper2 is
end case;
end Put;
+ -- @Function: Koerper_Volumen
+ --
+ -- Berechnet des Volumen eines Koerpers
+ --
+ -- @Parameter:
+ -- + k: der Koerper.
+ --
+ -- @Return: Das Volumen des Koerpers.
+ --
function Koerper_Volumen (k : Koerper) return Mass is
begin
case k.Typ is
@@ -68,6 +84,15 @@ procedure Koerper2 is
end case;
end Koerper_Volumen;
+ -- @Function: Koerper_Oberflaeche
+ --
+ -- Berechner die Oberflaeche eines Koerpers.
+ --
+ -- @Parameter:
+ -- + k: der Koerper.
+ --
+ -- @Return: Die Oberflaeche des Koerpers.
+ --
function Koerper_Oberflaeche (k : Koerper) return Mass is
begin
case k.Typ is
View
8 res.adb
@@ -231,6 +231,8 @@ procedure Res is
return;
end if;
if not moeglich then
+ -- Put ("Try: ");
+ -- Put (f_neu);
moeglich := LinRes (f_neu, r);
if moeglich then
-- Put ("Weg: ");
@@ -285,7 +287,7 @@ procedure Res is
subtype alphas is Integer range 1 .. 8;
package Rand_Alpha is new Ada.Numerics.Discrete_Random (alphas);
seed : Rand_Alpha.Generator;
- literale : String := "abABcdCDeE";
+ literale : String := "aAbBcCdDeEfF";
function Zufaellige_Klausel (len : Index) return Klausel is
k : Klausel;
@@ -377,8 +379,8 @@ begin
end if;
else
erfuellbare := erfuellbare + 1;
- Put_Line ("unerfuellbare:" & Integer'Image (unerfuellbare)
- & " erfuellbare:" & Integer'Image (erfuellbare));
+-- Put_Line ("unerfuellbare:" & Integer'Image (unerfuellbare)
+-- & " erfuellbare:" & Integer'Image (erfuellbare));
end if;
end loop;
View
4 springerproblem.adb
@@ -1,6 +1,6 @@
-- @File: springerproblem.adb
--
--- @Project: Programmieruebungen, Uebungsblatt 1
+-- @Project: Programmieruebungen, Uebungsblatt 6
-- @Version: 1
-- @Created: 27. 11. 2011
-- @Author: Marcel Schneider
@@ -41,7 +41,7 @@ procedure Springerproblem is
-- @Procedure: Bearbeite_Feld
--
- -- Treagt ggf. die neue Anzahl Schritte in Schachbrett ein und fuerht
+ -- Traegt ggf. die neue Anzahl Schritte in Schachbrett ein und fuehrt
-- die Rekursion durch, igonoriert Felder ausserhalb.
--
-- @Parameter:

0 comments on commit e104c11

Please sign in to comment.