68 lines
1.7 KiB
ObjectPascal
68 lines
1.7 KiB
ObjectPascal
program complexDemo(output);
|
||
|
||
const
|
||
{ I experienced some hiccups with -1.0 using GPC (GNU Pascal Compiler) }
|
||
negativeOne = -1.0;
|
||
|
||
type
|
||
line = string(80);
|
||
|
||
{ as per task requirements wrap arithmetic operations into separate functions }
|
||
function sum(protected x, y: complex): complex;
|
||
begin
|
||
sum := x + y
|
||
end;
|
||
|
||
function product(protected x, y: complex): complex;
|
||
begin
|
||
product := x * y
|
||
end;
|
||
|
||
function negative(protected x: complex): complex;
|
||
begin
|
||
negative := -x
|
||
end;
|
||
|
||
function inverse(protected x: complex): complex;
|
||
begin
|
||
inverse := x ** negativeOne
|
||
end;
|
||
|
||
{ only this function is not covered by Extended Pascal, ISO 10206 }
|
||
function conjugation(protected x: complex): complex;
|
||
begin
|
||
conjugation := cmplx(re(x), im(x) * negativeOne)
|
||
end;
|
||
|
||
{ --- test suite ------------------------------------------------------------- }
|
||
function asString(protected x: complex): line;
|
||
const
|
||
totalWidth = 5;
|
||
fractionDigits = 2;
|
||
var
|
||
result: line;
|
||
begin
|
||
writeStr(result, '(', re(x):totalWidth:fractionDigits, ', ',
|
||
im(x):totalWidth:fractionDigits, ')');
|
||
asString := result
|
||
end;
|
||
|
||
{ === MAIN =================================================================== }
|
||
var
|
||
x: complex;
|
||
{ for demonstration purposes: how to initialize complex variables }
|
||
y: complex value cmplx(1.0, 4.0);
|
||
z: complex value polar(exp(1.0), 3.14159265358979);
|
||
begin
|
||
x := cmplx(-3, 2);
|
||
|
||
writeLn(asString(x), ' + ', asString(y), ' = ', asString(sum(x, y)));
|
||
writeLn(asString(x), ' * ', asString(z), ' = ', asString(product(x, z)));
|
||
|
||
writeLn;
|
||
|
||
writeLn(' −', asString(z), ' = ', asString(negative(z)));
|
||
writeLn(' inverse(', asString(z), ') = ', asString(inverse(z)));
|
||
writeLn(' conjugation(', asString(y), ') = ', asString(conjugation(y)));
|
||
end.
|