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

Đề tài: [C]Bài tập tính đa thức - cần giúp đỡ

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

    Mặc định [C]Bài tập tính đa thức - cần giúp đỡ

    Đề bài: Viết chương trình tính đa thức a[n]*x mũ n + a[n-1]*x mũ (n-1) +...+ a[1]*x + a[0]
    Đoạn code em viết
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    void main()
    { int a[100],n,i,j,x;
      unsigned long p=0;
      clrscr();
      printf("Nhap so n: ");
      scanf("%d",&n);
      printf("Nhap so x: ");
      scanf("%d",&x);
      for(i=0;i<=n;i++)
      { printf("Nhap a[%d]: ",i);
    	scanf("%d",&a[i]);
      }
      for(i=n;i>=0;i--)
    	for(j=n;j>=0;j--)
    	   p=p+a[i]*pow(x,j);
      printf("Ket qua: %lu",p);
      getch();
    }
    Test với a chạy từ 0 đến n=5 có giá trị như sau : 2, 3, 4, 5, 6, 7
    và với x=2..
    Bấm máy tính tay thì ra kết quả là 384, còn chạy chương trình trên thì ra 1701...
    Sai chỗ nào ạ, xin mấy anh chỉ em dùm

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

    Hình như fải thế này :
    Code:
      for(i=n;i>=0;i--)
    	   p=p+a[i]*pow(x,i);

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bạn nên tham khảo lý thuyết lược đồ hoocner, đây là code bài này, mình làm lâu rồi bạn nên đọc nó để tham khảo:

    Bạn hãy xem lại code trên của bạn về cách trình bày nhé. Nói chung là rất khó đọc.

    Hàm tính nó chỉ ngắn như này thôi:
    C Code:
    1. float Result(int *a,int n,float c)
    2. {
    3.     float p;
    4.     p=a[0];
    5.     int i;
    6.     for (i=1;i<n;++i) p=p*c+a[i];
    7.     return p;
    8. }

    Còn dưới là code đầy đủ để chạy thử, nhưng là C++

    C++ Code:
    1. /*
    2. Tinh gia tri da thuc bang phuong phap Hoocner - Theo ly thuyet phuong phap tinh
    3.  -TQH 09092008-
    4. */
    5. #include <iostream>
    6. #include <conio.h>
    7. using namespace std;
    8.  
    9. void ScanConst(int *a,int n);
    10. void PrintPoly(int *a,int n);
    11. float Result(int *a,int n,float c);
    12.  
    13. int main()
    14. {
    15.     int n;
    16.     int *a;
    17.     cout << "        CHUONG TRINH TINH GIA TRI DA THUC" << endl;
    18.     cout << "\n*  Enter degree polymonical A: ";cin >> n; //Nhap bac cua da thuc
    19.     n++;                                               //bac n thi co n+1 so hang
    20.     a=new int [n];
    21.     if (a==NULL)
    22.     {
    23.         cout << "\nError allocating memory!";
    24.         return 0;
    25.     }
    26.     ScanConst(a,n);
    27.     cout << "\n->Polymonical A:  \n  f(x) = ";
    28.     PrintPoly(a,n);
    29.  
    30.     int *b,m;
    31.     cout << "\n*  Enter degree polymonical B: ";cin >> m; //Nhap bac cua da thuc
    32.     m++;                                               //bac n thi co n+1 so hang
    33.     b=new int [m];
    34.     if (b==NULL)
    35.     {
    36.         cout << "\nError allocating memory!";
    37.         return 0;
    38.     }
    39.     ScanConst(b,m);
    40.     cout << "\n->Polymonical B:  \n  g(x) = ";
    41.     PrintPoly(b,m);
    42.  
    43.     float x,c=Result(a,n,x),d=Result(b,m,x);
    44.     cout << "Enter value c = ";cin >> x;
    45.     cout << "\n* Polymonical A  f(" << x << ") = " << c;
    46.     cout << "\n* Polymonical B  g(" << x << ") = " << d;
    47.     cout << "\n* Result A+B: f(" << x << ") + g(" << x << ") = " << c+d;
    48.     delete[] a;
    49.     getch();
    50. }
    51.  
    52. void ScanConst(int *a,int n)
    53. {
    54.     int i;
    55.     for (i=0;i<n;i++)
    56.     {
    57.         cout << "a"<< i << " = ";cin >> a[i];
    58.     }
    59. }
    60.  
    61. void PrintPoly(int *a,int n)
    62. {
    63.     int i;
    64.     for (i=0;i<n-1;++i)
    65.         if (a[i]!=0)
    66.         {
    67.             if (a[i]!=1 && a[i]!=-1) cout << a[i] << "*x^" << n-i-1;
    68.             else if (a[i]==1) cout << "x^" << n-i-1;
    69.             else cout << "-x^" << n-i-1;
    70.             if (a[i+1]>0) cout << "+";
    71.         }
    72.     cout << a[n-1] << endl;
    73. }
    74.  
    75. float Result(int *a,int n,float c)
    76. {
    77.     float p;
    78.     p=a[0];
    79.     int i;
    80.     for (i=1;i<n;++i) p=p*c+a[i];
    81.     return p;
    82. }

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

    thanks các bạn, các anh nhiều ^ ^
    Đã được chỉnh sửa lần cuối bởi moonieo : 04-11-2008 lúc 10:49 AM.

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

    mình nghĩ cái j là không cần thiết vì a[n] và số mũ nó đều giống nhau mà. Mình sửa lại 1 tí như này:
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    void main()
    { int a[100],n,i,j,x;
      unsigned long p=0;
      clrscr();
      printf("Nhap so n: ");
      scanf("%d",&n);
      printf("Nhap so x: ");
      scanf("%d",&x);
      for(i=0;i<=n;i++)
      { printf("Nhap a[%d]: ",i);
    	scanf("%d",&a[i]);
      }
      for(i=n;i>=0;i--)
    	   p+=a[i]*pow(x,i);
      printf("Ket qua: %lu",p);
      getch();
    }
    vẫn là kết quả đúng như bình thường

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

    Mặc định [C]Bài tập tính đa thức - cần giúp đỡ

    tớ cũng có bài tâp nhưng không chạy được nhơ tét hộ với!thank you!



    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. #include<ctype.h>
    5. #include<alloc.h>
    6. #include<stdlib.h>
    7. char string[60];
    8. typedef struct node{
    9.       int bac, heso;
    10.       struct node *next;
    11.     } node;
    12. struct node *dt,*q;
    13. int ok=1;
    14. void pro(char*s);
    15. void input();
    16.  char*sub(char*str  ,int n, int m  );
    17.  char x[30]  ;
    18. void main()
    19.   {
    20.     input();
    21.    printf("so hang thu 2 cua da thu bao gom heso: %d va bac %d",dt->heso,dt->bac);
    22.     getch();}
    23.       char *sub(char*str  ,int n, int m)
    24.     {   int t; int j=0;
    25.    for(t=n;t<=m;t++) {
    26.        x[j]=str[t];j++;
    27.    };
    28.     return( x);
    29.     }
    30.  
    31. void pro(char*s)
    32. {int i, k,a,b;struct node *temp;char*x1;
    33. for(k=0;k<=strlen(s);k++)
    34.  
    35.   {if (isdigit(s[k])==0)
    36.      { strcpy(x1,sub(s,0,k-1));
    37.       if (x1=='\0')
    38.     if (string[i]=='+') a=1;
    39.     else a=-1;
    40.       else{
    41.  
    42.        a=atoi(x1);
    43.       a*=ok;
    44.        break;}
    45.       }
    46. for(i=strlen(s);i>=0;i--)
    47.  {    if( !(isdigit(s[i])))
    48.     { strcpy(x1,sub(s,i+1,strlen(s)));
    49.      if (x1[0]=='\0') b=1;
    50.      else b=atoi(x1);
    51.      break;}
    52.  }
    53.  temp=(node *)calloc(1,sizeof(struct node));
    54.  temp->heso=a;
    55.  temp->bac=b;
    56.  if( dt==NULL) dt=temp;
    57.  else
    58.  {q->next =temp;q=temp;}
    59.  }
    60.  }
    61.  void input(){
    62.  char *s;
    63.  printf("\n Nhap vao da thuc can tinh :\n");
    64.  gets(string);
    65.  dt=NULL;
    66.  q=dt;
    67.  int index1=0;
    68.  for(int i=0;i<strlen(string);i++){
    69.  if(string[i]=='+'||string[i]=='-'){
    70.   s=strcpy(s,sub(string,index1,i-1));
    71.   index1=i+1;
    72.   if(string[i]=='-') ok*=-1;
    73.   pro(s);
    74.     }
    75.   }
    76.   }

    *Chú ý: khi post code nhớ cho vào tag code, nếu còn tái phạm sẽ xóa bài. Xem hướng dẫn tại đây;
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 05-11-2008 lúc 08:39 PM.

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 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