martes, 1 de octubre de 2002

Cociente de dos números complejos. Un ejercicio de programación en C/C++

//////////////////////////////////////////
// Quocient de nombres complexos 
// Joan Aranès Clua
// 18/03/2002
//////////////////////////////////////////

/*
3. Divisió de nombres complexos 

	   El quocient és possible sempre que la part real i la part imaginària del
         divisor no siguin simultàniament 0. Aquesta circumstància s'ha de comprovar.

         Si tenim dos nombres complexos z1=a+bi     
         i    z2=c+di, es defineix la divisió:
		 $\frac{z_1}{z_2}=\frac{ac+bd}{c^2+d^2}+\i\frac{bc-ad}{c^2+d^2}$

*/



     #include <stdio.h>
	 

     struct complex {
         float re;
         float im;
     };

     void impr(complex );
     void suma(complex , complex , complex* );
     void producte(complex, complex, complex*); 
     void divisio(complex, complex, complex*); 



     void main(){
         complex z1,z2,zr;
         printf("Introdu\x08Bu els operadors. Per introduir un nombre complex\n");
         printf("amb part imagin\x085ria negativa poseu a+-bi...\n"); 
         printf("introdu\x08Bu z1 (format x+yi):...");
         scanf("%f+%fi",&z1.re, &z1.im);

         printf("introdu\x08Bu z2 (format x+yi):...");
         scanf("%f+%fi",&z2.re, &z2.im);

      
         suma(z1,z2,&zr);
         impr(z1);printf("+ ");impr(z2);printf("= ");
         impr(zr);printf("\n");

         producte(z1,z2,&zr);
         impr(z1);printf("* ");impr(z2);printf("= ");
         impr(zr);printf("\n");

		 divisio(z1,z2,&zr);
         impr(z1);printf("/ ");impr(z2);printf("= ");
         impr(zr);printf("\n");

     }


     void impr(complex a){
         printf("%f+%fi ", a.re, a.im);
     }


     void suma(complex a, complex b, complex* c){
         c->re=a.re+b.re;
         c->im=a.im+b.im;
     }

     void producte(complex a, complex b, complex* c){
         c->re=a.re*b.re-a.im*b.im;
         c->im=a.im*b.re+a.re*b.im;
     }

	 void divisio(complex a, complex b, complex* c){
		 c->re=(a.re*b.re+a.im*b.im)/(b.re*b.re+b.im*b.im);
		 c->im=(a.im*b.re-a.re*b.im)/(b.re*b.re+b.im*b.im);
     }