jueves 21 de mayo de 2009

Calculadora números complejos

Este, no es más que una calculadora. Lo interesante, es que se trata de números complejos, como 10+5i, por ejemplo.. con un menú de opciones.

#include
#include
#include
#include

struct complejo tpolar (struct complejo);
struct complejo trectangular(struct complejo);
struct complejo bsuma (struct complejo, struct complejo);
struct complejo fpotencia (struct complejo, float);
struct complejo fproducto (struct complejo, struct complejo);
struct complejo { float a, b; };
struct complejo fdivision (struct complejo, struct complejo);

int main(void)
{
int opcion;
printf ("\t\t\t\tNUMEROS COMPLEJOS\n\n");
printf ("Seleccione la operacion que quiera realizar\n\n");
printf ("1-Pasaje de forma rectangular a forma polar\n");
printf ("2-Pasaje de forma polar a forma rectangular\n");
printf ("3-Sumar dos numeros complejos. Nota: Ingrese los valores en forma rectangular\n");
printf ("4-Multiplicar dos numeros complejos. Nota: Ingrese los valores en forma polar\n");
printf ("5-Dividir dos numeros complejos. Nota: Ingrese los valores en forma polar\n");
printf ("6-Potenciacion. Nota: Ingrese los valores en forma polar\n\n");
printf ("Nota: La fase de los numero complejos debera ser ingresada en radianes y sera devuelta tambien en radianes \n\n");
scanf ("%d", &opcion);
switch (opcion)
{
case 1 :
printf ("\n1-PASAJE DE FORMA RECTANGULAR A FORMA POLAR\n\n");
struct complejo fpolar, frectangular;
printf ("Ingrese la parte real del numero complejo:");
scanf ("%f", &frectangular.a);
printf ("Ingrese la parte imaginaria de numero complejo:");
scanf ("%f", &frectangular.b);
fpolar = tpolar (frectangular);
printf ("\nEl modulo del numero complejo es =%f\n", fpolar.a);
printf ("La fase del numero complejo es =%f\n\n", fpolar.b);
system("PAUSE");
return EXIT_SUCCESS;

break ;

case 2 :
printf ("\n2-PASAJE DE FORMA POLAR A FORMA RECTANGULAR\n\n");
struct complejo frec, fpol;
printf ("Ingrese el modulo de numero complejo:");
scanf ("%f", &fpol.a);
printf ("Ingrese la fase de numero complejo:");
scanf ("%f", &fpol.b);
frec = trectangular (fpol);
printf ("\nLa parte imaginaria del numero complejo es =%f\n", frec.a);
printf ("La parte real del numero complejo es =%f\n\n", frec.b);
system("PAUSE");
return EXIT_SUCCESS;

break ;

case 3 :
printf ("\n3-SUMAR DOS NUMEROS COMPLEJOS\n\n");
struct complejo z2p,z1p, csuma;
printf ("Ingrese la parte real del primer numero complejo:");
scanf ("%f", &z1p.a);
printf ("Ingrese la parte imaginaria del primer numero complejo:");
scanf ("%f", &z1p.b);
printf ("\nIngrese la parte real del segundo numero complejo:");
scanf ("%f", &z2p.a);
printf ("Ingrese la parte imaginaria del segundo numero complejo:");
scanf ("%f", &z2p.b);
csuma = bsuma (z1p, z2p);
printf ("\nEl resultado es= %f +j%f\n\n", csuma.a,csuma.b);
system("PAUSE");
return EXIT_SUCCESS;

break ;

case 4 :
printf ("\n4-MULTIPLICAR DOS NUMEROS COMPLEJOS\n\n");
struct complejo z2pa,z1pa, producto;
printf ("Ingrese el modulo del primer numero complejo:");
scanf ("%f", &z1pa.a);
printf ("Ingrese la fase del primer numero complejo:");
scanf ("%f", &z1pa.b);
printf ("\nIngrese el modulo del segundo numero complejo:");
scanf ("%f", &z2pa.a);
printf ("Ingrese la fase del segundo numero complejo:");
scanf ("%f", &z2pa.b);
producto = fproducto (z1pa, z2pa);
printf ("\nEl resultado del producto es= Modulo= %f Fase=%f\n\n", producto.a,producto.b);
system("PAUSE");
return EXIT_SUCCESS;

break ;

case 5 :
printf ("\n5-DIVIDIR DOS NUMEROS COMPLEJOS\n\n");
struct complejo z2pb,z1pb, division;
printf ("Ingrese el modulo del primer numero complejo:");
scanf ("%f", &z1pb.a);
printf ("Ingrese la fase del primer numero complejo:");
scanf ("%f", &z1pb.b);
printf ("\nIngrese el modulo del segundo numero complejo:");
scanf ("%f", &z2pb.a);
printf ("Ingrese la fase del segundo numero complejo:");
scanf ("%f", &z2pb.b);
division = fdivision (z1pb, z2pb);
printf ("\nEl resultado de la division es= Modulo= %f Fase=%f\n\n", division.a,division.b);
system("PAUSE");
return EXIT_SUCCESS;

break ;

case 6 :
printf ("\n6-POTENCIACION\n\n");
struct complejo z1pc, potencia;
float exponencial;
printf ("Ingrese el modulo del numero complejo:");
scanf ("%f", &z1pc.a);
printf ("Ingrese la fase del primer numero complejo:");
scanf ("%f", &z1pc.b);
printf ("\nIngrese el exponencial:");
scanf ("%f", &exponencial);
potencia = fpotencia (z1pc, exponencial);
printf ("\nEl resultado de la operacion es= Modulo= %f Fase=%f\n\n", potencia.a,potencia.b);
system("PAUSE");
return EXIT_SUCCESS;

break ;

default : printf ("\nNo corresponde a ninguna opcion dada\n\n");

}

system("PAUSE");
return EXIT_SUCCESS;

}
struct complejo tpolar (struct complejo z)

{
float g,h,s,d;
struct complejo w;
g= pow (z.a,2);
h= pow (z.b,2);
s=g+h;
w.a = sqrt (s);
d=z.a/z.b;
w.b= atan (d);

return (w);

}
struct complejo trectangular (struct complejo z)

{
float c,d;
struct complejo w;
c = cos (z.b);
w.a = c * z.a;
d = sin(z.b);
w.b = d * z.a;
return (w);

}
struct complejo bsuma (struct complejo x, struct complejo y)

{
struct complejo w;
w.a= x.a + y.a;
w.b= x.b + y.b;
return (w);
}
struct complejo fproducto (struct complejo x, struct complejo y)

{
struct complejo w;
w.a = x.a * y.a;
w.b = x.b + y.b;
return (w);
}
struct complejo fdivision (struct complejo x, struct complejo y)

{
struct complejo w;
w.a = x.a / y.a;
w.b = x.b - y.b;
return (w);
}
struct complejo fpotencia (struct complejo x, float y)

{
struct complejo w;
w.a = pow (x.a, y);
w.b = x.b * y;
return (w);
}