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.

2 posters

    +,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm 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

    +,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm nào Empty +,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm nào

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

    Code:
    #include<stdio.h>
    #include<ctype.h>
    #include<conio.h>
    typedef struct
    {
        float sm;
        float hs;
    }dathuc;
    typedef struct NODE
    {
        dathuc info;
        NODE* pnext;
    };
    typedef struct
    {
        NODE* phead;
        NODE* ptail;
        int n;
    }List;
    NODE* GetNode(dathuc x);
    void AddFirst(List &l,NODE* new_ele);
    NODE* InsertHead(List &l,dathuc x);
    void Init(List &l);
    void InPut(List &l);
    void OutPut(List l);
    void Multiplication(List &l,int k);
    void Addition(List &l1,List l2);
    int Like(List &l1,NODE* ele);
    void Substraction(List &l1,List l2);
    int Like1(List &l1,NODE* ele);
    void AddTail(List &l,NODE* new_ele);
    NODE* InsertTail(List &l,dathuc x);
    void AddAfter(List &l,NODE* q,NODE* new_ele);
    NODE* InsertAfter(List &l,NODE* q,dathuc x);
    void Multip(List l1,List l2,List &l);
    dathuc RemoveHead(List &l);
    void RemoveAfter(List &l,NODE* q);
    void Devide(List &l1,List l2,List &l);
    int main()
    {
        List l1,l2,l;
        printf("Da thuc thu nhat:");
        Init(l1);
        InPut(l1);
        printf("\nDa thuc vua nhap la :\n");
        OutPut(l1);
        printf("\nDa thuc thu hai:");
        Init(l2);
        InPut(l2);
        printf("Da thuc vua nhap la:\n");
        OutPut(l2);
        Init(l);
        //Tuy phep muon thuc hien goi ham tuong ung ,o day dang la phep chia
        Devide(l1,l2,l);
        printf("\n");
        OutPut(l);
        printf("+");
        OutPut(l1);
        getch();
       
    }
    NODE* GetNode(dathuc x)
    {
        NODE* p;
        p=new NODE;
        if(p==NULL)
        {
            printf("Khong du bo nho!");
            return NULL;
        }
        p->info=x;
        p->pnext=NULL;
        return p;
    }
    void AddFirst(List &l,NODE* new_ele)
    {
        if(l.phead==NULL)
            l.phead=l.ptail=new_ele;
        else
        {
            new_ele->pnext=l.phead;
            l.phead=new_ele;
        }
    }
    NODE* InsertHead(List &l,dathuc x)
    {
        NODE* new_ele=GetNode(x);
        if(new_ele==NULL) return NULL;
        AddFirst(l,new_ele);
        return new_ele;
    }
    void AddTail(List &l,NODE* new_ele)
    {
        if(l.phead==NULL)
        {
        l.phead=l.ptail=new_ele;
        }
        else
        {
            l.ptail->pnext=new_ele;
            l.ptail=new_ele;
        }
    }
    NODE* InsertTail(List &l,dathuc x)
    {
          NODE* new_ele=GetNode(x);
          if(new_ele==NULL) return NULL;
          AddTail(l,new_ele);
          return new_ele;
    }
    void AddAfter(List &l,NODE* q,NODE* new_ele)
    {
        if(q!=NULL)
        {
                    new_ele->pnext=q->pnext;
                    q->pnext=new_ele;
                    if(q==l.ptail)
                    l.ptail=new_ele;
        }
        else
        AddFirst(l,new_ele);
    }
    NODE* InsertAfter(List &l,NODE* q,dathuc x)
    {
        NODE* new_ele=GetNode(x);
        if(new_ele==NULL) return NULL;
        AddAfter(l,q,new_ele);
        return new_ele;
    }
    dathuc RemoveHead(List &l)
    {
          NODE* p;
          dathuc x;
          if(l.phead!=NULL)
          {
                            p=l.phead;
                            x=p->info;
                            l.phead=l.phead->pnext;
                            delete p;
                            if(l.phead==NULL) l.ptail=NULL;
          }
          return x;
    }
    void RemoveAfter(List &l,NODE* q)
    {
        NODE* p;
        if(q!=NULL)
        {
                    p=q->pnext;
                    if(p!=NULL)
                    {
                              if(p==l.ptail) l.ptail=q;
                              q->pnext=p->pnext;
                              delete p;
                    }
        }
        else RemoveHead(l);
    }                   
    void Init(List &l)
    {
        l.phead=l.ptail=NULL;
    }
    void InPut(List &l)
    {
        int i=0;
        while(1)
        {
            dathuc x;
            printf("\nNhap so mu cua x thu %d:",i+1);
            scanf("%f",&x.sm);
            printf("Nhap he so cua x thu %d:",i+1);
            scanf("%f",&x.hs);
            InsertHead(l,x);
            i++;
            printf("\nBan co muon nhap tiep?-c/k");
            if(toupper(getch())=='K') break;   
        }
        l.n=i;
    }
    void OutPut(List l)
    {
        NODE* p;
        p=l.phead;
        printf("(");
        while(p!=NULL)
        {
            if(p->pnext==NULL) printf("%.2fx^%.0f)",p->info.hs,p->info.sm);
            else printf("%.2fx^%.0f + ",p->info.hs,p->info.sm);
            p=p->pnext;
        }
    }
    void Multiplication(List &l,int k)
    {
          NODE* p;
          p=l.phead;
          while(p!=NULL)
          {
              p->info.hs=p->info.hs*k;
              p=p->pnext;
          }
    }
    void Addition(List &l1,List l2)
    {
        NODE* p,q;
        p=l2.phead;
        int a[l2.n];
        int i=0;
        for(i=0;i<l2.n;i++)
            a[i]=1;
        i=0;
          while(p!=NULL)
        {           
              if(Like(l1,p)) a[i]=0;
              if(a[i]!=0) InsertHead(l1,p->info);
              i++;
              p=p->pnext;
        }             
    }
    int Like(List &l1,NODE* ele)
    {
        NODE* p;
        p=l1.phead;
        while(p!=NULL)
        {
              if(p->info.sm==ele->info.sm) 
              {                           
                    p->info.hs+=ele->info.hs;
                    return 1;
              }
              p=p->pnext;
        }
        return 0;
    }
    void Substraction(List &l1,List l2)

        NODE* p,q;
        p=l2.phead;
        int a[l2.n];
        int i=0;
        for(i=0;i<l2.n;i++)
            a[i]=1;
        i=0;
          while(p!=NULL)
        {           
              if(Like1(l1,p)) a[i]=0;
              if(a[i]!=0)
              {
                          p->info.hs*=-1;
                          InsertHead(l1,p->info);
              }
              i++;
              p=p->pnext;
        } 
    }
    int Like1(List &l1,NODE* ele)
    {
        NODE* p;
        p=l1.phead;
        while(p!=NULL)
        {
              if(p->info.sm==ele->info.sm) 
              {                           
                    p->info.hs-=ele->info.hs;
                    return 1;
              }
              p=p->pnext;
        }
        return 0;
    }

    void Multip(List l1,List l2,List &l)
    {
        NODE* p;
        int k=2;
        p=l1.phead;
        while(p!=NULL)
        {
              NODE* q;
              q=l2.phead;
              while(q!=NULL)
              {
                    dathuc x;
                    x.sm=p->info.sm+q->info.sm;
                    x.hs=p->info.hs*q->info.hs;
                    if(k>0)
                    {
                          InsertTail(l,x);
                          k--;
                    }
                    else
                    {
                        NODE* o;
                        NODE* t;
                        int temp=0,flag=1;
                        o=l.phead;
                        while(o!=NULL)
                        {         
                            if(x.sm==o->info.sm)
                            {
                                                  o->info.hs=o->info.hs+x.hs;
                                                  flag=0;
                                                  break;
                            }
                            o=o->pnext;
                        }
                        if(flag) InsertTail(l,x);               
                    }
                    q=q->pnext;
              }
              p=p->pnext;
        }
    }
    void Devide(List &l1,List l2,List &l)
    {
        NODE* p;
        while(1)
        {
                p=l1.phead;
                NODE* q;
                dathuc x;
                q=l2.phead;
                x.sm=p->info.sm-q->info.sm;
                x.hs=p->info.hs/q->info.hs;
                InsertTail(l,x);
                while(q!=NULL)
                {
                      p->info.hs-=(q->info.hs*x.hs);
                      p=p->pnext;
                      q=q->pnext;
                }   
              RemoveHead(l1);
              p=l1.phead;
              if(p->info.sm<l2.phead->info.sm) break;
        }

     
    Nào cùng vào nhớ lại những ngày đâu năm hai nhé +,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm nào 938564
    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

    +,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm nào Empty Re: +,-,*,/ hai đa thức.Vào cùng tưởng nhớ lại bài này đầu năm nào

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

    Bài này mình từng làm bằng mảng nhưng cuối cùng đến phần chia hai đa thức lại bị lỗi không thể sửa? Ngày đó nếu đã biết nhìu về linked list như bây h thì đâu đến nỗi, bài của bạn làm khá hay, thanks for sharing

      Hôm nay: 2/11/2024, 18:28