[Back to MATH SWAG index] [Back to Main SWAG index] [Original]
{
I wrote the following program for an introductory computer science course.
It was written in Turbo Pascal, but I believe everything in it is standard,
so it should work fine with Think Pascal.
pgriswold@delphi.com
}
type
ComplexType = record {Complex number ADT}
RealPart : real; {Real portion of complex number}
ImaginaryPart : real; {Imaginary part of complex number}
end;
var
Complex1, {First complex number}
Complex2, {Second complex number}
Result : ComplexType; {Result of current operation}
procedure OutputNumber(ComplexNumber : ComplexType);
{ Displays complex number in a+bi format.
Pre Condition: ComplexNumber is defined;
Post Condition: Complex number is written to the screen in a+bi format
}
begin {OutputNumber}
writeln(ComplexNumber.RealPart:0:4,' + ',ComplexNumber.ImaginaryPart:0:4,
'i');
end; {OutputNumber}
function Magnitude(ComplexNumber : ComplexType) : real;
{ Determines the magnitude of a complex number.
Pre Condition: ComplexNumber is defined;
Post Condition: Magnitude of complex number is returned.
}
begin {Magnitude}
Magnitude :=
sqrt(sqr(ComplexNumber.RealPart)+sqr(ComplexNumber.ImaginaryPar
t));
end; {Magnitude}
procedure AddComplex(Complex1,Complex2 : ComplexType;
var Result : ComplexType);
{ Adds two complex numbers.
Pre Condition: Complex1 and Complex2 are defined;
Post Condition: Result contains the sum of Complex1 and Complex2
}
begin {AddComplex}
Result.RealPart := Complex1.RealPart + Complex2.RealPart;
Result.ImaginaryPart := Complex1.ImaginaryPart + Complex2.ImaginaryPart;
end; {AddComplex}
procedure MultiplyComplex(Complex1,Complex2 : ComplexType;
var Result : ComplexType);
{ Multiplies two complex numbers.
Pre Condition: Complex1 and Complex2 are defined;
Post Condition: Result contains the product of Complex1 and Complex2
}
begin {MultiplyComplex}
Result.RealPart := Complex1.RealPart * Complex2.RealPart -
Complex1.ImaginaryPart * Complex2.ImaginaryPart;
Result.ImaginaryPart := Complex1.Realpart * Complex2.ImaginaryPart +
Complex2.RealPart * Complex1.ImaginaryPart;
end; {MultiplyComplex}
procedure DivideComplex(Complex1, Complex2 : ComplexType;
var Result : ComplexType);
{ Divides two complex numbers.
Pre Condition: Complex1 and Complex2 are defined;
Post Condition: Result contains the quotient of Complex1 and Complex2
}
var tmp1, tmp2 : real; {temporary variables}
begin {DivideComplex}
Tmp1 := sqr(Complex2.RealPart) + sqr(Complex2.ImaginaryPart);
Tmp2 := (Complex1.RealPart * Complex2.RealPart +
Complex1.ImaginaryPart * Complex2.ImaginaryPart)/Tmp1;
Result.ImaginaryPart := (Complex1.ImaginaryPart * Complex2.RealPart +
Complex1.RealPart * Complex2.ImaginaryPart)/Tmp1;
Result.RealPart := tmp2;
end; {DivideComplex}
begin {driver}
write('Enter Real Part of a: ');
readln(Complex1.RealPart);
write('Enter Imaginary Part of a: ');
readln(Complex1.ImaginaryPart);
writeln;
write('Enter Real Part of b: ');
readln(Complex2.RealPart);
write('Enter Imaginary Part of b: ');
readln(Complex2.ImaginaryPart);
writeln;
AddComplex(Complex1,Complex2,Result);
write('Sum is ');
OutputNumber(Result);
MultiplyComplex(Complex1,Complex2,Result);
write('Product is ');
OutputNumber(Result);
DivideComplex(Complex1,Complex2,Result);
write('Quotient is ');
OutputNumber(Result);
writeln('Magnitude of a is ',Magnitude(Complex1):0:4);
writeln('Magnitude of b is ',Magnitude(Complex2):0:4);
end. {driver}
[Back to MATH SWAG index] [Back to Main SWAG index] [Original]