Bài tập kỹ thuật lập trình sử dụng sơ đồ Hoocner Khai báo (định nghĩa) hàm tính giá trị đa thức p(x) bậc n tổng quát theo sơ đồ Hoocner Viết chương trình tính giá trị đa thức p(x) bậc n tổng quát theo sơ đồ Hoocner. 1.3 Cho đa thức p(x) bậc n, viết chương trình xác định các hệ số của đa thức p(y+c) theo sơ đồ Hoocner tổng quát. Viết chương trình tìm nghiệm gần đúng cho phương trình có dạng tổng quát:
BÀI SỐ 1: 1.1 Viết chương trình tính giá trị đa thức p(x) bậc n tổng quát theo sơ đồ Hoocner. CHƯƠNG TRÌNH: #include<stdio.h> #include<conio.h> #include<math.h> #define max 20 float hoocner(float heso[],int n,float c) { int i; float p; p=heso[0]; for(i=1;i<=n;i++) p=p*c+heso[i]; return p; } main() { int i,n; float x; float heso[max]; printf("nhap vao bac n:"); scanf("%d",&n); printf("nhap vao he so da thuc: \n"); for(i=0;i<=n;i++) { printf("heso[%d] = ",i); scanf("%f",& heso[i]); } printf("nhap vao gia tri c can tinh: "); scanf("%f",&x); printf("\nGia tri cua da thuc can tim la: %3f",hoocner(heso,n,x)); getch(); } KẾT QUẢ: 1.2 Viết chương trình thực hiện: Khai báo (định nghĩa) hàm tính giá trị đa thức p(x) bậc n tổng quát theo sơ đồ Hoocner Nhập vào đa thức p(x) bậc n và 2 giá trị thực y, z. Tính: S1 = p(y) + p(z) S2 = p(1) + p(2) + … + p(n) Nhập vào 2 đa thức p n (x) bậc n, p m (y) bậc m và giá trị c. Tính p n (c) + p m (c) CHƯƠNG TRÌNH: #include<stdio.h> #include<conio.h> double heso1[50], heso2[50], a, b,y,z; int n, m,i; double s1; float s2; double p(int n, double heso[], double x) { double k=heso[0]; int i; for (i=1;i<=n;i++) k=k*x+heso[i]; return k; } void nhap() { printf("Nhap bac da thuc pn: "); scanf("%d", &n); printf("\nNhap cac he so da thuc pn: \n"); for (i=0;i<=n;i++) { printf("heso1[%d]= ",i); scanf("%lf",&heso1[i]); } printf("\nNhap bac da thuc pm: "); scanf("%d", &m); printf("\nNhap he so da thuc pm: \n"); for (int i=0;i<=m;i++) { printf("heso2[%d]= ",i); scanf("%lf", &heso2[i]); } printf("tinh pn(a)+pm(b): \n"); printf("a= "); scanf("%lf", &a); printf("b= "); scanf("%lf", &b); } int nhapdathuc() { printf("\nNhap bac da thuc p: "); scanf("%d", &n); printf("\nNhap cac he so da thuc p:\n"); for (i=0;i<=n;i++) { printf("heso1[%d]= ",i); scanf("%lf",&heso1[i]); } printf("\ntinh p(y)+p(z): \n"); printf("y= "); scanf("%lf", &y); printf("z= "); scanf("%lf", &z); s1=p(n,heso1,y)+p(n,heso1,z); s2=p(n,heso1,1); for(i=2;i<=n;i++) { s2=s2+p(n,heso1,i); } } main() { nhap(); printf("pn(%.3lf)+pm(%.3lf)= %.3lf", a, b, p(n, heso1, a)+p(m, heso2, b)); nhapdathuc(); printf("\nGia tri cua p(y)+p(z) la: "); printf("s1=%.3lf",s1); printf("\nGia tri cua p(1)+p(2)+ +p(n) la: "); printf("s2=%f",s2); getch(); } KẾT QUẢ: 1.3Cho đa thức p(x) bậc n, viết chương trình xác định các hệ số của đa thức p(y+c) theo sơ đồ Hoocner tổng quát. CHƯƠNG TRÌNH: #include<stdio.h> #include<conio.h> #define max 100 float A[max],c; int n; void nhaphamso() { int i; printf("Nhap n: "); scanf("%d",&n); for(i=0;i<=n;i++) { printf("Nhap A[%d]: ",i); scanf("%f",&A[i]); } printf("Nhap c: "); scanf("%f",&c); } void Hoocnertongquat(float A[],float c,int n) { int i,k; float B[100]; for(i=0;i<=n;i++) B[i]=A[i] for(k=n;k>=1;k ) for(i=1;i<=k;i++) B[i]=B[i-1]*c+B[i]; printf("He so p(y+%.2f) la: ",c); for(i=0;i<=n;i++) printf("%.2f ",B[i]); } main() { nhaphamso(); Hoocnertongquat(A,c,n); getch(); } KẾT QUẢ: 1.4 Viết chương trình tìm nghiệm gần đúng cho phương trình có dạng tổng quát: f(x) = a 0 x n + a 1 x n-1 + … + a n-1 x + a n = 0 bằng phương pháp chia đôi CHƯƠNG TRÌNH: #include<stdio.h> #include<conio.h> #include<math.h> #define MAX 20 #define eps 1e-3 /**************************************************/ float chiadoi(float A[],int n,float a,float b); float f(float A[],int n,float x); float f(float A[],int n,float x) { int i; float p=A[0]; for(i=1;i<=n;i++) p=p*x+A[i]; return p; } float chiadoi(float A[],int n,float a,float b) { float c; do { c=(a+b)/2; if(f(A,n,a)*f(A,n,b)<0) b=c; else a=c; } while(fabs(a-b)>eps); return c; } /**************************************************/ main() { float a,b,A[MAX]; int i,n; printf("Chuongtrinh tim nghiem cua pt a(0)*x^n+a(1)*x^(n-1)+ +a(n- 1)*x+a(n)=0\n"); printf("Nhap vao bac pt : "); scanf("%d",&n); for(i=0;i<=n;i++) { printf("\nHeso A[%d]=",i); scanf("%f",&A[i]); } do { printf("Nhap vao khoang nghiem [a,b] voi f(a)*f(b)<0: "); scanf("%f%f",&a,&b); } while(f(A,n,a)*f(A,n,b)>0); printf("\n Phuong phap chia doi : nghiem= %7.3f",chiadoi(A,n,a,b)); getch(); } KẾT QUẢ: BÀI SỐ 2: 2.1 Viết chương trình tìm nghiệm gần đúng cho phương trình có dạng tổng quát: f(x) = a 0 x n + a 1 x n-1 + … + a n-1 x + a n = 0 bằng phương pháp dây cung CHƯƠNG TRÌNH: #include<conio.h> #include<math.h> #include<stdio.h> #define eps 1e-3 double f(float A[],int n,float x) { float p = A[0]; for(int i=1;i<=n;i++) p=p*x+A[i]; return p; } float daycung(float A[],float a,float b,int n) { double x=a-(((b-a)*f(A,n,a))/(f(A,n,b)-f(A,n,a))); if(f(A,n,x)*f(A,n,a)<0) do{ b=x; x=a-(((b-a)*f(A,n,a))/(f(A,n,b)-f(A,n,a))); } while(fabs(x-b)> eps); else do{ a=x; x=a-(((b-a)*f(A,n,a))/(f(A,n,b)-f(A,n,a))); }while(fabs(x-a)>eps); return x; } main() { float a,b; int n; float x; float A[10]; int c; printf("\nnhap vao bac n cua phuong trinh:"); scanf("%d",&n); printf("\nnhap vao he so cua da thuc:\n"); for(int i=0;i<=n;i++) { printf("A[%d]= ",i); scanf("%f",& A[i]); } do{ printf("nhap vao a ,b thoa man (f(a)*f(b)<0)\n"); scanf("%f%f",&a,&b); }while(f(A,n,a)*f(A,n,b)>0); printf("\nnghiem cua phuong trinh la:%3f",daycung(A,a,b,n)); getch(); } KẾT QUẢ: 2.2 Viết chương trình tìm nghiệm cho phương trình e x - 10x + 7 = 0 (có thể thay phương trình khác) bằng phương pháp tiếp tuyến. CHƯƠNG TRÌNH: #include<stdio.h> #include<conio.h> #include<math.h> #define esp 1e-3 float f(float x) { return(exp(x)-10*x+7); } [...]... phuong phap Newton ",Newton(a,b)); = %.2f getch(); } FILE INPUT.TXT: HESO.TXT: KẾT QUẢ: Viết chương trình (có sử dụng hàm) tính gần đúng tích phân xác định trên đoạn [a, b] của một số hàm cụ thể (trong đó có hàm đa thức bậc n) theo 3 cách (tương ứng với 3 công thức trên) So sánh kết quả, nhận xét CHƯƠNG TRÌNH: #include #include #include #define PI 3.14159 float A[100],p[100];... phap tren "); } main() { nhaptufile(); xuatmatran(); Gauss_Siedel(A,n); getch(); } FILE TEXT: KẾT QUẢ: Bài số 3 • Cho hàm f(x) thoả mãn bảng giá trị: x x0 x1 x2 … … xn f(x) y0 y1 y2 … … yn Viết chương trình tính giá trị hàm f(x) tại điểm x=t cho trước (t ϵ [x0, xn], dùng bảng nội suy Ayken dạng 1) CHƯƠNG TRÌNH: #include #include #include #define max 100 float x[max],y[max];... printf("nhap vao gia tri cua x: "); scanf("%f",&x); do{ y=x; x=y-(f(y)/g(y)); }while(fabs(x-y)>esp); printf("nghiem cua phuong trinh la:%3f",x); getch(); } KẾT QUẢ: 2.3 Viết chương trình giải hệ đại số tuyến tính bằng phương pháp Gauss CHƯƠNG TRÌNH: #include #include float A[100][100],X[100]; int n; void nhaptufile() { FILE *f; int i,j; f=fopen("Gauss.txt","r"); if(f==NULL) printf("\nKhong the... ham f(%.3f) = %.3f ",c,w*s); } main() { nhaptufile(); Ayken(); getch(); } FILE: ayken.txt KẾT QUẢ: • Viết chương trình tính gần đúng tích gần đúng phân xác định của hàm f(x) trên đoạn [a, b] trong 3 trường hợp: + Công thức hình thang + Công thức parabol + Công thức Newton-cotet CHƯƠNG TRÌNH: #include #include #include #define PI 3.14159 float A[100],p[100]; int n,k; void... printf("Du lieu khong hop le"); else { printf("\nNghiem he phuong trinh : "); for(int i=1;i