60 lines
1.8 KiB
Ada
60 lines
1.8 KiB
Ada
with Ada.Text_IO;
|
|
|
|
package body ComplexCalculator is
|
|
|
|
-- Adds two complex numbers
|
|
function Add(First, Second : ComplexNumber) return ComplexNumber is
|
|
Result : ComplexNumber;
|
|
|
|
begin
|
|
Result.Real := First.Real + Second.Real;
|
|
Result.Imaginary := First.Imaginary + Second.Imaginary;
|
|
return Result;
|
|
|
|
end Add;
|
|
|
|
-- Subtracts to complex Numbers
|
|
function Sub(First, Second : ComplexNumber) return ComplexNumber is
|
|
Result : ComplexNumber;
|
|
|
|
begin
|
|
Result.Real := First.Real - Second.Real;
|
|
Result.Imaginary := First.Imaginary - Second.Imaginary;
|
|
return Result;
|
|
|
|
end Sub;
|
|
|
|
-- Divides two complex numbers
|
|
function Divide(First, Second : ComplexNumber) return ComplexNumber is
|
|
Result : ComplexNumber;
|
|
Bottom : Integer; -- improved readability & writability due to it repeating
|
|
begin
|
|
Bottom := (First.Real ** 2) + (Second.Imaginary ** 2);
|
|
|
|
Result.Real := ((First.Real * Second.Real) + (First.Imaginary * Second.Imaginary)) / Bottom;
|
|
Result.Imaginary := ((First.Imaginary * Second.Real) - (First.Real * Second.Imaginary)) / Bottom;
|
|
return Result;
|
|
|
|
end Divide;
|
|
|
|
-- Multiply two complex numbers
|
|
function Multiply(First, Second : ComplexNumber) return ComplexNumber is
|
|
Result : ComplexNumber;
|
|
|
|
begin
|
|
Result.Real := (First.Real * Second.Real) - (First.Imaginary - Second.Imaginary);
|
|
Result.Imaginary := (First.Real * Second.Imaginary) + (First.Imaginary * Second.Real);
|
|
return Result;
|
|
|
|
end Multiply;
|
|
|
|
-- ToString method to return a formatted expression of the number.
|
|
function ToString(Number : ComplexNumber) return String is
|
|
begin
|
|
|
|
return Integer'Image(Number.Real) & " +" & Integer'Image(Number.Imaginary) & "i";
|
|
|
|
end ToString;
|
|
|
|
end ComplexCalculator;
|