00001
00009 #include<stdio.h>
00010 #include"numbers.h"
00011
00017 static number addComplex(const number x,const number y);
00023 static number multComplex(const number x,const number y);
00027 static number getUnitComplex();
00031 static number getZeroComplex();
00035 static void displayComplex(const number x);
00036
00037
00043 number getComplexNumber(double x, double y){
00044 number t ={ COMPLEX_NUMBER,
00045 {0},
00046 &addComplex,
00047 &multComplex,
00048 &getUnitComplex,
00049 &getZeroComplex,
00050 &displayComplex};
00051 t.val.doublePair[0]=x;
00052 t.val.doublePair[1]=y;
00053 return t;
00054 }
00055
00056 static number addComplex(const number a, const number b){
00057 number c=a;
00058 if (a.type!=COMPLEX_NUMBER || b.type!=COMPLEX_NUMBER){
00059 return error;
00060 }
00061 c.val.doublePair[0]=a.val.doublePair[0]+b.val.doublePair[0];
00062 c.val.doublePair[1]=a.val.doublePair[1]+b.val.doublePair[1];
00063 return c;
00064 }
00065
00066 static number multComplex(const number a, const number b){
00067 number c=a;
00068 if (a.type!=COMPLEX_NUMBER || b.type!=COMPLEX_NUMBER){
00069 return error;
00070 }
00071 c.val.doublePair[0]=a.val.doublePair[0]*b.val.doublePair[0]
00072 -a.val.doublePair[1]*b.val.doublePair[1];
00073 c.val.doublePair[1]=a.val.doublePair[0]*b.val.doublePair[1]
00074 +a.val.doublePair[1]*b.val.doublePair[0];
00075 return c;
00076 }
00077
00078 static number getUnitComplex(){
00079 return getComplexNumber(1.,0.);
00080 }
00081
00082 static number getZeroComplex(){
00083 return getComplexNumber(0.,0.);
00084 }
00085
00086 void displayComplex(const number x){
00087 printf("%.2f+%.2fi",x.val.doublePair[0],x.val.doublePair[1]);
00088 }
00089