Tìm dạng tối giản của phân số

Mọi người tìm giúp em chỗ sai với ạ!!

  int a,b,a1,b1,U;
    do
    {
        printf("Nhap vao a1= ");
        scanf("%d",&a1);
        printf("\nNhap vao b1= ");
        scanf("%d",&b1);
        if (b1==0)
        {
            printf("\nGia tri cua b khong hop ly, xin kta lai!");
        }
    }while (b1==0);
    a1=a;
    b1=b;
    if(a==0)
    {
        printf("\n ket qua la 0");
    }
    else
    {
        while (a!=b)
    {
        if(a>b)
        {
            a=a-b;
        }
        else if(b>a)
        {
            b=b-a;
        }
    }
            U=a;

    }
    printf("\n Phan so toi gian la %d/%d",a1/U,b1/U);
    getch ();
    return 0;
}
if (a>b) a-=b;
2 Likes

oh em viết nhầm nhưng vẫn chưa ra ạ… :joy:

1 Like

chỗ này ngược rồi. phải là

a = a1;
b = b1;
2 Likes

:grin: oaa
ơ thế nó khác nhau ạ?:laughing:

khác nhau chứ.
lệnh trên sẽ lấy giá trị ở vế phải gán cho biến ở vế trái.

4 Likes

Khi vấn đề được giải quyết bạn thử tạo update nó xem sao :stuck_out_tongue_closed_eyes:
Tạo một hàm để xử lý bài toán,Biết đâu nhìn code nó sẽ đỡ rối hơn đó :smiley:
Bạn có thể tạo một hàm tìm UCLN của 2 số chẳng hạn :smiley:

1 Like

hàm ạ? em mới học đến vòng lặp thôi cũng tạo hàm dc ạ?
làm ntn ạ?:grinning:

1 Like

mk nghĩ cái này đơn giản hơn

#include<conio.h>

int main()
{
	int a,b,i;
	printf("nhap tu so a=");
	scanf("%d",&a);
	printf("\n nhap mau so b=");
	scanf("%d",&b);
	if(b==0) printf("\n phan so khong ton tai");
	for(i=(int)(a/2);i>1;i--)
	{
		if(a%i==0 && b%i==0)
		{
		printf("\n phan so toi gian la %d/%d",a/i,b/i);
		break;}
	}
	getch();
}
1 Like

Cách của a ngắn hơn thật :smiley:

#include <bits/stdc++.h>
using namespace std;

int main()
{
long long a,b,i,ucln;
cin>>a>>b;
ucln = __gcd(a,b);
cout<<a/ucln<<"/"<<b/ucln;
}
2 Likes

Hàm này chỉ gcc có thôi :slight_smile:

2 Likes

Đỉnh cao!!!
:heartpulse: :heartpulse: :heartpulse:

#include <iostream>
using namespace std;
int t,m;
int main ()
{
    cout<<"Nhap tu so:";cin >>t;
    cout<<"nhap tu so:";cin >>m;
    if(m<0)
    {
     cout<<-1*/__gcd (t,m)<<"/"<<-1*m/__gcd(t;m);
    }
    else cout<<t/__gcd (t,m)<<"/"<<m/__gcd(t,m);
    return 0;
}

mọi người xem giúp em sai ở đâu được không ạ

Bạn tự xem lại 2 chỗ này.

Code bị biên dịch lỗi thì bạn phải xem lỗi biên dịch là gì trước đã.

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