Pascal matrix generation: Difference between revisions

Add CLU
(Added solution for Action!)
(Add CLU)
Line 1,588:
(1 4 10 20 35)
(1 5 15 35 70)</pre>
 
=={{header|CLU}}==
<lang clu>matrix = array[array[int]]
 
make_matrix = proc (gen: proctype (int,int,matrix) returns (int),
size: int) returns (matrix)
m: matrix := matrix$fill_copy(0, size, array[int]$fill(0, size, 0))
for y: int in int$from_to(0, size-1) do
for x: int in int$from_to(0, size-1) do
m[y][x] := gen(x,y,m)
end
end
return(m)
end make_matrix
 
lower = proc (x,y: int, m: matrix) returns (int)
if x>y then return(0)
elseif x=y | x=0 then return(1)
else return( m[y-1][x-1] + m[y-1][x] )
end
end lower
 
upper = proc (x,y: int, m: matrix) returns (int)
if x<y then return(0)
elseif x=y | y=0 then return(1)
else return( m[y-1][x-1] + m[y][x-1] )
end
end upper
 
symmetric = proc (x,y: int, m: matrix) returns (int)
if x=0 | y=0 then return(1)
else return(m[y][x-1] + m[y-1][x])
end
end symmetric
 
print_matrix = proc (s: stream, m: matrix, w: int)
for line: array[int] in matrix$elements(m) do
for item: int in array[int]$elements(line) do
stream$putright(s, int$unparse(item), w)
stream$putc(s, ' ')
end
stream$putl(s, "")
end
end print_matrix
 
start_up = proc ()
po: stream := stream$primary_output()
stream$putl(po, "Upper-triangular matrix:")
print_matrix(po, make_matrix(upper,5), 1)
stream$putl(po, "\nLower-triangular matrix:")
print_matrix(po, make_matrix(lower,5), 1)
stream$putl(po, "\nSymmetric matrix:")
print_matrix(po, make_matrix(symmetric,5), 2)
end start_up</lang>
{{out}}
<pre>Upper-triangular matrix:
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 matrix:
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 matrix:
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|Common Lisp}}==
2,114

edits