CÁC thao tác trên số phức, dựa trên cấu trúc.
Code:
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<math.h>
#include<ctype.h>
//++++++++++++++++++++++++++++++++++++++++++++++++++++
typedef struct{
float Thuc;
float Ao;
}Sophuc;
Sophuc x,y,z;
//****************************************************
//====================================================
void InSophuc(Sophuc x)
{
printf("%6.3f + %6.3f*j",x.Thuc,x.Ao);
}//end function
//=====================================================
void Nhap(Sophuc &x)
{
float e,f;
printf("==============\n");
printf("Nhap phan thuc:");scanf("%f",&e);
printf("\nNhap phan ao:");scanf("%f",&f);
x.Thuc=e;
x.Ao=f;
}//end function
//======================================================
Sophuc Cong(Sophuc x,Sophuc y)
{
z.Thuc= x.Thuc + y.Thuc;
z.Ao= x.Ao + y.Ao;
return(z);
}
//==================================================
Sophuc Tru(Sophuc x,Sophuc y)
{
z.Thuc = x.Thuc - y.Thuc;
z.Ao = x.Ao - y.Ao;
return(z);
}
//===================================================
Sophuc Nhan(Sophuc x,Sophuc y)
{
z.Thuc = (x.Thuc)*(y.Thuc) -(x.Ao)*(y.Ao);
z.Ao = (x.Thuc)*(y.Ao) + (x.Ao)*(y.Thuc);
return(z);
}//end function
//===================================================
Sophuc Thuong(Sophuc x,Sophuc y)
{
if(y.Thuc==0&&y.Ao==0)
{printf("\nKhong the thuc hien phep chia cho 0!"); exit(0);}
else
{
float x1,y1,x2,y2;
x1=x.Thuc;y1=x.Ao;x2=y.Thuc;y2=y.Ao;
z.Thuc=(x1*x2+y1*y2)/(x2*x2+y2*y2);
z.Ao=(x2*y1-x1*y2)/(x2*x2+y2*y2);
}
return(z);
}//End function
//========================================================
void CanBacHai(Sophuc x)
{
if(x.Ao == 0)
{
if(x.Thuc<0)
{
z.Thuc=0;z.Ao=-sqrt(fabs(x.Thuc));
printf("\nNghiem la:") ;
InSophuc(z);
printf("\n Va:\n");
z.Ao=sqrt(fabs(x.Thuc));
InSophuc(z);
} //end if 2
else
{
z.Ao = 0;z.Thuc = (-sqrt(fabs(x.Thuc)));
printf("\nNghiem la:");
InSophuc(z);
printf("\nVa:\n");
z.Thuc = (sqrt(fabs(x.Thuc)));
} //end else of if 2
}//end if 1
else
{
float a,b,c,d;
a = x.Thuc; b = x.Ao;
c=-sqrt(2*a+2*sqrt(a*a+b*b));
d=b/(2*c);
z.Thuc=c;z.Ao=d;
printf("\nKet qua la:\n");
InSophuc(z);
c=sqrt(2*a+2*sqrt(a*a+b*b));
d=b/(2*c);
z.Thuc=c;z.Ao=d;
printf("\n\nVa:\n\n");
InSophuc(z);
}//end else of if 1
}//End function
//=====================================================
void main()
{
clrscr();
textmode(C80);
textcolor(YELLOW);
textbackground(BLUE);
window(1,1,80,25);
while(1)
{clrscr();
printf("\n Tap thao t*c voi Cau truc So_Phuc:") ;
printf("\nÞÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÝ");
printf("\n\n Menu\nÈÍÍÍͼ");
printf("\n1. Tao lap hai So phuc X,Y");
printf("\n2. Tim Z=X+Y");
printf("\n3. Tim Z=X-Y");
printf("\n4. Tim Z=X*Y");
printf("\n5. Tim Z=X/Y");
printf("\n6. Tinh ûX ,ûY");
//printf("\nz. Tro ve MENU ch¡nh");
printf("\nz. Thoat");
printf("\n\nHay chon chuc nang 1 -> z: ");
char ch=toupper(getchar());
if(ch=='Z') break;
switch(ch)
{
case '1':
printf("Nhap so phuc X\n");
Nhap(x);
printf("\nNhap so phuc Y\n");
Nhap(y);
printf("\n===================\nX=");
InSophuc(x);
printf("\n\n");
printf("Y=");
InSophuc(y);
getch();
break ;
case '2':
Cong(x,y);
printf("\n\n++++++++++++++++++++++++++++\n\nTong X+Y=");
InSophuc(z);
getch();
break;
case '3':
Tru(x,y);
printf("\n\nHieu X-Y=");
InSophuc(z);
getch();
break;
case '4':
Nhan(x,y);
printf("\n\nTich X*Y=");
InSophuc(z);
getch();
break;
case '5':
Thuong(x,y);
printf("\n\nThuong X/Y=");
InSophuc(z);
getch();
break;
case '6':
printf("\n\n++++++++++++++++++++++++++\n\nTinh CanBacHai cua X:\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
CanBacHai(x);
printf("\n====================\n\nTinh CanBacHai cua Y:\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
CanBacHai(y);
getch();
break;
}//End switch();
}// End while(1);
}//End main