Contributor: PAUL GRISWOLD
{
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}


AltStyle によって変換されたページ (->オリジナル) /