| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- PROGRAM Complex_Calc;
- (* Program to simulate a four-function complex calculator *)
- TYPE Complex = RECORD
- Rel, (* Real part *)
- Imag (* Imaginary part *) : REAL;
- END;
- VAR C1, C2, C3 : Complex;
- Correct : BOOLEAN;
- Operation, Dummy : CHAR;
- PROCEDURE Add_Complex(C1, C2 : Complex; (* input *)
- VAR Result : Complex (* output *));
- (* Procedure to add two complex numbers *)
- BEGIN
- Result.Rel := C1.Rel + C2.Rel;
- Result.Imag := C1.Imag + C2.Imag
- END;
- PROCEDURE Subt_Complex(C1, C2 : Complex; (* input *)
- VAR Result : Complex (* output *));
- (* Procedure to subtract two complex numbers *)
- BEGIN
- Result.Rel := C1.Rel - C2.Rel;
- Result.Imag := C1.Imag - C2.Imag
- END;
- PROCEDURE Mult_Complex(C1, C2 : Complex; (* input *)
- VAR Result : Complex (* output *));
- (* Procedure to multiply two complex numbers *)
- BEGIN
- Result.Rel := C1.Rel * C2.Rel - C1.Imag * C2.Imag;
- Result.Imag := C1.Rel * C2.Imag + C2.Rel * C1.Imag
- END;
- FUNCTION Div_Complex(C1, C2 : Complex; (* input *)
- VAR Result : Complex (* output *)) : BOOLEAN;
- (* Function to divide two complex numbers and return TRUE *)
- (* if operation is successful, FALSE for division by zero *)
- VAR OK : BOOLEAN;
- SumSqr : REAL;
- BEGIN
- IF (C2.Rel <> 0) OR (C2.Imag <> 0)
- THEN BEGIN
- OK := TRUE;
- SumSqr := SQR(C2.Rel) + SQR(C2.Imag);
- Result.Rel := (C1.Rel * C2.Rel + C1.Imag * C2.Imag)
- / SumSqr;
- Result.Imag := (C2.Rel * C1.Imag - C1.Rel * C2.Imag)
- / SumSqr
- END
- ELSE
- OK := FALSE;
- Div_Complex := OK;
- END;
- PROCEDURE Read_Complex(VAR C : Complex (* output *));
- (* Procedure to read complex number *)
- BEGIN
- WRITE('Enter real part '); READLN(C.Rel);
- WRITE('Enter imaginary part '); READLN(C.Imag);
- WRITELN;
- END;
- PROCEDURE Write_Complex(C : Complex (* input *));
- (* Procedure to output a complex number *)
- BEGIN
- WRITELN('Complex number = ',C.Rel,' + i ',C.Imag)
- END;
- BEGIN (*------------- MAIN --------------*)
- REPEAT
- ClrScr;
- WRITE('Enter operation [Q = quit] ');
- READLN(Operation); WRITELN;
- Operation := UpCase(Operation);
- IF Operation <> 'Q'
- THEN BEGIN
- WRITELN('Enter first complex number');
- Read_Complex(C1);
- WRITELN('Enter second complex number');
- Read_Complex(C2); WRITELN;
- Correct := TRUE;
- CASE Operation OF
- '+' : Add_Complex(C1, C2, C3);
- '-' : Subt_Complex(C1, C2, C3);
- '*' : Mult_Complex(C1, C2, C3);
- '/' : BEGIN
- Correct := Div_Complex(C1, C2, C3);
- IF NOT Correct
- THEN WRITELN('Divide by zero error ');
- END
- ELSE Add_Complex(C1, C2, C3);
- END;
- IF Correct THEN Write_Complex(C3);
- WRITELN; WRITELN;
- WRITE('Press <CR> to continue ');
- READLN(Dummy); WRITELN; WRITELN;
- END;
- UNTIL Operation = 'Q';
- END.
|