|
|
|
| Здраствуйте, у меня некорректно считает кубический корень в программе;
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double x,xn,xk,dx,a,max,min;
long double z;
int k;
cout << "xn = "; \\xn=1.5
cin >> xn;
cout << "xk = "; \\xk=5.5
cin >> xk;
cout << "dx = "; \\dx=0.2
cin >> dx;
cout << "a = "; \\a=2.94
cin >> a;
for(x = xn, k=0; x <= xk; x += dx,k++)
{
z = pow(tan(a - x)/(4.35 + sin(a + x)), 1.0/3.0);
cout << "x = " << x << "\t z = " << z << endl;
}
if(k%4==0)
if (k==1)
max=fabs(z);
min=fabs(z);
if (fabs(z)>max) max=fabs(z);
if (fabs(z)<max) min=fabs(z);
cout<<"max="<<max<<"\t min="<<min<<"\n";
cout<<"R="<<max-min<<"\n";
system("PAUSE");
return 0;
} |
тоесть в выражение:
z = pow(tan(a - x)/(4.35 + sin(a + x)), 1.0/3.0)
Можно ли как-то возвести выражение в кубический корень или с помощью Функции stepen?
При выполнении программы у меня не все z показывают значение | |
|
|
|
|
|
|
|
для: Cena
(26.11.2011 в 15:35)
| | Вы хотите самостоятельно написать функцию stepen() извлечения корня степени 3? Это не самая хорошая идея, так как задача не очень тривиальная, как кажется на первый взгляд, лучше заставить pow() работать как следует. Когда что-то не получается, лучше всего вычислить значение вручную...
У вас все еще старые параметры? Если да, то смотрите, что у меня с ними получилось
a = 2.94
x = 5
tan(-2.06) / (4.35 + sin(7.94)) = -7.1011 | А ведь извлечение из отрицательных чисел корней невозможно, по крайней мере в действительной области... если же у вас задача с комплексными числами, то её нужно совершенно по другому организовывать. | |
|
|
|
|
|
|
|
для: cheops
(26.11.2011 в 15:51)
| | Спасибо разобрался. | |
|
|
|
|
|
|
|
для: cheops
(26.11.2011 в 15:51)
| | Здраствуйте, помогите пожалуйста с программой, компилятор выдает ошибки в программе:
#include <iostream>
#include <math.h>
using namespace std;
float Pow (double a, int k, int m)
111{cout<<"function 1\t";
if (a==0) return (0);
else
if (k==0) return (1);
else
if (a>0)
return (exp((double)k/m*log(a)));
else
if (m%2!=0)
return(-(exp((double)k/m*log(-a))));
}
int main()
{
double x,xn,xk,dx,a,max,min;
long double z;
int k;
cout<<"xn=";
cin>>xn;
cout<<"xk=";
cin>>xk;
cout<<"dx=";
cin>>dx;
cout<<"a=";
cin>>a;
for(x = xn, k=0; x <= xk; x += dx,k++)
{z=Pow(tan(a - x)/(4.35 + sin(a + x)),(double)1.0/3.0);
if(k%4==0)
cout<<"x="<<x<<"\t z="<<z<<endl;}
if(k==1)
{max=fabs(z);
min=fabs(z);}
{if(fabs(z)>max) max=fabs(z);
if(fabs(z)<max) min=fabs(z);}
x=x+dx;
cout<<"max="<<max<<"\t min="<<min<<"\n";
cout<<"R="<<max-min<<"\n";
system("PAUSE");
return 0;}
Ошибки выдает:
C:\Dev-Cpp\5.cpp In function `int main()':
30 C:\Dev-Cpp\5.cpp [Warning] converting to `int' from `double'
5 C:\Dev-Cpp\5.cpp too few arguments to function `float Pow(double, int, int)'
30 C:\Dev-Cpp\5.cpp at this point in file | |
|
|
|
|
|
|
|
для: Cena
(30.11.2011 в 22:08)
| | У вас в начале идет лишняя последовательность 111, а с Pow(), если честно, не удалось разобраться так как у вас в определении функции 3 параметра, а вызываете вы её с двумя... Нужно либо третий параметр добавить, либо в определении функции оставить только два.
#include <iostream>
#include <math.h>
using namespace std;
float Pow (double a, int k, int m)
{
cout<<"function 1\t";
if (a==0)
return (0);
else if (k==0)
return (1);
else if (a>0)
return (exp((double)k/m*log(a)));
else if (m%2!=0)
return(-(exp((double)k/m*log(-a))));
}
int main()
{
double x,xn,xk,dx,a,max,min;
long double z;
int k;
cout<<"xn=";
cin>>xn;
cout<<"xk=";
cin>>xk;
cout<<"dx=";
cin>>dx;
cout<<"a=";
cin>>a;
for(x = xn, k=0; x <= xk; x += dx,k++)
{
z=Pow(tan(a - x)/(4.35 + sin(a + x)), double(1.0/3.0));
if(k%4==0) cout<<"x="<<x<<"\t z="<<z<<endl;
}
if(k==1)
{
max=fabs(z);
min=fabs(z);
}
if(fabs(z)>max) max=fabs(z);
if(fabs(z)<max) min=fabs(z);
x=x+dx;
cout<<"max="<<max<<"\t min="<<min<<"\n";
cout<<"R="<<max-min<<"\n";
system("PAUSE");
return 0;
} |
| |
|
|
|