# Đề tài: [LT][Số học]Các thao tác trên Số phức

1. ## [LT][Số học]Các thao tác trên Số phức

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("\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. 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```
Đã được chỉnh sửa lần cuối bởi PoPoPoPo : 09-10-2006 lúc 11:36 AM.

2. Thành viên chính thức
Ngày gia nhập
08 2006
Bài viết
59
//================================================== =
Sophuc Thuong(Sophuc x,Sophuc y)
{

if(y.Thuc==0&&x.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
Nếu x2 và y2 đều là 0 thì phép chia cho (x2*x2+y2*y2) là phép chia cho 0 !!!

3. Uh
Cảm ơn!
Mình bị nhầm đoạn :if(y.Thuc==0&&x.Ao==0)
điều kiện phải là : if(y.Thuc==0&&y.Ao==0)
mình đã sửa lại trong code phía trên!

4. Số phức theo OOP:
File comp.h
Code:
```#ifndef comp_h
#define comp_h
#include <iostream>
using namespace std;
class comp
{
private: double re, im; //real, imaginary
public:
//khoi tao
comp(double r = 0.,double i = 0.){re = r; im = i;}; //constructor
friend istream& operator>>(istream&,comp&);
//cung cap thong tin
friend ostream& operator<<(ostream&,comp&);
//cap nhat
//xu ly tinh toan
comp operator-(); //negative
comp operator+(comp);
comp operator-(comp);
comp operator*(comp);
comp operator/(comp);
comp operator+=(comp);
comp operator-=(comp);
comp operator*=(comp);
comp operator/=(comp);
//kiem tra rang buoc
};
#endif```
File comp.cpp
Code:
```#include "comp.h"
//khoi tao
istream& operator>>(istream& cin,comp& x)
{
cout <<"Real     = "; cin >>x.re;
cout <<"Imginary = "; cin >>x.im;
}
//cung cap thong tin
ostream& operator<<(ostream& cout,comp& x)
{
cout <<x.re <<" + " <<x.im <<'i';
}
//xu ly tinh toan
comp comp::operator-() //negative
{
return comp(-re,-im);
}
void comp::operator=( comp x) //assign
{
re = x.re;
im = x.im;
}
comp comp::operator+(comp x)
{
return comp(re+x.re,im+x.im);
}
comp comp::operator-(comp x)
{
x = -x;
return *this+x;
}
comp comp::operator*(comp x)
{
return comp(re*x.re - im*x.im,re*x.im + im*x.re);
}
comp comp::operator/(comp x)
{
if ((x.re == 0.) && (x.im ==0.))
cout <<"Error: Divided by zero.\n";
else return comp(re*x.re + im*x.im,im*x.re + re*x.im);
}
comp comp::operator+=(comp x)
{
re += x.re;
im += x.im;
return *this;
}
comp comp::operator-=(comp x)
{
x = -x;
return *this+=x;
}
comp comp::operator*=(comp x)
{
double r = re;
re = re*x.re - im*x.im;
im = r*x.im + im*x.re;
return *this;
}
comp comp::operator/=(comp x)
{
if ((x.re == 0.) && (x.im ==0.))
cout <<"Error: Divided by zero.\n";
else
{
double r = re;
re = re*x.re + im*x.im;
im = im*x.re + r*x.im;
return *this;
}
}```
Có gì thiếu sót thì mong các bạn thêm vào, mình chỉ làm những cái cơ bản thôi, phần mở rộng xin dành cho các bạn thích tìm hiểu.

#### Quyền hạn của bạn

• Bạn không thể gửi đề tài mới
• Bạn không thể gửi bài trả lời
• Bạn không thể gửi các đính kèm
• Bạn không thể chỉnh sửa bài viết của bạn