01/10/2018, 09:48
Code giải phương trình bậc nhất, bậc 2, bậc 3
Chào mọi người, em học xây dựng nhưng cũng thích lập trình. Em đang tập tành học c++.Em vừa viết code tính phuong trình bậc nhất, bậc hai, bậc 3. Nay em post đoạn code này lên mọi người xem giùm còn chỗ nào thiếu sót không. Cảm ơn
#include <iostream>
#include<cmath>
#include<windows.h>
#define PI 3.1415926535898
using namespace std;
//tinh phuyong trinh bac nhat
void bacnhat(float a,float b)
{
if (a==0 && b==0)
{
cout<<"phuong trinh vo so nghiem"<<endl;
}
else if (a==0 && b!=0)
{
cout<<"phuong trinh vo nghiem"<<endl;
}
else
{
cout<<"phuong trinh co nghiem x= "<<-b/a<<endl;
}
}
//tinh phuyong trinh bac 2
void bachai(float a,float b,float c)
{
float d,x1,x2;
if(a==0)
{
cout<<"phuong trinh vo nghiem"<<endl;
}
else
{
d=b * b-4 *a *c;
if(d<0)
{
cout<<"phuong trinh vo nghem"<<endl;
}
else if(d==0)
{
cout<<"phuong trinh co nghiem kep x1=x2="<<-b/(2*a)<<endl;
}
else
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
cout<<"phuong trinh co 2 ngiem phan biet:"<<endl;
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
}
}
}
// tinh phuong trinh bac 3
void bacba(float a, float b, float c, float d)
{
float dt,k,x1,x2,x3,x;
if(a==0)
{
cout<<"Phuong trinh vo nghiem"<<endl;
}
dt=pow(b,2)-3*a*c;//delta=b*b-3*a*c
k=(9*a*b*c-2*pow(b,3)-27*pow(a,2)*d)/(2*sqrt(pow(fabs(dt),3)));
if(dt>0)
{
if(fabs(k)<=1)
{
x1=(2*sqrt(dt)*cos(acos(k)/3)-b)/(3*a);
x2=(2*sqrt(dt)*cos(acos(k)/3-(2*PI/3))-b)/(3*a);
x3=(2*sqrt(dt)*cos(acos(k)/3+(2*PI/3))-b)/(3*a);
cout<<"phuong trinh co 3 nghiem phan biet:"<<endl;
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"x3="<<x3<<endl;
}
if(fabs(k)>1)
{
x=((sqrt(dt)*fabs(k))/(3*a*k))*(pow((fabs(k)+sqrt(pow(k,2)-1)),1.0/3)+pow((fabs(k)-sqrt(pow(k,2)-1)),1.0/3))-(b/(3*a));
cout<<"Phuong trinh co 1 ngiem duy nhat la:"<<x<<endl;
}
}
else if(dt==0)
{
x=(-b-pow(-(pow(b,3)-27*a*a*d),1.0/3))/(3*a);//do ham pow khong dung doi so am nen ta phai doi dau.Ct goc:x=(-b+pow(pow(b,3)-27*a*a*d),1.0/3))/(3*a)
cout<<"Phuong trinh co nghiem boi:"<<x<<endl;
}
else
{
x=(sqrt(fabs(dt))/(3*a))*(pow((k+sqrt(k*k+1)),1.0/3)-pow(-(k-sqrt(k*k+1)),1.0/3))-(b/(3*a));
cout<<"phuong trinh co 1 nghiem duy nhat:"<<x<<endl;
}
}
int main()
{
float a,b,c,d;
int chon;
cout<<"1.Phuong trinh bac nhat:ax+b=0"<<endl;
cout<<"2.Phuong trinh bac hai:ax^2+bx+c=0"<<endl;
cout<<"3.Phuong trinh bac hai:ax^3+bx^2+cx+d=0"<<endl;
cout<<"Hay chon dang phuong trinh bang cach an so tuong ung:";
cin>>chon;
switch(chon)
{
case 1: //Chon 1 de giai phuong trinh bac 1
{
cout<<"Ban da chon phuong trinh bac 1:"<<endl;
cout<<"nhap a,b:"<<endl;
cin>>a>>b;
bacnhat(a,b);
break;
}
case 2: //Chon 2 de giai phuong trinh bac 2
{
cout<<"Ban da chon phuong trinh bac 2:"<<endl;
cout<<"nhap a,b,c:"<<endl;
cin>>a>>b>>c;
bachai(a,b,c);
break;
}
case 3: //Chon3 de giai phuong trinh bac 3
{
cout<<"Ban da chon phuong trinh bac 3:"<<endl;
cout<<"nhap a,b,c,d"<<endl;
cin>>a>>b>>c>>d;
bacba(a,b,c,d);
break;
}
}
system("pause");
return 0;
}
Bài liên quan
Hi Trong Lam.
Bạn chú ý CC một chút.
VD:
swith casre thi them cai enum hoặc định nghĩa hằng cho nó dễ đọc.
P/S Code không chạy < Code chạy được < Code chạy tốt < Code chạy tốt + Dễ đọc < Code chạy tốt + Dễ đọc + Dễ mở rộng.
Cảm ơn đã góp ý, để mình coi lại
cảm ơn đã góp ý lần đầu mình viết còn thiếu sót quá
Hi Trong Lam.
THường thì không mấy tài liệu nhắc vê CC
http://tapchilaptrinh.vn/2012/07/25/coding-conventions-lat-mem-buoc-chat/
ở phương trình bậc 2 nếu a == 0 thì phương trình có nghiệm là -c/b chứ bác, còn nếu a == 0 và b == 0 mới là vô nghiệm
Anh mình quên cảm ơn bạn đã góp ý