P_46_E14-Operaciones+con+numeros+complejos

=__**Operaciones aritméticas con números complejos**__=

Programa que permite la realización de operaciones aritméticas (suma, resta, multiplicación, división) con número complejos

code format="pascal" PROGRAM subpr_14 ; USES Crt ;

PROCEDURE LeerComplejo (VAR rR, rI : Real) ; BEGIN Write  ('                       Parte real: ') ; Readln (rR) ; Write  ('                 Parte imaginaria: ') ; Readln (rI) ; END ; { LeerComplejo }

PROCEDURE MostrarComplejo (rR, rI : Real) ; BEGIN Write (rR:0:2) ;

IF rI > 0 THEN BEGIN Write (' + ') ; IF ABS(rI - 1) >= 0.001 THEN Write (rI:0:2) ; Write (' i') END ELSE BEGIN Write (' - ') ; IF ABS(rI + 1) >= 0.001 THEN Write (rI:0:2) ; Write (' i') END ;

Writeln ; { Más sencillo --- WriteLN ('     Parte real: ', rR:0:2) ; WriteLN ('Parte imaginaria: ', rI:0:2) } END ; { MostrarComplejo }

FUNCTION fncLeerOpcion : Char ; VAR cOpcion : Char ; BEGIN WriteLN ; WriteLN ('OPERACIONES CON NUMEROS COMPLEJOS') ; WriteLN ('   1.- Sumar') ; WriteLN ('   2.- Restar') ; WriteLN ('   3.- Multiplicar') ; WriteLN ('   4.- Dividir') ; WriteLN ('   0.- Terminar') ; Write  ('Pulsa el n£mero de la opci¢n: ') ; REPEAT cOpcion := ReadKey ; UNTIL ('0' <= cOpcion) AND (cOpcion <= '4') ; WriteLN (cOpcion) ;

fncLeerOpcion := cOpcion END ; { fnboLeerOpcion }

PROCEDURE Sumar (rR_1, rI_1, rR_2, rI_2 : Real ; VAR rR_3, rI_3 : Real) ; BEGIN rR_3 := rR_1 + rR_2 ; rI_3 := rI_1 + rI_2 ; END ; { Sumar }

PROCEDURE Restar (rR_1, rI_1, rR_2, rI_2 : Real ; VAR rR_3, rI_3 : Real) ; BEGIN rR_3 := rR_1 - rR_2 ; rI_3 := rI_1 - rI_2 END ; { Restar }

PROCEDURE Multiplicar (rR_1, rI_1, rR_2, rI_2 : Real ; VAR rR_3, rI_3 : Real) ; BEGIN rR_3 := (rR_1 * rR_2) - (rI_1 * rI_2) ; rI_3 := (rR_1 * rI_2) + (rI_1 * rR_2) END ; { Multiplicar }

PROCEDURE Dividir (rR_1, rI_1, rR_2, rI_2 : Real ; VAR rR_3, rI_3 : Real) ; BEGIN rR_3 := ((rR_1 * rR_2) + (rI_1 * rI_2)) / (sqr(rR_2) + sqr(rI_2)) ; rI_3 := ((rI_1 * rR_2) - (rR_1 * rI_2)) / (sqr(rR_2) + sqr(rI_2)) END ; { Dividir }

VAR {- Variables del programa principal } rR_1, rI_1, rR_2, rI_2, rR_3, rI_3 : Real ; cOpcion, cEspera : Char ;

BEGIN {-- PROGRAMA PRINCIPAL --} Writeln ; Writeln ; Writeln ('Programa para realizar operaciones con n£meros complejos') ;

REPEAT cOpcion := fncLeerOpcion ;

IF cOpcion <> '0' THEN BEGIN WriteLN ; WriteLN ('Escribe el primer numero complejo') ; LeerComplejo (rR_1, rI_1) ; WriteLN ; WriteLN ('Escribe el segundo numero complejo') ; LeerComplejo (rR_2, rI_2) ;

CASE cOpcion OF          '1' : BEGIN Sumar (rR_1, rI_1, rR_2, rI_2, rR_3, rI_3) ; WriteLN ; Write ('La SUMA vale: ') ; MostrarComplejo (rR_3, rI_3) ; END ; '2' : BEGIN Restar (rR_1, rI_1, rR_2, rI_2, rR_3, rI_3) ; WriteLN ; Write ('La DIFERENCIA vale: ') ; MostrarComplejo (rR_3, rI_3) ; END ; '3' : BEGIN Multiplicar (rR_1, rI_1, rR_2, rI_2, rR_3, rI_3) ; WriteLN ; Write ('El PRODUCTO vale: ') ; MostrarComplejo (rR_3, rI_3) ; END ; '4' : BEGIN WriteLN ; IF (rR_2 = 0) AND (rI_2 = 0) THEN WriteLN ('ERROR: no se pueden dividir esos numeros') ELSE BEGIN Dividir (rR_1, rI_1, rR_2, rI_2, rR_3, rI_3) ; Write ('La DIVISION vale: ') ; MostrarComplejo (rR_3, rI_3) END END END ; { CASE }

cEspera := Readkey ; END ; { IF }

UNTIL cOpcion = '0' ;

ReadLn ;

END. (* Fin de SUBPR_14.PAS *)

code