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;
}
HK boy viết 11:50 ngày 01/10/2018
  • Căn lại dòng nhé. Như thế này khó nhìn quá.
  • Căn lại dòng đã rồi mình nhìn tiếp.
Tao Không Ngu. viết 11:54 ngày 01/10/2018

Hi Trong Lam.
Bạn chú ý CC một chút.
VD:

d=b*b-4*a*c;
d = b * b - 4 * a * c; \\Nên viết.
a==0&&b==0
(a == 0) && (b == 0) \\Nên viết. 

//Thêm tab vào. (Có lẽ là do web hiện thiếu.)
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;
    }
}

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.

Trong Lam viết 11:49 ngày 01/10/2018

Cảm ơn đã góp ý, để mình coi lại

Trong Lam viết 11:57 ngày 01/10/2018

cảm ơn đã góp ý lần đầu mình viết còn thiếu sót quá

Tao Không Ngu. viết 12:00 ngày 01/10/2018

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/

Cao Sơn Lộc viết 12:02 ngày 01/10/2018

ở 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

Trong Lam viết 12:03 ngày 01/10/2018

Anh mình quên cảm ơn bạn đã góp ý

Bài liên quan
0