Hình như fải thế này :
Code:for(i=n;i>=0;i--) p=p+a[i]*pow(x,i);
Đề 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
Test với a chạy từ 0 đến n=5 có giá trị như sau : 2, 3, 4, 5, 6, 7Code:#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(); }
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
Hình như fải thế này :
Code:for(i=n;i>=0;i--) p=p+a[i]*pow(x,i);
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:
float Result(int *a,int n,float c) { float p; p=a[0]; int i; for (i=1;i<n;++i) p=p*c+a[i]; return p; }
Còn dưới là code đầy đủ để chạy thử, nhưng là C++
C++ Code:
/* Tinh gia tri da thuc bang phuong phap Hoocner - Theo ly thuyet phuong phap tinh -TQH 09092008- */ #include <iostream> #include <conio.h> using namespace std; void ScanConst(int *a,int n); void PrintPoly(int *a,int n); float Result(int *a,int n,float c); int main() { int n; int *a; n++; //bac n thi co n+1 so hang a=new int [n]; if (a==NULL) { return 0; } ScanConst(a,n); PrintPoly(a,n); int *b,m; m++; //bac n thi co n+1 so hang b=new int [m]; if (b==NULL) { return 0; } ScanConst(b,m); PrintPoly(b,m); float x,c=Result(a,n,x),d=Result(b,m,x); delete[] a; getch(); } void ScanConst(int *a,int n) { int i; for (i=0;i<n;i++) { } } void PrintPoly(int *a,int n) { int i; for (i=0;i<n-1;++i) if (a[i]!=0) { } } float Result(int *a,int n,float c) { float p; p=a[0]; int i; for (i=1;i<n;++i) p=p*c+a[i]; return p; }
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.
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:
vẫn là kết quả đúng như bình thườngCode:#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(); }
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:
#include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> #include<alloc.h> #include<stdlib.h> char string[60]; typedef struct node{ int bac, heso; struct node *next; } node; struct node *dt,*q; int ok=1; void pro(char*s); void input(); char*sub(char*str ,int n, int m ); char x[30] ; void main() { input(); getch();} char *sub(char*str ,int n, int m) { int t; int j=0; for(t=n;t<=m;t++) { x[j]=str[t];j++; }; return( x); } void pro(char*s) {int i, k,a,b;struct node *temp;char*x1; if (x1=='\0') if (string[i]=='+') a=1; else a=-1; else{ a*=ok; break;} } if (x1[0]=='\0') b=1; break;} } temp->heso=a; temp->bac=b; if( dt==NULL) dt=temp; else {q->next =temp;q=temp;} } } void input(){ char *s; dt=NULL; q=dt; int index1=0; if(string[i]=='+'||string[i]=='-'){ index1=i+1; if(string[i]=='-') ok*=-1; pro(s); } } }
*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.