1. with Ada.Text_IO;           use Ada.Text_IO; 
  2. with HTML; 
  3. with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; 
  4. package body Mathematics is 
  5.  
  6.    function Factorial (Value : Integer) return Integer is 
  7.       Return_Value : Integer := 1; 
  8.       Factor       : Integer := Value; 
  9.    begin 
  10.       if Value = 1 or Value = 0 then 
  11.          return 1; 
  12.       else 
  13.          loop 
  14.             Return_Value := Return_Value * Factor; 
  15.             Factor       := Factor - 1; 
  16.             exit when Factor = 0; 
  17.          end loop; 
  18.          return Return_Value; 
  19.       end if; 
  20.    end Factorial; 
  21.  
  22.    function N_over_K (n : Integer; k : Integer) return Integer is 
  23.       top : Integer := 1; 
  24.    begin 
  25.       if k > n then 
  26.          return 0; 
  27.       end if; 
  28.  
  29.       if k = 0 or n = k then 
  30.          return 1; 
  31.       else 
  32.          for j in 1 .. k loop 
  33.             top := top * (n + 1 - j); 
  34.          end loop; 
  35.  
  36.          return (top / Factorial (k)); 
  37.       end if; 
  38.    end N_over_K; 
  39.  
  40.    procedure Create_Pascal_Triangle (Height : Integer := 12; File_Name : String := "pascal_triangle.html") is 
  41.       Out_File : File_Type; 
  42.  
  43.       HTML_Contens : Unbounded_String := Null_Unbounded_String; 
  44.       Lines        : Unbounded_String := Null_Unbounded_String; 
  45.       Item_List    : Unbounded_String := Null_Unbounded_String; 
  46.  
  47.    begin 
  48.       Put_Line ("begin Create_Pascal_Triangle."); 
  49.       Create (File => Out_File, Name => File_Name); 
  50.  
  51.       HTML_Contens := HTML.Table (Lines); 
  52.  
  53.       Put_Line (Out_File, To_String(HTML.HTML_Document (Body_Contens => HTML_Contens))); 
  54.       Put_Line ("end   Create_Pascal_Triangle."); 
  55.    end Create_Pascal_Triangle; 
  56.  
  57.    procedure Create_Factorial_Table (Height : Integer := 12; File_Name : String := "factorial_table.html") is 
  58.  
  59.       Out_File     : File_Type; 
  60.  
  61.       HTML_Contens : Unbounded_String := Null_Unbounded_String; 
  62.       Lines        : Unbounded_String := Null_Unbounded_String; 
  63.       Item_List    : Unbounded_String := Null_Unbounded_String; 
  64.  
  65.    begin 
  66.       Put_Line ("begin Create_Create_Factorial_Table."); 
  67.       Create (File => Out_File, Name => File_Name); 
  68.  
  69.       Item_List := HTML.Item ("n") & HTML.Item ("n!"); 
  70.       Lines := Lines & HTML.Line(Item_List); 
  71.  
  72.  
  73.       for n in 0..12 
  74.       loop 
  75.          Item_List :=  HTML.Item ( integer'image(n)) & HTML.Item ( integer'image(Factorial(n))); 
  76.          Lines := Lines & HTML.Line(Item_List); 
  77.       end loop; 
  78.  
  79.       HTML_Contens := HTML.Table (Lines); 
  80.       Put_Line (Out_File, To_String(HTML.HTML_Document (Body_Contens => HTML_Contens))); 
  81.  
  82.       Put_Line ("end   Create_Create_Factorial_Table."); 
  83.    end Create_Factorial_Table; 
  84.  
  85. end Mathematics;