01/10/2018, 13:50

Tại sao hàm trả về kết quả `inf` trong C++?

Tôi đang tự học C++ và gặp phải vấn đề khi làm bài tập như sau, nhờ mọi người trong Dạy Nhau Học giúp đở dùm.
Đề bài: S = 1!/(x+k) + 2!/(x^2-k^2) + n!/(x^n + (-1^(n+1)*k^n)
Với n, x, k được nhập vào từ bàn phím.
Nếu nhập n=1 thì chương trình chạy đúng. Nhưng nếu tăng n = 2 hoặc n=3… thì hàm lại trả về kết quả S = inf. Tôi đã xem kỹ và thử tới thử lui nhưng không được, nhờ mọi người gở rối dùm.
Code như sau:

#include <iostream>
#include <math.h>
using namespace std;
float Tong(int n,int x,int k)
{
	float S;
	int a=-1;
	int b=1;
	for(int i=1;i<=n;i++)
	{
		a *= -1;
		b *=i;
		S += b/(pow(x,i)+a*pow(k,i));
	}
	return S;
}
int main()
{
	int n,x,k;
	cout<<"Nhap n: ";
	cin>>n;
	cout<<"Nhap x: ";
	cin>>x;
	cout<<"Nhap k: ";
	cin>>k;
	cout<<"
S = "<<Tong(n,x,k);
	return 0;
}

Cảm ơn mọi người!

rogp10 viết 16:03 ngày 01/10/2018

Bạn chưa khởi tạo S. Vả lại chú ý điều kiện x!=+/-k.

Thi Đỗ Gia Thành viết 16:07 ngày 01/10/2018

Cảm ơn rogp10!
Nhưng tôi vẫn chưa hiểu ở chổ S thì do hàm tính ra tại sao mình phải khởi tạo. Với lại tại sao x! = +/- k vì trong bài không có x!. Mong rogp10 có thể giải thích thêm dùm để tôi có thể hiểu rỏ hơn.

Chế Tiệp Chân Khoa viết 16:07 ngày 01/10/2018

nói về toán tử +=
x += y
là cách viết khác của
x = x + y
nên biến x cần có giá trị trước khi dùng toán tử này, cụ thể ở đây phải khởi tạo float S = 0 ở dòng 5

rogp10 viết 15:53 ngày 01/10/2018

!= nghĩa là không bằng, khác.[quote=“thidogiathanh, post:3, topic:60308”]
Nhưng tôi vẫn chưa hiểu ở chổ S thì do hàm tính ra tại sao mình phải khởi tạo
[/quote]
Nếu bạn không khởi tạo thì giá trị ban đầu của S sẽ là một con số vô chừng, cứ thế cộng tiếp vào thì chắc chắn sai như đã thấy.

Thi Đỗ Gia Thành viết 15:59 ngày 01/10/2018

Xin Cảm ơn! Chúc mọi người nhiều sức khỏe và thành công

Bài liên quan
0