Jump to content

Display a linear combination: Difference between revisions

Add Cowgol
(Add APL)
(Add Cowgol)
Line 715:
[-1, -2, 0, -3] -> -e(1) - 2*e(2) - 3*e(4)
[-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}}==
2,114

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.