Code không in ra kết quả của 1 biểu thức tính toán phân số

code này bị lỗi gì mà không xuất s ra được vậy

#include<conio.h>
#include<iostream>
#include<math.h>
using namespace std;
typedef struct PS
{
    int a,b;
}PS;
ostream&operator<<(ostream &os,PS p);
istream&operator>>(istream& is,PS&p);
int ucln(int x,int y);
PS rutgon(PS p);
    PS operator+(PS p1,PS p2);
    PS operator-(PS p1,PS p2);
    PS operator*(PS p1,PS p2);
    PS operator/(PS p1,PS p2);
    ostream&operator<<(ostream &os,PS p)//TOAN TU XUAT
    {
     os<<p.a<<"/"<<p.b;
     return os;
    }
    istream&operator>>(istream& is,PS&p)//TOAN TU NHAP
    {
        cout<<"nhap tu va mau= ";
        is>>p.a>>p.b;
        return is;
    }
    int ucln(int x,int y)
    {
     int xc,xd;
     xc=x; xd=y;
     while (xc!=xd)
         if(xc>xd)
             xc-=xd;
         else
             xd=-xc;
     return xc;
    }
    PS rutgon(PS p)
    {
     PS q;
     int tam= ucln(p.a,p.b);
      q.a=p.a/tam;
       q.b=p.b/tam;
     return q;
    }
    PS operator+(PS p1,PS p2)
    {
    PS q;
    q.a=p1.a*p2.b+p2.b*p1.a;
    q.b=p1.b*p2.a;
    return (rutgon(q));
    
    }
     PS operator-(PS p1 ,PS p2)
     {
      PS q;
      q.a=p1.a*p2.b-p2.a*p1.b;
      q.b=p1.b*p2.a;
      return(rutgon(q));
     
     }
     PS operator*(PS p1,PS p2)
     {
      PS q;
      q.a=p1.a*p2.b;
      q.b=p1.b*p2.a;
      return(rutgon(q));
     
     }
     PS operator/(PS p1,PS p2)
     {
       PS q;
      q.a=p1.a*p2.b;
      q.b=p1.b*p2.a;
      return(rutgon(q));
     
     }
void main()
{

        PS p,q,z,u,v;
        PS s;
        cout<<"\n nhap cac PS p,q,z,u,v: \n";
        cin>>p>>q>>z>>u>>v;
        s=(p-q*z)/(u+v);
        cout<<"("<<p<<"- "<<q<<"*"<<z<< "*"<<z<<")/("<<u<<"+"<<v<<") la"<< s ;
        system("PAUSE");

}

đã làm như này rồi sao không đưa vào một class PhanSo

minh chua học class ak
bạn có cách nào giải quyết hộ mình với

Mình debug thì thấy lỗi ở ngay chỗ này

(p-q*z)
  • Lỗi toán tử nhân ( * ) nữa nha ^^
  • Lỗi toán tử cộng ( + ) nữa nha ^^
  • Trừ nữa ^^
  • Lỗi hàm rút gọn nữa ^^

debug ra một đống :smiley:

coming soon…

1 Like

sao lạ thế máy mk đưa vào không báo lổi vậy

Full code

#include<conio.h>
#include<iostream>
#include<math.h>
using namespace std;
typedef struct PhanSo
{
    int a,b;
} PS;
ostream&operator<<(ostream &os,PS p);
istream&operator>>(istream& is,PS&p);
int ucln(int x,int y);
PS rutgon(PS p);
PS operator+(PS p1,PS p2);
PS operator-(PS p1,PS p2);
PS operator*(PS p1,PS p2);
PS operator/(PS p1,PS p2);



ostream&operator<<(ostream &os,PS p)//TOAN TU XUAT
{
    os<<p.a<<"/"<<p.b;
    return os;
}
istream&operator>>(istream& is,PS& p)//TOAN TU NHAP
{
    cout<<"\nNhap Tu So : ";
    is>>p.a;
    cout<<"\nNhap Mau So: ";
    is>>p.b;
    return is;
}
int ucln(int a,int b)
{
    if(a==0)
        return b;
    return(b%a,a);

    //return xc;
}
PS rutgon(PS p)
{
    PS q;
    int tam= ucln(p.a,p.b);
    q.a=p.a/tam;
    q.b=p.b/tam;
    return q;
}
PS operator+(PS p1,PS p2)
{
    PS q;
    q.a=p1.a*p2.b+p2.b*p1.a;


    q.b=p1.b*p2.b;
    return q;

}
PS operator-(PS p1 ,PS p2)
{
    PS q;
    q.a=p1.a*p2.b-p2.a*p1.b;
    q.b=p1.b*p2.b;
    return q;

}
PS operator*(PS p1,PS p2)
{
    PS q;
    q.a=p1.a*p2.a;
    q.b=p1.b*p2.b;
    return q;

}
PS operator/(PS p1,PS p2)
{
    PS q;
    q.a=p1.a*p2.b;


    q.b=p1.b*p2.a;
    return q;

}

int main()
{

    PS p,q,z,u,v;
    PS s;
    cout<<"\nNhap Vao Phan So P: ";
    cin>>p;
    cout<<"\nNhap Vao Phan So Q: ";
    cin>>q;
    cout<<"\nNhap Vao Phan So Z: ";
    cin>>z;
    cout<<"\nNhap Vao Phan So U: ";
    cin>>u;
    cout<<"\nNhap Vao Phan So V: ";
    cin>>v;
   
    s=(p-q*z)/(u+v);
    
    cout<<rutgon(s);
//        system("PAUSE");

}

Quy đồng phân số sai hết rồi =)), nhìn sơ qua từ + - * / đều sai hết…
Phân số nên ghi rõ cái nào là tử cái nào là mẫu, đừng có đặt a b như thế nhìn vào rất dễ nhức đầu…

1 Like

Mình đã fix mấy lỗi ở trên…bạn thử so sánh 2 code của bạn với của mình khác chỗ nào, chỗ nào không hiểu có thể hỏi bất cứ lúc nào :smile:
P/s : Học class…viết nó sẽ dễ hơn đó

bạn có biết câu lệnh này của tui tại sao sai không
nó khác gì so với câu lệnh của bạn vậy

int ucln(int x,int y)
	{
	 int xc,xd;
	 xc=x; xd=y;
	 while (xc!=xd)
		 if(xc>xd)
			 xc-=xd;
		 else
			 xd=-xc;
	 return xc;
	}
	PS rutgon(PS p)
	{
	 PS q;
	 int tam= ucln(p.a,p.b);
	  q.a=p.a/tam;
	   q.b=p.b/tam;
	 return q;

Thực chất của bạn sai chính là ở tìm ucln

xd=-xc;  ????????? cài gì đây ??? :smile: sửa lại là đúng thôi

của mình thực ra là đệ quy thôi.
p/s : mình lười đọc code thấy sao sao ấy…cái viết lại thôi…:slight_smile:

mk chinh dươc rùi :grinning:
nếu giả sử đề bài yêu cầu xuất cộng ra thì xuấ sao bạn

là sao không hiểu ý ???

có phải như này …!!

giống kết quả trước rùi
cụ thể là xuất cộng ,trừ nhân chia phân số ra đó

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?