30/09/2018, 18:18

mọi người cho minh hỏi 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<<"
 nhap cac PS p,q,z,u,v: 
";
		cin>>p>>q>>z>>u>>v;
		s=(p-q*z)/(u+v);
		cout<<"("<<p<<"- "<<q<<"*"<<z<< "*"<<z<<")/("<<u<<"+"<<v<<") la"<< s ;
		system("PAUSE");

}
' ' '
Dương Nylghara viết 20:24 ngày 30/09/2018

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

Nhuyngo Nhuyngo95 viết 20:25 ngày 30/09/2018

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

Dương Nylghara viết 20:22 ngày 30/09/2018

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

coming soon…

Nhuyngo Nhuyngo95 viết 20:22 ngày 30/09/2018

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

Dương Nylghara viết 20:20 ngày 30/09/2018

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");

}
huy vo viết 20:32 ngày 30/09/2018

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…

Dương Nylghara viết 20:32 ngày 30/09/2018

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
P/s : Học class…viết nó sẽ dễ hơn đó

Nhuyngo Nhuyngo95 viết 20:27 ngày 30/09/2018

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;
Dương Nylghara viết 20:21 ngày 30/09/2018

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…

Nhuyngo Nhuyngo95 viết 20:27 ngày 30/09/2018

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

Dương Nylghara viết 20:30 ngày 30/09/2018

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

Dương Nylghara viết 20:25 ngày 30/09/2018

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

Nhuyngo Nhuyngo95 viết 20:23 ngày 30/09/2018

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

Bài liên quan
0