Information Technology VietNam

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

3 posters

    Tiếp tục nhìn lại bài Tập hợp Phân số nào

    DarkEternal
    DarkEternal
    New Member
    New Member


    Giới tính : Nam Bài gửi : 7
    Tổng Điểm : 15
    Điểm Thưởng : 4
    Sinh Nhật : 11/08/1990 Bị Dụ Dỗ : 01/12/2009
    Tuổi : 34

    Tiếp tục nhìn lại bài Tập hợp Phân số nào Empty Tiếp tục nhìn lại bài Tập hợp Phân số nào

    Bài gửi by DarkEternal 4/12/2009, 20:32

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<ctype.h>
    #define Max 100
    typedef struct
    {
            int tu;
            int mau;
    }ps;
    typedef struct
    {
        ps b[Max];
        int n;
    }songuyen;
    int Add(songuyen &a,ps x);
    int Del(songuyen &a,ps x);
    int Search(songuyen a,ps x);
    int IsFull(songuyen a);
    int IsEmpty(songuyen a);
    void InPut(songuyen &a);
    void OutPut(songuyen a);
    void DelLike(songuyen &a);
    void Quicksort(songuyen &a,songuyen &b,int l,int r);
    void Hoi(songuyen a,songuyen b,songuyen &c);
    void Giao(songuyen a,songuyen b,songuyen &c);
    void PhanBu(songuyen c,songuyen &b);
    int BCNN(int a,int b);
    void quidong(songuyen &a);
    int main()
    {
        char t;
        songuyen a,c;
        int i;
        a.n=0;
        c.n=0;
        while(1)
        {     
                printf("\n1.Khoi tao Tap Hop");
                printf("\n2.Xuat Tap Hop");
                printf("\n3.Them phan tu vao Tap Hop");
                printf("\n4.Xoa phan tu");
                printf("\n5.Tim kiem phan tu thuoc Tap Hop");
                printf("\n6.Khoi tao mot Tap Hop thu 2");
                printf("\n7.Hoi cua 2 Tap Hop");
                printf("\n8.Giao cua 2 Tap Hop");
                printf("\n9.Hieu cua 2 Tap Hop");
                printf("\nBam Enter de ket thuc chuong trinh!!!\n");
                t=getch();
                if(t=='1') { InPut(a); 
                            songuyen b;
                            b=a;
                            quidong(b);
                            Quicksort(a,b,0,a.n-1);
                          }
                else if(t=='2')
                {    printf("\nTap Hop dang co la:");
                    OutPut(a);
                    }
              else if(t=='3')
                {
                    while(1)
                    {
                            ps x;
                            printf("\nNhap vao phan tu can them :");
                            scanf("%d/%d",&x.tu,&x.mau);
                            i=Add(a,x);
                            if(i==0) printf("\nChua them duoc phan tu!");
                            else    printf("\nDa them duoc phan tu!");
                            printf("\nBan co muon them tiep phan tu?-C/K");
                            if(toupper(getch())=='K') break;
                    }
                    DelLike(a);
                    songuyen b;
                    b=a;
                    quidong(b);
                    Quicksort(a,b,0,a.n-1);
                }
                else if(t=='4')
                {
                    while(1)
                    {
                            ps x;
                            printf("\nNhap vao phan tu can xoa :");
                            scanf("%d/%d",&x.tu,&x.mau);
                            i=Del(a,x);
                            if(i==0) printf("\nChua xoa duoc phan tu!");
                            else printf("\nDa xoa duoc phan tu!");
                            printf("\nBan co muon xoa tiep phan tu?-C/K");
                            if(toupper(getch())=='K') break;
                    }
                }
                else if(t=='5')
                {
                    while(1)
                    {
                            ps x;
                            printf("\nNhap phan so can tim:");
                            scanf("%d/%d",&x.tu,&x.mau);
                            i=Search(a,x);
                            if(i==0) printf("\nKhong co phan tu do trong Tap Hop!");
                            else printf("\nCo phan tu do trong Tap Hop!");
                            printf("\nBan co muon tim kiem phan tu?-C/K");
                            if(toupper(getch())=='K') break;
                    }
                }
                else if(t=='6')
                {
                    InPut(c);
                    songuyen b;
                    b=c;
                    quidong(b);
                    Quicksort(c,b,0,c.n-1);
                    printf("\nTap Hop 2 vua khoi tao la:");
                    OutPut(c);
                }
                else if(t=='7')
                {    songuyen b;
                    b.n=0;
                    printf("Hoi cua 2 Tap Hop la:");
                    Hoi(a,c,b);
                    OutPut(b);
                }
            else if(t=='8')
                {
                    songuyen b;
                    b.n=0;
                    printf("Giao cua 2 Tap Hop la:");
                    Giao(a,c,b);
                    OutPut(b);
                }
                else if(t=='9')
                {
                    songuyen b,d;
                    d=c;
                    b.n=0;
                    Giao(a,c,b);
                    printf("Hieu cua 2 Tap Hop la:");
                    PhanBu(b,d);
                    OutPut(d);
                    }
                else  break;
                }
    }
    void InPut(songuyen &a)
    {
        int i=0;
        //printf("Ban co muon nhap Tap Hop?-C/K");
        //if(toupper(getch())=='C')
        {
        while(1)
        {   
            if(IsFull(a))
            {   
                printf("\nTap Hop da day!!");
                break;
            }
            printf("\nNhap vao phan tu thu %d cua Tap Hop:",i+1);
            scanf("%d/%d",&a.b[i].tu,&a.b[i].mau);
            a.n++;
            printf("Co nhap tiep hay ko?-C/K");
            if(toupper(getch())=='K') break;
            i++;
        }
        }
        DelLike(a); 
    }
    void DelLike(songuyen &a)
    {    songuyen t;
        int b[Max],l=0;
        for(int i=0;i<a.n;i++)
        b[i]=1;
        for(int i=0;i<a.n;i++)
        {
                if(b[i]!=0)
                {
                            t.b[l]=a.b[i];
                            for(int j=i+1;j<a.n;j++)
                                    if((a.b[i].tu==a.b[j].tu)&&(a.b[i].mau==a.b[j].mau)) b[j]=0;
                            l++;
                }
        }
        t.n=l;
        a=t;
    }
       
    void OutPut(songuyen a)
    {
        int i;
        if(IsEmpty(a)) printf("\nTap hop rong!!");
        else
        {
            //printf("\nDay dang co la:");
            for(i=0;i<a.n;i++)
                printf("%d/%d    ",a.b[i].tu,a.b[i].mau);
        }
    }
    int IsEmpty(songuyen a)
    {
        if(a.n==0) return 1;
        else return 0;
    }
    int IsFull(songuyen a)
    {
        if(a.n==Max) return 1;
        else return 0;
    }
    int Add(songuyen &a,ps x)
    {
        if(IsFull(a))
        {
            printf("Tap Hop da day!");
            return 0;
        }
        a.n++;
        a.b[a.n-1]=x;
    }
    int Del(songuyen &a,ps x)
    {
        if(IsEmpty(a))
        {
            printf("Tap Hop rong!");
            return 0;
        }
        int i;
        for(i=0;i<a.n;i++)
                if((a.b[i].tu==x.tu)&&(a.b[i].mau==x.mau)) break;
        for(int j=i;j<a.n-1;j++)
        {
                a.b[j]=a.b[j+1];
        }
        a.b[a.n-1].tu=a.b[a.n-1].mau=0;
        a.n--;
        return 1;
    }
    void Quicksort(songuyen &a,songuyen &b,int l,int r)
    {
        if(IsEmpty(a)) printf("Tap Hop khong co phan tu de sap xep!");
        else
        {    int i,j;
              songuyen t;
              int x;
              x=b.b[(l+r)/2].tu;
              i=l;
              j=r;
              do
              {
                  while(b.b[i].tu<x) i++;
                  while(b.b[j].tu>x) j--;
                  if(i<=j)
              {
                    t.b[i]=a.b[i];
                    a.b[i]=a.b[j];
                    a.b[j]=t.b[i];
                    t.b[i]=b.b[i];
                    b.b[i]=b.b[j];
                    b.b[j]=t.b[i];
                    i++;
                    j--;
              }
              }while(i<j);
              if(l<j)
              Quicksort(a,b,l,j);
              if(i<r)
              Quicksort(a,b,i,r);
              }

    int BCNN(int a,int b)
    {  int bcnn,i,max;
        if(a>b) max=a;
        if(b>=a) max=b;
                for(i=max;i<=a*b;i++)
                  if((i%a==0)&&(i%b==0))  break;
                  bcnn=i;
        return(bcnn);
    }
    void quidong(songuyen &a)
    {
        int bcnn=a.b[0].mau,s;
        for(int i=1;i<a.n;i++)
        {
                s=BCNN(bcnn,a.b[i].mau);
                bcnn=s;
        }
        for(int i=0;i<a.n;i++)
        {     
                if((a.b[i].tu<0)&&(a.b[i].mau<0))
                {
                  s=(-1)*(bcnn/a.b[i].mau);
                  a.b[i].tu*=-1;
                  a.b[i].tu*=s;
                  a.b[i].mau=s;
                  }
                  else
                  {
                      s=(bcnn/a.b[i].mau);
                  a.b[i].tu=(a.b[i].tu*s);
                  a.b[i].mau=s;
                  }
        }


    int Search(songuyen a,ps x)
    {
        if(IsEmpty(a))
        {
            printf("Tap Hop Rong!");
            return 0;
        }
        for(int i=0;i<a.n;i++) 
        if((a.b[i].tu==x.tu)&&(a.b[i].mau==x.mau)) return 1;
        return 0;
    }       
    void Hoi(songuyen a,songuyen b,songuyen &c)
    {
        c=a;
        c.n=a.n+b.n;
        int j=0;
        for(int i=a.n;i<c.n;i++)
        {
                c.b[i]=b.b[j];
                j++;
        }
        DelLike(c);
    }
    void Giao(songuyen a,songuyen b,songuyen &c)
    {
        int k=0;
        for(int i=0;i<a.n;i++)
        {
              for(int j=0;j<b.n;j++)
              {
                  if((a.b[i].mau==b.b[j].mau)&&(a.b[i].tu==b.b[j].tu))
                  {
                    c.b[k]=a.b[i];
                    k++;
                    c.n++;
                    }
              }
        }
    }
    void PhanBu(songuyen c,songuyen &b)
    {
        int k=0;
        for(int i=0;i<c.n;i++)
        {
          for(int j=0;j<b.n;j++)
          {
                if((c.b[i].tu==b.b[j].tu)&&(c.b[i].mau==b.b[j].mau)) Del(b,c.b[i]);
          }
          }
    }             
       
       
    Không có một kiểu dữ liệu nào hay hơn Node trên C nhé . Tiếp tục nhìn lại bài Tập hợp Phân số nào 156139
    NgPPhung
    NgPPhung
    Super Moderator
    Super Moderator


    Giới tính : Nữ Bài gửi : 73
    Tổng Điểm : 144
    Điểm Thưởng : 8
    Sinh Nhật : 26/04/1990 Bị Dụ Dỗ : 11/09/2009
    Tuổi : 34

    Tiếp tục nhìn lại bài Tập hợp Phân số nào Empty Re: Tiếp tục nhìn lại bài Tập hợp Phân số nào

    Bài gửi by NgPPhung 4/12/2009, 22:01

    Hay thiệt! Bài này hồi đầu năm chưa có biết nhìu về danh sách liên kết nên làm không ra hồn Very Happy , mà hồi đã bạn đã làm đc như vậy rùi đáng nể thiệt, vote cho bạn 1 + nè Good
    Vy Thanh Định
    Vy Thanh Định
    Web Master
    Web Master


    Giới tính : Nam Bài gửi : 228
    Tổng Điểm : 544
    Điểm Thưởng : 16
    Sinh Nhật : 19/05/1990 Bị Dụ Dỗ : 11/09/2009
    Tuổi : 34

    Tiếp tục nhìn lại bài Tập hợp Phân số nào Empty Re: Tiếp tục nhìn lại bài Tập hợp Phân số nào

    Bài gửi by Vy Thanh Định 4/12/2009, 22:07

    Good, bài hay như vậy mà giờ mới chia sẻ, rất cám ơn bạn Laughing

    Sponsored content


    Tiếp tục nhìn lại bài Tập hợp Phân số nào Empty Re: Tiếp tục nhìn lại bài Tập hợp Phân số nào

    Bài gửi by Sponsored content


      Hôm nay: 25/11/2024, 13:28