Display a linear combination: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add APL) |
Not a robot (talk | contribs) (Add Cowgol) |
||
Line 715: | Line 715: | ||
[-1, -2, 0, -3] -> -e(1) - 2*e(2) - 3*e(4) |
[-1, -2, 0, -3] -> -e(1) - 2*e(2) - 3*e(4) |
||
[-1] -> -e(1)</pre> |
[-1] -> -e(1)</pre> |
||
=={{header|Cowgol}}== |
|||
<syntaxhighlight lang="cowgol">include "cowgol.coh"; |
|||
sub abs(n: int32): (r: uint32) is |
|||
if n < 0 |
|||
then r := (-n) as uint32; |
|||
else r := n as uint32; |
|||
end if; |
|||
end sub; |
|||
sub lincomb(scalar: [int32], size: intptr) is |
|||
var first: uint8 := 1; |
|||
var item: uint8 := 1; |
|||
sub print_sign() is |
|||
if first == 1 then |
|||
if [scalar] < 0 then print("-"); end if; |
|||
else |
|||
if [scalar] < 0 |
|||
then print(" - "); |
|||
else print(" + "); |
|||
end if; |
|||
end if; |
|||
end sub; |
|||
sub print_term() is |
|||
if [scalar] == 0 then return; end if; |
|||
print_sign(); |
|||
if abs([scalar]) > 1 then |
|||
print_i32(abs([scalar])); |
|||
print("*"); |
|||
end if; |
|||
print("e("); |
|||
print_i8(item); |
|||
print(")"); |
|||
first := 0; |
|||
end sub; |
|||
while size > 0 loop |
|||
print_term(); |
|||
scalar := @next scalar; |
|||
size := size - 1; |
|||
item := item + 1; |
|||
end loop; |
|||
if first == 1 then |
|||
print("0"); |
|||
end if; |
|||
print_nl(); |
|||
end sub; |
|||
var a1: int32[] := {1, 2, 3}; lincomb(&a1[0], @sizeof a1); |
|||
var a2: int32[] := {0, 1, 2, 3}; lincomb(&a2[0], @sizeof a2); |
|||
var a3: int32[] := {1, 0, 3, 4}; lincomb(&a3[0], @sizeof a3); |
|||
var a4: int32[] := {1, 2, 0}; lincomb(&a4[0], @sizeof a4); |
|||
var a5: int32[] := {0, 0, 0}; lincomb(&a5[0], @sizeof a5); |
|||
var a6: int32[] := {0}; lincomb(&a6[0], @sizeof a6); |
|||
var a7: int32[] := {1, 1, 1}; lincomb(&a7[0], @sizeof a7); |
|||
var a8: int32[] := {-1, -1, -1}; lincomb(&a8[0], @sizeof a8); |
|||
var a9: int32[] := {-1, -2, 0, 3}; lincomb(&a9[0], @sizeof a9); |
|||
var a10: int32[] := {-1}; lincomb(&a10[0], @sizeof a10);</syntaxhighlight> |
|||
{{out}} |
|||
<pre>e(1) + 2*e(2) + 3*e(3) |
|||
e(2) + 2*e(3) + 3*e(4) |
|||
e(1) + 3*e(3) + 4*e(4) |
|||
e(1) + 2*e(2) |
|||
0 |
|||
0 |
|||
e(1) + e(2) + e(3) |
|||
-e(1) - e(2) - e(3) |
|||
-e(1) - 2*e(2) + 3*e(4) |
|||
-e(1)</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |