summaryrefslogtreecommitdiff
path: root/hello/src/main.adb
blob: c9cb966a6d308e62d324c937417e22eac79c975e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
with Ada.Text_IO;         use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure main is

  function Factorial (N : Integer) return Integer is
    F : Integer := 1;
  begin
    for i in 2 .. N loop
      F := F * i;
    end loop;
    return F;
  end Factorial;

  function Fib (N : Integer) return Integer is
    F : array (0 .. N) of Integer;
  begin
    F (0) := 0;
    F (1) := 1;
    for I in F'First + 2 .. F'Last loop
      F (I) := F (I - 2) + F (I - 1);
    end loop;
    return F (N);
  end Fib;

  function Fib_Rec (N : Integer) return Integer is
  begin
    if N = 0 then
      return 0;
    elsif N = 1 then
      return 1;
    else
      return Fib_Rec (N - 1) + Fib_Rec (N - 2);
    end if;
  end Fib_Rec;

  procedure Greet_5 is
    counter : Integer := 1;
  begin
    Put_Line ("Greet_5");
    loop
      Put_Line ("Counter: " & Integer'Image (counter));
      exit when counter = 5;
      counter := counter + 1;
    end loop;
  end Greet_5;

  procedure Greet_With_While is
    counter : Integer := 1;
  begin
    Put_Line ("Greet_With_While");
    while counter <= 5 loop
      Put_Line ("Counter: " & Integer'Image (counter));
      counter := counter + 1;
    end loop;
  end Greet_With_While;

  procedure Swap (A, B : in out Integer) is
    Tmp : Integer;
  begin
    Tmp := A;
    A   := B;
    B   := Tmp;
  end Swap;

  procedure Guessing_Game is
    Answer : Integer := 47;
    Guess  : Integer;
  begin
    loop
      Put ("Enter a number: ");
      Get (Guess);
      if Guess < Answer then
        Put_Line ("Too low!");
      elsif Guess > Answer then
        Put_Line ("Too high!");
      else
        Put_Line ("Correct!");
        exit;
      end if;
    end loop;
  end Guessing_Game;

  N : Integer;
  X : Integer := 2;
  Y : Integer := 3;

begin
  Put ("Enter an integer value: ");
  Get (N);
  if N >= 0 then
    Put_Line ("Fib(" & Integer'Image (N) & ") = " & Integer'Image (Fib (N)));
    Put_Line
     ("Factorial(" & Integer'Image (N) & ") = " &
      Integer'Image (Factorial (N)));
  else
    Put_Line ("Please enter a non-negative integer");
  end if;

  Greet_5;
  Greet_With_While;

  Put_Line ("Swapping " & Integer'Image (X) & " and " & Integer'Image (Y));
  Swap (X, Y);
  Put_Line ("X = " & Integer'Image (X) & ", Y = " & Integer'Image (Y));

  Guessing_Game;
end main;