i . lêi nãi ®Çu: Cã thÓ nãi r»ng ng«n ng÷ c,c++ thËt lµ kh«ng thÓ thiÕu víi nh÷ng nhµ lËp tr×nh chuyªn nghiÖp nã ®• cung cÊp bæ sung cho ta vÒ lËp tr×nh tÝnh to¸n,vµ lËp tr×nh hÖ thèng,lËp tr×nh híng ®èi tîng… Kh«ng nh÷ng tinh to¸n chÝnh x¸c h¬n c¸c ng«n ng÷ kh¸c gióp cho ngêi lËp tr×nh khi gi¶i quyÕt bµi to¸n ®ßi hái møc ®é chÝnh x¸c cao (®Ó ®iÒu khiÓn r« bèt ch¼ng h¹n) lµ c«ng cô thËt h÷u Ých cho tÝnh to¸n. Nã cßn cho ta lËp tr×nh hÖ thèng mét c¸ch ®Çy tÝnh chuyªn nghiÖp,mang l¹i hiÖu qu¶ cao trong c«ng viÖc c¸c nhµ lËp tr×nh sÏ tõ ®ã kiÓm tra tÊt c¶ tÝnh tèi u,bÉy lçi chÝnh x¸c……dÉn tíi thµnh c«ng cho nhµ lËp tr×nh. H¬n n÷a nã cã tÝnh kÕ thõa ,cã thÓ söa ®æi bæ sung … Qua ®ã víi sù híng dÉn nhiÖt t×nh cña thÇy §INH V¡N PHONG ®• gióp t«i hoµn thµnh bµi tËp lín nµy.
Trang 1Báo cáo bàI tập lớn c/c++
i lời nói đầu:
Có thể nói rằng ngôn ngữ c,c++ thật là không thể thiếu với những nhà lập trình chuyên nghiệp nó đã cung cấp bổ sung cho ta về lập trình tính toán,và lập trình hệ thống,lập trình hớng đối tợng…
Không những tinh toán chính xác hơn các ngôn ngữ khác giúp cho ngời lập trình khi giải quyết bài toán đòi hỏi mức độ chính xác cao (để điều khiển rô bốt chẳng hạn) là công cụ thật hữu ích cho tính toán.
Nó còn cho ta lập trình hệ thống một cách đầy tính chuyên nghiệp,mang lại hiệu quả cao trong công việc các nhà lập trình sẽ từ đó kiểm tra tất cả tính tối u,bẫy lỗi chính xác……dẫn tới thành công cho nhà lập trình.
Hơn nữa nó có tính kế thừa ,có thể sửa đổi bổ sung …
Qua đó với sự hớng dẫn nhiệt tình của thầy ĐINH VĂN PHONG đã giúp tôi hoàn thành bài tập lớn này.
Sinh viên: Ngô Thanh Bình
Lớp: Cơ Tin2-k44
ii Các giảI thuật của bài toán PHầN I
BAI TAP LON PHAN I
void tinh_e_mu_x(); //tinh e mu x theo cong thuc gan dung float tinh_sinx(); //tinh sin(x) theo cong thuc gan dung float ham_da_thuc(); //tinh y=f(x) da thuc bac n
Trang 2void tinhTB_DL(); //tinh gia tri tb & phuong sai cua mot day diem
float f(float x,int n);//tinh y=x mu n
long f(int n); //tinh n!
long C(int m,int n); // tinh to hop chap m cua n
long p(int n); //tinh de quy p(n)=1 mu 3 + 2 mu 3 + long s(int n2); //tinh s(n2)=(2n)!
int atoi(); //chuyen xau ki tu thanh so nguyen
//float sothuc();
void tinh_e_mu_x() //1.tinh e mu x theo cong thuc gan dung }
x=atof(s);
exp=atof(s);
dung ham doulble atof(*s) trong thu vien <ctype.h>
(chuyen xau ki tu thanh so thuc)
while(fabs(z)>=exp)
{
i=i+1;
z=z*x/i;
y=z+y;
}
}
float tinh_sinx() //2.tinh sin(x) theo cong thuc gan dung {
x=atof(s);
exp=atof(s);
y=x;
x2=x*x;
z=x;
while(fabs(z)>=exp)
{ z=-z*x2/((i+1)*(i+2));
y=y+z;
i=i+2;
}
return(y);
}
float ham_da_thuc() //3.tinh y=f(x) da thuc bac n
{
z=a[n]*x+a[n-1];
z=z*x+a[i-1];
return(z);
}
void tinhTB_DL() //4.tinh gia tri tb & phuong sai cua mot day diem
Trang 3{
s=0;d=0;
for (i=1;i<=n;++i)
{
s=s+x[i];
}
s=s/n;
for (i=1;i<=n;++i)
{
d=d+((x[i]-s)*(x[i]-s));
}
d=sqrt(d/n);
}
float f(float x,int n) //5.tinh y=x mu n
{
if (n==0) return(1);
else return(x*f(x,n-1));
}
long f(int n) //6.tinh n!
{
if (n==0) return(1);
else return(n*f(n-1));
}
long C(int m,int n) //7.tinh to hop chap m cua n
{
return(f(n)/(f(n-m)*f(m)));
}
long p(int n) //8.tinh de quy p(n)=1 mu 3 + 2 mu 3 +
{
for(i=1;i<=n;++i)
t=t+f(i,3);
return(t);
}
long s(int n2) //9.tinh s(n2)=(2n)!
{ int n;
n=2*n2;
return(f(n));
}
{ char s[100];
scanf("%s",s);
for (i=0;s[i]>='0'&& s[i]<='9';++i)
n=n*10+s[i]-'0';
return(n);
Trang 4}
void main()
{
tinh_e_mu_x();
printf("\n gia tri sin(x) la=%f",tinh_sinx());
printf("\n gia tri da thuc f(x) la=%4f",ham_da_thuc()); tinhTB_DL();
printf("\n gia tri da thuc x mu n la:%5.3f",f(x,n)); printf("\n gia tri giai thua (n!) la:%5ld",f(n));
printf("\n gia tri p(n) la:%5ld",p(n));
printf("\n gia tri C(m,n) la:%5ld",C(m,n));
printf("\n gia tri s=(n2=2*n)! la:%5ld",s(n));
}
IIi C¸c gi¶I thuËt cña bµi to¸n PHÇN II-2
struct monhoc
{
double toan,ly,hoa,nucong,kithuat;
};
struct date
{
int ngay,thang,nam;
};
typedef struct
{
char ht[25];
struct monhoc diem; //0<=diem<=10 va sau dau '.'la
0.25,0.50,0.75
struct date ns; //1<=ngay<=31 va 1<=thang<=12 va nam>=1900 int gioitinh; //nam (1) or nu(0)
}person;
void vao(person *p);
//nhap ho ten,gioi tinh va diem cua n hoc sinh(luu tren dia) void in(person p);//in so lieu ve hoc sinh nam sau do den nu
void sapxep(person *p,int n);
//sap xep theo thu tu giam dan cua tong diem cac mon hoc
chinh,mon hoc bo sung
Trang 5void hoanvi(person *p1,person *p2); //hoan vi 2 hoc sinh
void doi(person *p,person *q); //gan 2 hoc sinh voi nhau
int atoi(); // su ly tu xau chuyen thanh so nguyen double sulydiem();//su ly diem chuyen sau thanh diem theo khuon kho
double sulydiem()
{
double n,m;
int a;
char s[100];
t:scanf("%s",s);
n=atof(s);
if (n<0||n>10)
{ printf("\n ban da nhap sai diem (hay nhap lai)");
goto t;
}
a=(int)n;
m=n-(double)a;
if (m*8!=0&&m*8!=2&&m*8!=4&&m*8!=6)
{ printf("\n ban da nhap sai diem (hay nhap lai)");
goto t;
}
return(n);
}
int atoi()
{ int i=0,n=0;
char s[100];
scanf("%s",s);
for (i=0;s[i]>='0'&& s[i]<='9';++i)
n=n*10+s[i]-'0';
return(n);
}
void vao(person *p)
{
h.ns.ngay=atoi();
h.ns.thang=atoi();
h.ns.nam=atoi();
h.gioitinh=atoi();
if (h.gioitinh==1)
{
h.diem.toan=sulydiem();
h.diem.ly=sulydiem();
h.diem.hoa=sulydiem();
h.diem.kithuat=sulydiem();
};
else
Trang 6{
h.diem.toan=sulydiem();
h.diem.ly=sulydiem();
h.diem.hoa=sulydiem();
h.diem.nucong=sulydiem();
}
*p=h;
}
void in(person p)
void hoanvi(person *p1,person *p2)
{
person h;
h=*p1;
*p1=*p2;
*p2=h;
}
void sapxep(person *p,int n)
{ if(p[i].diem.toan+p[i].diem.ly+p[i].diem.hoa<p[j].diem.toan+ p[j].diem.ly+p[j].diem.hoa)
hoanvi(&p[i],&p[j]);
}
void doi(person *p,person *q)
{
*p=*q;
}
void main()
{
person *p,ds[100],dt[100],dn[100];
int i,n,m,k,j;
n=atoi();
for(i=1;i<=n;++i)
vao(&ds[i]);
m=0;k=0;
for (i=1;i<=n;++i)
{
if(ds[i].gioitinh==1)
// doan nay tach ds ra lam 2 danh sach
// danh sach dn la toan nam danh sach dt toan la nu {
m=m+1;
doi(&dt[m],&ds[i]);
}
else
Trang 7{
k=k+1;
doi(&dn[k],&ds[i]);
}
}
for(i=1;i<=m;++i)
in(dt[i]); //in nam truoc
for(i=1;i<=k;++i)
in(dn[i]); //sau do in nu
sapxep(ds,n);
//in danh sach sau khi sap xep printf("\n In Danh Sach Hoc Sinh Theo Thu Tu Giam Dan Ve Tong Diem 3 mon (T_L_H):");
for(i=1;i<=n;++i)
in(ds[i]);
getch();
}
IIi C¸c gi¶I thuËt cña bµi to¸n PHÇN IIi-1
//thiet ke va khai trien cac lop doi tuong complex
//mo ta so phuc voi it nhap 5 ham thanh phan
//thiet ke ham toan tu +,-,*,/,!,-.tinh s=(-p)*(p-(!q))/(u+v)
class SP
{
private:
double a;//phan thuc
double b;//phan ao
public:
friend ostream&operator<<(ostream&os,SP p); //ghi gia tri
ra man hinh
friend istream&operator>>(istream&is,SP &p);//nhap gia tri
SP operator+(SP u2); //cong 2 so phuc voi nhau
SP operator-(SP u2); //tru 2 so phuc voi nhau
SP operator*(SP u2); //nhan 2 so phuc voi nhau
SP operator/(SP u2); //chia 2 so phuc voi nhau
SP operator-() //doi dau so phuc
{
SP u;
u.a=-this->a;
u.b=-this->b;
return u;
}
SP operator!() // lay so phuc lien hop cua so phuc
{
SP u;
Trang 8u.a=this->a;
u.b=-this->b;
return u;
}
};
ostream&operator<<(ostream&os,SP p)
{
if (p.b>=0)
os<<p.a<<'+'<<p.b<<'i';
else os<<p.a<<p.b<<'i';
return(os);
}
istream&operator>>(istream&is,SP &p)
{
p.a=atof(s);
p.b=atof(s);
return(is);
}
SP SP :: operator+(SP u2) //cong 2 so phuc voi nhau
{
SP u;
u.a=this->a+u2.a;
u.b=this->b+u2.b;
return u;
}
SP SP :: operator-(SP u2) //tru 2 so phuc voi nhau
{
SP u;
u.a=this->a-u2.a;
u.b=this->b-u2.b;
return u;
}
SP SP :: operator*(SP u2) //nhan 2 so phuc voi nhau
{
SP u;
u.a=this->a*u2.a-this->b*u2.b;
u.b=this->b*u2.a+this->a*u2.b;
return u;
}
SP SP :: operator/(SP u2) //chia 2 so phuc voi nhau
{
SP u;
u.a=(this->a*u2.a+this->b*u2.b)/(u2.a*u2.a+u2.b*u2.b);
u.b=(this->b*u2.a-this->a*u2.b)/(u2.a*u2.a+u2.b*u2.b);
Trang 9return u;
}
void main()
{
SP p,q,z,u,v;
SP s;
cin>>p>>q>>z>>u>>v; //nhap cac so phuc
s=(-p)*(p-(!q))/(u+v); //tinh ham cong tru nhan chia,dao dau,lien hop cac
cout<<"\n so phuc s="<<s;
}