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 to continue '); READLN(Dummy); WRITELN; WRITELN; END; UNTIL Operation = 'Q'; END.