/* Realizar un programa que permita realizar distintas operaciones con complejos - Definir un tipo complejo - Definir un tipo enumerado para el menu de operaciones - Realizar subprogramas para dar Valor a un complejo Escribir en pantalla un complejo Sumar, restar, multiplicar y dividir complejos... */ #include #include typedef enum {SALIR, SUMAR, RESTAR, MULTIPLICAR, DIVIDIR, NOMAS} tMenu; tMenu menu( void ); typedef struct { float r; float i; } tcomp; /* Devuelve: - Un numero complejo leido por teclado */tcomp leercomplejo( void); /* Parametro de entrada: - Un numero complejo */void escribircomplejo( tcomp a ); /* Parametros de entrada: - a : Un numero complejo - b : Un numero complejo Devuelve: - Un 1 cuando son iguales y 0 si son distintos los complejos */int compararcomp (tcomp a, tcomp b); /* Parametros de entrada: - real : Parte real - imag : Parte imaginaria Devuelve: - Un complejo con los valores pasados por parametros */tcomp darValorComplejo( float r, float i); /* Parametros de entrada: - a : Un numero complejo - b : Un numero complejo Devuelve: - Un complejo con la suma */tcomp sumacomp( tcomp a, tcomp b); /* Parametros de entrada: - a : Un numero complejo - b : Un numero complejo Devuelve: - Un complejo con la resta */tcomp restcomp( tcomp a, tcomp b); /* Parametros de entrada: - a : Un numero complejo - b : Un numero complejo Devuelve: - Un complejo con el producto de ambos */tcomp multcomp( tcomp a, tcomp b); /* Parametros de entrada: - a : Un numero complejo - b : Un numero complejo distinto de cero Devuelve: - Un complejo con la division a/b */tcomp divcomp( tcomp a, tcomp b); int main(void) { tcomp c1, c2, res, cero ; tMenu m; cero = darValorComplejo( 0.0, 0.0 ); while ( (m=menu()) != SALIR) { switch( m) { case SUMAR:{ c1= leercomplejo(); c2= leercomplejo(); res = sumacomp( c1, c2); escribircomplejo( c1 ); printf (" + "); escribircomplejo( c2 ); printf( " = "); escribircomplejo( res ) ; break; } case RESTAR:{ c1= leercomplejo(); c2= leercomplejo(); res = restcomp( c1, c2); escribircomplejo( c1 ); printf (" - "); escribircomplejo( c2 ) ; printf( " = "); escribircomplejo( res ) ; break; } case MULTIPLICAR: { c1= leercomplejo(); c2= leercomplejo(); res = multcomp( c1, c2); escribircomplejo( c1 ); printf (" * "); escribircomplejo( c2 ); printf( " = "); escribircomplejo( res ) ; break; } case DIVIDIR:{ c1= leercomplejo(); c2= leercomplejo(); if (compararcomp( c2, cero) ==0 ) { res = divcomp( c1, c2); escribircomplejo( c1 ); printf (" / "); escribircomplejo( c2 ) ; printf( " = ");escribircomplejo( res ) ; } else printf ("ERROR : Division entre cero \n" ); break; } default : { printf ("ERROR : Operacion no permitida\n" ); break; } } // switch } // while return 0; } void escribircomplejo( tcomp a ){ printf ("(%4.2f, %4.2f) ", a.r, a.i); } tcomp leercomplejo(){ tcomp a; printf (" Parte real : "); scanf ("%f", &a.r); printf (" Parte imaginaria : "); scanf ("%f", &a.i); return (a); } int compararcomp (tcomp a, tcomp b){ return ((a.r==b.r && a.i==b.i)? 1 :0); } tcomp sumacomp( tcomp a, tcomp b){ tcomp res; res.r= a.r+b.r; res.i= a.i+b.i; return(res); } tcomp restcomp( tcomp a, tcomp b){ tcomp res; res.r= a.r-b.r; res.i= a.i-b.i; return(res); } tcomp multcomp( tcomp a, tcomp b){ tcomp res; res.r = a.r * b.r - a.i * b.i; res.i = a.r * b.i + a.i * b.r; return (res); } tcomp divcomp( tcomp a, tcomp b){ tcomp res; //res = darValorComplejo( 0, 0); //if ((compararcomp( b, res))==0 ){ res.r = (a.r * b.r + a.i * b.i) / (b.r*b.r + b.i*b.i); res.i = (a.i * b.r - a.r * b.i) / (b.r*b.r + b.i*b.i); //} else printf (" ERROR: Division entre cero \n"); return (res); } tcomp darValorComplejo( float r, float i){ tcomp res; res.r= r; res.i= i; return res; } tMenu menu( void ){ tMenu res; char ch; do { printf("\n____________________\n Operaciones \n"); printf ( "\t Fin ( F )\n" ); printf ( "\t Sumar complejos ( S )\n" ); printf ( "\t Restar complejos ( R )\n" ); printf ( "\t Multiplicar complejos ( M )\n" ); printf ( "\t Dividir complejos ( D )\n" ); printf ( "\t Eleccion : "); fflush( stdin ); ch=toupper(getchar()) ; switch (ch){ case 'F': { res= SALIR; break;} case 'S': { res= SUMAR; break;} case 'R': { res= RESTAR; break;} case 'M': { res= MULTIPLICAR; break;} case 'D': { res= DIVIDIR; break;} default : { printf (" ERROR : Eleccion incorrecta \n"); res= NOMAS; break; } } } while (res =NOMAS ) ; return res; }