56 lines
1.5 KiB
Plaintext
56 lines
1.5 KiB
Plaintext
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
|