#define REAL 0 #define IMAGINARIO 1 #define SUMA 1 #define RESTA 2 #define PRODUCTO 3 #define DIVISION 4 #define PRODUCTOESCAL 5 #define DIVISIONESCAL 6 #define MODULO 7 #define SALIR 8 int main(int argc, char *argv[]) { float op1[2]; float op2[2]; float res[2]; float modu; float k; int seleccion; do { system("cls"); printf("Calculadora de numeros complejos\n\n"); seleccion=menu(); // Se llama a la función menú para solicitarle al usuario la elección de la operación switch (seleccion) { case SUMA: operando(op1,1); operando(op2,2); suma(op1,op2,res); resultado(res); break; case RESTA: operando(op1,1); operando(op2,2); resta(op1,op2,res); resultado(res); break; case PRODUCTO: operando(op1,1); operando(op2,2); producto(op1,op2,res); resultado(res); break; case DIVISION: operando(op1,1); operando(op2,2); division(op1,op2,res); resultado(res); break; case PRODUCTOESCAL: operando(op1,0); escalar(&k); productoescalado(op1,k,res); resultado(res); break; case DIVISIONESCAL: operando(op1,0); escalar(&k); divisionescalado(op1,k,res); resultado(res); break; case MODULO: printf("Operando\n"); operando(op1,0); modulo(op1,&modu); resultadomodulo(modu); break; case SALIR: return 0; break; default: printf("ERROR: Introduzca una opcion correcta\n"); break; } system("PAUSE"); }while(seleccion!=SALIR); } int menu() { int seleccion; printf("MENU:\n"); printf("%d-SUMA\n",SUMA); printf("%d-RESTA\n",RESTA); printf("%d-PRODUCTO\n",PRODUCTO); printf("%d-DIVISION\n",DIVISION); printf("%d-PRODUCTO POR ESCALAR\n",PRODUCTOESCAL); printf("%d-DIVISION POR ESCALAR\n",DIVISIONESCAL); printf("%d-MODULO\n",MODULO); printf("%d-SALIR\n",SALIR); printf("Elija la operacion deseada: "); scanf("%d",&seleccion); return seleccion; } void operando(float operando[2],int op) { if(op) { printf("Operando %d[REAL]=",op); scanf("%f",&operando[REAL]); printf("Operando %d[IMAGINARIO]=",op); scanf("%f",&operando[IMAGINARIO]); } else { printf("Operando [REAL]="); scanf("%f",&operando[REAL]); printf("Operando [IMAGINARIO]="); scanf("%f",&operando[IMAGINARIO]); } return; } void escalar(float *escalar) { printf("Escalar ="); scanf("%f",escalar); return; } void resultado(float resultado[2]) { printf("Resultado = %f + %fi\n",resultado[REAL],resultado[IMAGINARIO]); return; } void resultadomodulo(float modulo) { printf("Resultado = %f\n",modulo); return; } void suma(float op1[2],float op2[2],float res[2]) { res[REAL]=op1[REAL]+op2[REAL]; res[IMAGINARIO]=op1[IMAGINARIO]+op2[IMAGINARIO]; return; } void resta(float op1[2],float op2[2],float res[2]) { res[REAL]=op1[REAL]-op2[REAL]; res[IMAGINARIO]=op1[IMAGINARIO]-op2[IMAGINARIO]; return; } void producto(float op1[2],float op2[2],float res[2]) { res[REAL]=((op1[REAL]*op2[REAL])-(op1[IMAGINARIO]*op2[IMAGINARIO])); // (a + bi) · (c + di) = (ac - bd) + (ad + bc)i res[IMAGINARIO]=((op1[REAL]*op2[IMAGINARIO])+(op1[IMAGINARIO]*op2[REAL])); return; } void division(float op1[2],float op2[2],float res[2]) { if(((op2[REAL]*op2[REAL])+(op2[IMAGINARIO]*op2[IMAGINARIO]))!=0 || ((op2[REAL]*op2[REAL])+(op2[IMAGINARIO]*op2[IMAGINARIO]))!=0) { res[REAL]=((op1[REAL]*op2[REAL])+(op1[IMAGINARIO]*op2[IMAGINARIO]))/((op2[REAL]*op2[REAL])+(op2[IMAGINARIO]*op2[IMAGINARIO])); res[IMAGINARIO]=((op1[IMAGINARIO]*op2[REAL])-(op1[REAL]*op2[IMAGINARIO]))/((op2[REAL]*op2[REAL])+(op2[IMAGINARIO]*op2[IMAGINARIO])); // (a+bi)/(c+di)=((ac+bd)/(c*c+d*d),(bc-ad)/(c*c+d*d) } else { error(); } return; } void productoescalado(float op1[2], float k, float res[2]) { res[REAL]=(op1[REAL]*k); res[IMAGINARIO]=(op1[IMAGINARIO]*k); return; } void divisionescalado(float op1[2], float k, float res[2]) { if(k!=0) { res[REAL]=(op1[REAL]/k); res[IMAGINARIO]=(op1[IMAGINARIO]/k); } else { error(); } return; } void modulo(float op1[2], float *modulo) { *modulo=sqrt((op1[REAL]*op1[REAL])+(op1[IMAGINARIO]*op1[IMAGINARIO])); return; } void error() { printf("ERROR: Division por Cero\n"); return; }