Pascal matrix generation: Difference between revisions

Added Ada implementation
(Add Factor example)
(Added Ada implementation)
Line 201:
1 5 15 35 70
</pre>
 
=={{header|Ada}}==
<lang ada>-- for I/O
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
 
-- for estimating the maximum width of a column
with Ada.Numerics.Generic_Elementary_Functions;
 
procedure PascalMatrix is
 
type Matrix is array (Positive range <>, Positive range <>) of Natural;
 
-- instantiate Generic_Elementary_Functions for Float type
package Math is new Ada.Numerics.Generic_Elementary_Functions(Float_Type => Float);
use Math;
procedure Print(m: in Matrix) is
-- determine the maximum width of a column
w: Float := Log(Float(m'Length(1)**(m'Length(1)/2)), 10.0);
width: Positive := Natural(Float'Ceiling(w)) + 1;
begin
for i in m'First(1)..m'Last(1) loop
Put("( ");
for j in m'First(2)..m'Last(2) loop
Put(m(i,j), width);
end loop;
Put(" )"); New_Line(1);
end loop;
end Print;
function Upper_Triangular(n: in Positive) return Matrix is
result: Matrix(1..n, 1..n) := (
1 => ( others => 1 ),
others => ( others => 0 )
);
begin
for i in 2..n loop
result(i,i) := 1;
for j in i+1..n loop
result(i,j) := result(i,j-1) + result(i-1,j-1);
end loop;
end loop;
return result;
end Upper_Triangular;
function Lower_Triangular(n: in Positive) return Matrix is
result: Matrix(1..n, 1..n) := (
others => ( 1 => 1, others => 0 )
);
begin
for i in 2..n loop
result(i,i) := 1;
for j in i+1..n loop
result(j,i) := result(j-1,i) + result(j-1,i-1);
end loop;
end loop;
return result;
end Lower_Triangular;
function Symmetric(n: in Positive) return Matrix is
result: Matrix(1..n, 1..n) := (
1 => ( others => 1 ),
others => ( 1 => 1, others => 0 )
);
begin
for i in 2..n loop
for j in 2..n loop
result(i,j) := result(i,j-1) + result(i-1,j);
end loop;
end loop;
return result;
end Symmetric;
n: Positive;
begin
Put("What dimension Pascal matrix would you like? ");
Get(n);
Put("Upper triangular:"); New_Line(1);
Print(Upper_Triangular(n));
Put("Lower triangular:"); New_Line(1);
Print(Lower_Triangular(n));
Put("Symmetric:"); New_Line(1);
Print(Symmetric(n));
end PascalMatrix;</lang>
{{out}}
<pre>What dimension Pascal matrix would you like? 5
Upper triangular:
( 1 1 1 1 1 )
( 0 1 2 3 4 )
( 0 0 1 3 6 )
( 0 0 0 1 4 )
( 0 0 0 0 1 )
Lower triangular:
( 1 0 0 0 0 )
( 1 1 0 0 0 )
( 1 2 1 0 0 )
( 1 3 3 1 0 )
( 1 4 6 4 1 )
Symmetric:
( 1 1 1 1 1 )
( 1 2 3 4 5 )
( 1 3 6 10 15 )
( 1 4 10 20 35 )
( 1 5 15 35 70 )</pre>
 
=={{header|ALGOL 68}}==
Anonymous user