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

Đề tài: Cách nào để lập trình chia đa thức

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

    Mặc định Cách nào để lập trình chia đa thức

    Bác nào chỉ em cách lập trình chia đa thức với, em cài đặt đa thức bằng danh sách nhưng không biết cách chia ra sao cả:
    Đây là khai báo:
    #define Leght 100
    typedef int Position;
    typedef struct{
    int somu;
    float heso;
    }ElementType;
    typedef struct{
    ElementType Element[Leght];
    Position Next;
    }List;

  2. #2
    Ngày gia nhập
    10 2008
    Bài viết
    171

    Mình nghĩ chắc bạn biết chia đa thức trong toán chứ ????

    Cứ như thế mà làm cho khỏe .

    À mà mình nghĩ khai báo nó chỉ cần thế này thôi .

    C Code:
    1. struct
    2. {int somu ; // chua so mu cua da thuc
    3.  float *heso ; // chua he so cua da thuc
    4. };
    chicken

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

    Trích dẫn Nguyên bản được gửi bởi HTT90 Xem bài viết
    Mình nghĩ chắc bạn biết chia đa thức trong toán chứ ????

    Cứ như thế mà làm cho khỏe .

    À mà mình nghĩ khai báo nó chỉ cần thế này thôi .

    C Code:
    1. struct
    2. {int somu ; // chua so mu cua da thuc
    3.  float *heso ; // chua he so cua da thuc
    4. };
    ax, mình thử làm vậy rồi, nhưng nó không chỉ có phép tính đó nên khai báo vậy làm dài lắm

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

    Là sao mình ko hiểu . Mình làm trong C++ thấy ok mà . Ko dài lắm .
    chicken

  5. #5
    Ngày gia nhập
    10 2008
    Bài viết
    171

    Đây là code C++ mình post lại bạn xem thử nhé . Về thuật toán nó cũng tương tự thôi !!

    File dathuc.h

    C++ Code:
    1. #ifndef _DATHUC_H
    2. #define _DATHUC_H
    3. #include <iostream>
    4. using std::istream;
    5. using std::ostream;
    6. class dathuc
    7. {friend ostream &operator<<(ostream & , const dathuc &);
    8.  friend istream &operator>>(istream & , dathuc &);
    9.  public:
    10.     dathuc (int );
    11.     ~dathuc()
    12.     {delete [] ptr;
    13.     }
    14.     dathuc ( const dathuc & );
    15.     const dathuc &operator=(const dathuc &);
    16.     bool operator==(const dathuc &right )
    17.     {if ( bacdathuc != right.bacdathuc ) return false ;
    18.      else for ( int i = 0 ; i <= bacdathuc ; i++)
    19.              if ( ptr[i] != right.bacdathuc ) return false ;
    20.      return true ;
    21.     }
    22.     bool operator!=(const dathuc &right)
    23.     {return !(*this == right ) ;
    24.     }
    25.     dathuc operator+(const dathuc &) ;
    26.     dathuc operator-(const dathuc &) ;
    27.     dathuc operator*(const dathuc &);
    28.     dathuc operator/(const dathuc &);
    29.  private:
    30.     int *ptr;
    31.     int bacdathuc ;
    32. };
    33. #endif

    File dathuc.cpp

    C++ Code:
    1. #include <iostream>
    2. using std::cout;
    3. using std::cin;
    4. using std::endl;
    5. #include <iomanip>
    6. using std::setw;
    7. #include "da thuc.h"
    8. dathuc::dathuc( int bdt )
    9. {bacdathuc = bdt ;
    10.  ptr = new int[bacdathuc + 1] ;
    11.  for ( int i = 0 ; i <= bacdathuc ; i++)
    12.      ptr[i] = 0;
    13. }
    14. dathuc::dathuc(const dathuc &right )
    15. {bacdathuc = right.bacdathuc;
    16.  ptr = new int[bacdathuc + 1];
    17.  for ( int i = 0 ; i<= bacdathuc ; i++)
    18.      ptr[i] = right.ptr[i];
    19. }
    20. const dathuc &dathuc::operator=(const dathuc &right)
    21. {if ( *this != right )
    22.  {if(bacdathuc != right.bacdathuc)
    23.   {delete [] ptr;
    24.    bacdathuc = right.bacdathuc;
    25.    ptr = new int[bacdathuc];
    26.   }
    27.   for ( int i = 0 ; i <= bacdathuc ; i++)
    28.     ptr[i] = right.ptr[i];
    29.  }
    30.  return (*this);
    31. }
    32. dathuc dathuc::operator+(const dathuc &add )
    33. {int temp ;
    34.  temp = ((bacdathuc > add.bacdathuc ) ? bacdathuc : add.bacdathuc);
    35.  dathuc d(temp) ;
    36.  for ( int i = 0 ; i<= temp ; i++)
    37.  {if( bacdathuc >= i && add.bacdathuc >= i ) d.ptr[i] = ptr[i] + add.ptr[i];
    38.   else if ( add.bacdathuc < i ) d.ptr[i] = ptr[i] ;
    39.   else if ( bacdathuc < i ) d.ptr[i] = add.ptr[i];
    40.  }
    41.  while ( temp > 0 && d.ptr[temp] == 0 ) temp -- ;
    42.  d.bacdathuc = temp ;
    43.  return d;
    44. }
    45. dathuc dathuc::operator-(const dathuc &sub)
    46. {int i ;
    47.  int temp = (bacdathuc > sub.bacdathuc ) ? bacdathuc : sub.bacdathuc;
    48.  dathuc d(temp);
    49.  for ( i = 0 ; i<= temp ; i++)
    50.  {if( bacdathuc >= i && sub.bacdathuc >= i ) d.ptr[i] = ptr[i] - sub.ptr[i];
    51.   else if ( sub.bacdathuc < i ) d.ptr[i] = ptr[i] ;
    52.   else if ( bacdathuc < i ) d.ptr[i] = sub.ptr[i];
    53.  }
    54.  return d;
    55. }
    56. dathuc dathuc::operator*(const dathuc &nhan)
    57. {int temp ;
    58.  temp = bacdathuc + nhan.bacdathuc ;
    59.  dathuc d(temp) ;
    60.  for ( int i = 0 ; i<= bacdathuc ; i++)
    61.      for( int j = 0 ; j <= nhan.bacdathuc ; j++ )
    62.          d.ptr[i+j] = d.ptr[i + j] + ptr[i]*nhan.ptr[j];
    63.  return d;
    64. }
    65. dathuc dathuc::operator/(const dathuc &right)
    66. {int temp ;
    67.  if ( bacdathuc < right.bacdathuc ) return 0 ;
    68.  temp = bacdathuc - right.bacdathuc ;
    69.  dathuc d ( temp ) ;
    70.  dathuc temp1 (*this) ;
    71.  for ( int i = bacdathuc ; i >= right.bacdathuc ; i-- )
    72.  {d.ptr[ i - right.bacdathuc ] = temp1.ptr[i] /  right.ptr[right.bacdathuc] ;
    73.   if ( i - 1 >= right.bacdathuc )
    74.   {for ( int j = i - 1 , k = right.bacdathuc - 1 ; k >= 0 ; j-- , k-- )
    75.    temp1.ptr[j] -= d.ptr[i - right.bacdathuc] * right.ptr[k] ;
    76.   }
    77.  }
    78.  return d ;
    79. }
    80. ostream &operator<<(ostream &output , const dathuc &right)
    81. {output << "Cac he so : " ;
    82.  for ( int i = 0 ; i <= right.bacdathuc ; i++)
    83.      output << setw(4) << right.ptr[i];
    84.  return output;
    85. }
    86. istream &operator>>(istream &input , dathuc &right)
    87. {cout << " Nhap he so : " ;
    88.  for ( int i = 0 ; i <= right.bacdathuc ; i++)
    89.     input >> right.ptr[i];
    90.  return input ;
    91. }

    File main.cpp

    C++ Code:
    1. #include <iostream>
    2. using std::cout;
    3. using std::cin;
    4. using std::endl;
    5. #include "da thuc.h"
    6. int main()
    7. {dathuc dathuc1(3) , dathuc2 (1) ;
    8.  cin >> dathuc1 >> dathuc2 ;
    9.  cout << " + " << dathuc1 + dathuc2 << endl ;
    10.  cout << " - " << dathuc1 - dathuc2 << endl ;
    11.  cout << " * " << dathuc1 * dathuc2 << endl ;
    12.  cout << " / " << dathuc1 / dathuc2 << endl ;
    13.  return 0;
    14. }

    Code ko được đẹp lắm bạn thông cảm .
    chicken

  6. #6
    Ngày gia nhập
    03 2010
    Bài viết
    32

    Mặc định Cách nào để lập trình chia đa thức

    Trích dẫn Nguyên bản được gửi bởi HTT90 Xem bài viết
    Đây là code C++ mình post lại bạn xem thử nhé . Về thuật toán nó cũng tương tự thôi !!

    File dathuc.h

    C++ Code:
    1. #ifndef _DATHUC_H
    2. #define _DATHUC_H
    3. #include <iostream>
    4. using std::istream;
    5. using std::ostream;
    6. class dathuc
    7. {friend ostream &operator<<(ostream & , const dathuc &);
    8.  friend istream &operator>>(istream & , dathuc &);
    9.  public:
    10.     dathuc (int );
    11.     ~dathuc()
    12.     {delete [] ptr;
    13.     }
    14.     dathuc ( const dathuc & );
    15.     const dathuc &operator=(const dathuc &);
    16.     bool operator==(const dathuc &right )
    17.     {if ( bacdathuc != right.bacdathuc ) return false ;
    18.      else for ( int i = 0 ; i <= bacdathuc ; i++)
    19.              if ( ptr[i] != right.bacdathuc ) return false ;
    20.      return true ;
    21.     }
    22.     bool operator!=(const dathuc &right)
    23.     {return !(*this == right ) ;
    24.     }
    25.     dathuc operator+(const dathuc &) ;
    26.     dathuc operator-(const dathuc &) ;
    27.     dathuc operator*(const dathuc &);
    28.     dathuc operator/(const dathuc &);
    29.  private:
    30.     int *ptr;
    31.     int bacdathuc ;
    32. };
    33. #endif

    File dathuc.cpp

    C++ Code:
    1. #include <iostream>
    2. using std::cout;
    3. using std::cin;
    4. using std::endl;
    5. #include <iomanip>
    6. using std::setw;
    7. #include "da thuc.h"
    8. dathuc::dathuc( int bdt )
    9. {bacdathuc = bdt ;
    10.  ptr = new int[bacdathuc + 1] ;
    11.  for ( int i = 0 ; i <= bacdathuc ; i++)
    12.      ptr[i] = 0;
    13. }
    14. dathuc::dathuc(const dathuc &right )
    15. {bacdathuc = right.bacdathuc;
    16.  ptr = new int[bacdathuc + 1];
    17.  for ( int i = 0 ; i<= bacdathuc ; i++)
    18.      ptr[i] = right.ptr[i];
    19. }
    20. const dathuc &dathuc::operator=(const dathuc &right)
    21. {if ( *this != right )
    22.  {if(bacdathuc != right.bacdathuc)
    23.   {delete [] ptr;
    24.    bacdathuc = right.bacdathuc;
    25.    ptr = new int[bacdathuc];
    26.   }
    27.   for ( int i = 0 ; i <= bacdathuc ; i++)
    28.     ptr[i] = right.ptr[i];
    29.  }
    30.  return (*this);
    31. }
    32. dathuc dathuc::operator+(const dathuc &add )
    33. {int temp ;
    34.  temp = ((bacdathuc > add.bacdathuc ) ? bacdathuc : add.bacdathuc);
    35.  dathuc d(temp) ;
    36.  for ( int i = 0 ; i<= temp ; i++)
    37.  {if( bacdathuc >= i && add.bacdathuc >= i ) d.ptr[i] = ptr[i] + add.ptr[i];
    38.   else if ( add.bacdathuc < i ) d.ptr[i] = ptr[i] ;
    39.   else if ( bacdathuc < i ) d.ptr[i] = add.ptr[i];
    40.  }
    41.  while ( temp > 0 && d.ptr[temp] == 0 ) temp -- ;
    42.  d.bacdathuc = temp ;
    43.  return d;
    44. }
    45. dathuc dathuc::operator-(const dathuc &sub)
    46. {int i ;
    47.  int temp = (bacdathuc > sub.bacdathuc ) ? bacdathuc : sub.bacdathuc;
    48.  dathuc d(temp);
    49.  for ( i = 0 ; i<= temp ; i++)
    50.  {if( bacdathuc >= i && sub.bacdathuc >= i ) d.ptr[i] = ptr[i] - sub.ptr[i];
    51.   else if ( sub.bacdathuc < i ) d.ptr[i] = ptr[i] ;
    52.   else if ( bacdathuc < i ) d.ptr[i] = sub.ptr[i];
    53.  }
    54.  return d;
    55. }
    56. dathuc dathuc::operator*(const dathuc &nhan)
    57. {int temp ;
    58.  temp = bacdathuc + nhan.bacdathuc ;
    59.  dathuc d(temp) ;
    60.  for ( int i = 0 ; i<= bacdathuc ; i++)
    61.      for( int j = 0 ; j <= nhan.bacdathuc ; j++ )
    62.          d.ptr[i+j] = d.ptr[i + j] + ptr[i]*nhan.ptr[j];
    63.  return d;
    64. }
    65. dathuc dathuc::operator/(const dathuc &right)
    66. {int temp ;
    67.  if ( bacdathuc < right.bacdathuc ) return 0 ;
    68.  temp = bacdathuc - right.bacdathuc ;
    69.  dathuc d ( temp ) ;
    70.  dathuc temp1 (*this) ;
    71.  for ( int i = bacdathuc ; i >= right.bacdathuc ; i-- )
    72.  {d.ptr[ i - right.bacdathuc ] = temp1.ptr[i] /  right.ptr[right.bacdathuc] ;
    73.   if ( i - 1 >= right.bacdathuc )
    74.   {for ( int j = i - 1 , k = right.bacdathuc - 1 ; k >= 0 ; j-- , k-- )
    75.    temp1.ptr[j] -= d.ptr[i - right.bacdathuc] * right.ptr[k] ;
    76.   }
    77.  }
    78.  return d ;
    79. }
    80. ostream &operator<<(ostream &output , const dathuc &right)
    81. {output << "Cac he so : " ;
    82.  for ( int i = 0 ; i <= right.bacdathuc ; i++)
    83.      output << setw(4) << right.ptr[i];
    84.  return output;
    85. }
    86. istream &operator>>(istream &input , dathuc &right)
    87. {cout << " Nhap he so : " ;
    88.  for ( int i = 0 ; i <= right.bacdathuc ; i++)
    89.     input >> right.ptr[i];
    90.  return input ;
    91. }

    File main.cpp

    C++ Code:
    1. #include <iostream>
    2. using std::cout;
    3. using std::cin;
    4. using std::endl;
    5. #include "da thuc.h"
    6. int main()
    7. {dathuc dathuc1(3) , dathuc2 (1) ;
    8.  cin >> dathuc1 >> dathuc2 ;
    9.  cout << " + " << dathuc1 + dathuc2 << endl ;
    10.  cout << " - " << dathuc1 - dathuc2 << endl ;
    11.  cout << " * " << dathuc1 * dathuc2 << endl ;
    12.  cout << " / " << dathuc1 / dathuc2 << endl ;
    13.  return 0;
    14. }

    Code ko được đẹp lắm bạn thông cảm .
    hix, mình chưa học xong C++ nên nhìn chả hiểu gì cả. nhưng dù sao cung thank.

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 AM

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