30/09/2018, 18:16

Viết chương trình tính e = 1 + x/1! - x^2/2! +...+(-1)^n+1*(x^n/n!) , với n là số nguyên dương, x là số thực được nhập từ bàn phím

Mọi người giải thích hộ mình bài này với!!!
Viết chương trình tính e = 1 + x/1! - x^2/2! +…+(-1)^n+1*(x^n/n!) , với n là số nguyên dương, x là số thực được nhập từ bàn phím
Đây là code của mình không biết edit như thế nào cho đúng?

int main() {
int n, s;
float x, e;
long i;
cout << "Nhap vao so nguyen n = ";
cin >> n;
cout << "Nhap vao so thuc x = ";
cin >> x;
s = 0;
for( i = 1; i <= x; i++)
	s = s + s*i;
	e = pow(-1,i)*(pow(x,n)/s);
cout << "E = "<< e << endl;

}

Đỗ Trung Quân viết 20:17 ngày 30/09/2018

Bạn tự nhẩm bằng tay trước đi.

Tại i =1;
 s= s + s*i = 0;
 e = pow(-1,i) * (pow(x,n)/s); // Chia cho 0??

Cách giải của bạn sai rồi.
Cách giải những dạng bài này bạn nhìn vào số đầu và số cuối. Số cuối là công thức. Số đầu là điểm xuất phát cho thuật toán. Tìm hiểu vòng for trước đã nhé

Minh Vương viết 20:25 ngày 30/09/2018

Nhầm s = 1, phải sữa sao vậy bạn?

Gió viết 20:25 ngày 30/09/2018
s=1;
for( i = 1; i <= n; i++) // i<=n 
	s += s*x/i* (i%2==0?1: -1);
e=s;

i=1 s=1+x
i=2 s=1+x+x*x/2
i=3 s=1+x+…

Dương Nylghara viết 20:22 ngày 30/09/2018
#include <iostream>
#include<math.h>

using namespace std;


float GiaiThua(int n)
{
    if(n==1)
        return 1;
    return GiaiThua(n-1)*n;
}

float Tinh(int x, int n)
{
    if(n == 1)
        return 1;
    return Tinh(x,n-1) + pow((-1),n)*((pow(x,n)/GiaiThua(n)));
}

int main()
{
    //1.2.3
    cout << "Hello world!" << endl;
    cout<<" "<<Tinh(1,2);
    return 0;

}

Code đệ quy …ngắn gọn…

không hiểu có thể reply mình giải thích nha^^

Minh Vương viết 20:25 ngày 30/09/2018
float Tinh(int x, int n)
{
    if(n == 1)
        return 1;
    return Tinh(x,n-1) + pow((-1),n)*((pow(x,n)/GiaiThua(n)));
}

Mình không hiểu phần này lắm cái:
return Tinh(x,n-1)
Phần tính giai thừa này hình như sai?

float GiaiThua(int n)
 {
if(n==1)
    return 1;
return GiaiThua(n-1)*n;
 }
Dương Nylghara viết 20:24 ngày 30/09/2018

Ở đây đệ quy thực chất nó cũng như một vòng lặp vậy
ở đây ta có :

float Tinh(int x, int n)

với x : là một số nguyên do người dùng nhập vào…bạn để ý…cái số x lúc gọi lại hàm thì nó k đổi…
nên Tinh(x,n-1) thâm số vẫn giữ nguyên

(n-1) :

bạn để ý là n mỗi lần lặp nó giảm đi 1 đến lúc n == 1 thì nó dừng lại

Dương Nylghara viết 20:20 ngày 30/09/2018
float GiaiThua(int n)
 {
if(n==1)
    return 1;
return GiaiThua(n-1)*n;
 }

Công thức tính giai thừa là gì :
ví dụ 5! = 5*4*3*2*1 = ?

<=> n! = n*(n-1)*(n-2)*(n-3)....*1

mỗi lần như z thì n nó sẽ giảm đi 1…tới lúc n == 1thì dừng .

Minh Vương viết 20:17 ngày 30/09/2018

À mình hiểu rồi, cám ơn bạn rất rất nhiều đã giải thích tường tận như vậy, thanks bạn nha!!!

Dương Nylghara viết 20:18 ngày 30/09/2018

Mình sợ viết ra như vậy sợ không hiểu hết…tại không có khiếu giải thích lắm…nếu mà nói thì bạn sẽ hiểu hơn

Minh Vương viết 20:20 ngày 30/09/2018

Cám ơn bạn!!!

Tân Kiêm viết 20:17 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

Bài liên quan
0