home *** CD-ROM | disk | FTP | other *** search
- {
- 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}