Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: [BT]Tính toán trên phân số

  1. #1
    Ngày gia nhập
    03 2007
    Bài viết
    10

    Red face [BT]Tính toán trên phân số

    Các anh giúp em giải bài c này nhé:
    Nhập vào 2 phân số. Tính phân số tối giản của phép tính cộng ,trừ,nhân,chia 2 phân số. em bị sai cái hàm tối giản phân số nên phép trừ tính ra bị sai.Xin các anh sửa hộ,đây là bài của em làm.

    Code:
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct
    {
    	int tu;
    	int mau;
    }ps;
     void xuat(ps x,ps y);
    void nhap(ps &x,ps &y);
    ps congps(ps x,ps y);
    ps trups(ps x,ps y);
    ps nhanps(ps x,ps y);
    ps tgps(ps x);
    
    void main()
    {
    clrscr();
       ps x,y;
    
       nhap(x,y);
       xuat(x,y);
       printf ("\n tgps cong: %d/%d + %d/%d = %d/%d",x.tu,x.mau,y.tu,y.mau,tgps(congps(x,y)));
    
       printf ("\n tgps tru:  %d/%d - %d/%d = %d/%d",x.tu,x.mau,y.tu,y.mau,tgps(trups(x,y)));
    
       printf ("\n tgps nhan: %d/%d * %d/%d = %d/%d",x.tu,x.mau,y.tu,y.mau,tgps(nhanps(x,y)));
    
     getch();
    }
    void nhap(ps &x,ps &y)
    {
    	printf ("\n nhap tuva mau ps1: ");
    	scanf ("%d%d",&x.tu,&x.mau);
    	printf ("\n nhap tu va mau ps2: ");
    	scanf ("%d%d",&y.tu,&y.mau);
    }
    void xuat(ps x,ps y)
    {
    	printf ("\n ps1= %d/%d",x.tu,x.mau);
    	printf ("\n ps2= %d/%d",y.tu,y.mau);
    }
    ps congps(ps x,ps y)
    {
    	ps kq;
    	kq.tu=x.tu*y.mau+y.tu*x.mau;
    	kq.mau=x.mau*y.mau;
    	return kq;
    }
    ps trups(ps x,ps y)
    {
    	ps kq;
    	kq.tu=x.tu*y.mau-y.tu*x.mau;
    	kq.mau=x.mau*y.mau;
    
    	return kq;
    }
    ps nhanps(ps x,ps y)
    {
    	ps kq;
    	kq.tu=x.tu*y.tu;
    	kq.mau=x.mau*y.mau;
    	return kq;
    }
    ps tgps(ps x)
    {
    	ps y;
    	y=x;
    	while (x.tu!=x.mau)
    	{
    		if(x.tu>x.mau)
    		x.tu = x.tu-x.mau;
    		else
    		x.mau= x.mau-x.tu;
    	}
    
    	y.tu=y.tu/x.tu;
    	y.mau=y.mau/x.tu;
    
          return y;
    }

  2. #2
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Bạn cứ tính bình thường sau khi ra kết quả thì gán KQ=rutgon(KQ);
    //hàm rutgon()
    int USCLN(int a,int b)
    {
    while (a!=0&& b!=0)
    if(a>b) a=a-b;
    else b=b-a;
    if(a==0) return b;
    else return a;
    }
    phanso rut_gon(phanso a)
    {
    phanso c;
    c.tu=a.tu/USCLN(a.tu,a.mau);
    c.mau=a.mau/USCLN(a.tu,a.mau);
    return c;
    }

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Bạn nên chú ý điều kiên nhập, vì bạn để nhập đó người ta nhâp mẫu =0 thì sao.
    ///phải xét người ta người ta có nhập số int nữa không đó, bạn tự viết đi nhé
    Code:
    void nhap_phanso(phanso &a)
    {
    	printf("\nNhap tu so: ");
    	scanf("%d",&a.tu);
    	do
    	{
    	printf("\nNhap mau so: ");
    	scanf("%d",&a.mau);
    	if(a.mau==0)
    		{
    		textcolor(4);
    		cprintf("\nNhap lai mau so vi khong hop le:\n");
    		}
    	}
    	while(a.mau==0);
    }

  4. #4
    Ngày gia nhập
    03 2007
    Bài viết
    10

    cám ơn bạn đã giúp

Các đề tài tương tự

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Trả lời: 30
    Bài viết cuối: 15-02-2012, 07:03 PM
  3. Lập trình Socket trên C++ có thể giao tiếp chương trình Java trên Server được ko các
    Gửi bởi jacobkruse trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-11-2010, 11:10 PM
  4. Source code build trên Ubuntu có chạy được Trên Linux Kernel không ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 09:22 AM
  5. Lưu dữ liệu để trống trên một cell của datagirdview trên csdl Access như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-05-2009, 04:21 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn