30/09/2018, 22:59
Tính a^x=e^(x*ln(a))
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define e 2.718281828
double Giaithua(int n)
{
int P=1;
for(int i=1;i<=n;i++)
{
P*=i;
}
return P;
}
double emu(float x,float c)
{
float S=0,p=1,n=0;
while(p>=c)
{
p=pow(float(x),n)/Giaithua(n);
S+=p;
n++;
}
return S;
}
double amu(double a,float x,float c)
{
int P;
P=pow(emu(x,c),(log((double)a)/log((double)e))); // Log cua bat ky co so nao
return P;
}
int main()
{
float a,x,c;
printf("Nhap a la:");
scanf("%f",&a);
printf("Nhap x la:");
scanf("%f",&x);
printf("Nhap c la:");
scanf("%f",&c);
printf("(%f)^(%f)= %lf",a,x,amu(a,x,c));
getch();
}
e k biết làm bị sai ở đâu mà kq tính ra nó như thế này : mấy số đầu từ <=3 thì kq bị thiếu 1, còn >5 trở đi là sai hết lun e có debug qua mà vẫn k hiểu lun, mn xem e bị sai ở đâu a -___-
Bài liên quan
Kiểu dữ liệu của
P
không trùng với kiểu trả về của hàm, nên để kiểu trả về của hàm làint
nhé:int Giaithua(int n)
Hai cái này cũng tương tự, chú ý điều này: Kiểu dữ liệu của biến được return phải trùng với kiểu trả về của hàm.
Sửa lại như sau:
p = pow((float)x, n) / Giaithua(n);
Không nên dùng toán tử dấy phẩy dù bạn có thông minh và pro đến cỡ nào trừ vài trường hợp bắt buộc ! An toàn là nhất, và cũng đừng tiết kiệm dòng code !
Sơ qua là vậy, mình chỉ sửa những chỗ căn bản nhất cho bạn. Còn thuật toán của bạn thì bạn sẽ tự xem lại. Nếu có thể, hãy tập Debug cho quen, có nhiều lỗi ngớ ngẩn ta không phát hiện ra, chỉ cần Debug xíu là biết ngay
thank a @Minh,e sẽ tiếp tục về trau dồi thêm a
ơ toán tử dấu phẩy là sao hả a e k hiểu lắm ? :3 e có pro đâu newbie mà a T.T
Thằng @Minh là thằng nào vậy -_- My name is @tcm ok ?
À sorry nhiều, không nhìn cái hàm pow nên tưởng toán tử dấu phẩy
Mình ví dụ thôi bạn Vì toán tử dấu phẩy khá rắc rối nếu không nắm kỹ
:v đấy là gọi tên thân mật đấy a !! e đi sửa lỗi ngay và luôn đây a