Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция возведение в степень
 
 автор: Cena   (26.11.2011 в 15:35)   письмо автору
 
 

Здраствуйте, у меня некорректно считает кубический корень в программе;
#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 показывают значение

  Ответить  
 
 автор: cheops   (26.11.2011 в 15:51)   письмо автору
 
   для: Cena   (26.11.2011 в 15:35)
 

Вы хотите самостоятельно написать функцию stepen() извлечения корня степени 3? Это не самая хорошая идея, так как задача не очень тривиальная, как кажется на первый взгляд, лучше заставить pow() работать как следует. Когда что-то не получается, лучше всего вычислить значение вручную...

У вас все еще старые параметры? Если да, то смотрите, что у меня с ними получилось
a = 2.94
x = 5

tan(-2.06) / (4.35 + sin(7.94)) = -7.1011
А ведь извлечение из отрицательных чисел корней невозможно, по крайней мере в действительной области... если же у вас задача с комплексными числами, то её нужно совершенно по другому организовывать.

  Ответить  
 
 автор: Cena   (26.11.2011 в 16:07)   письмо автору
 
   для: cheops   (26.11.2011 в 15:51)
 

Спасибо разобрался.

  Ответить  
 
 автор: Cena   (30.11.2011 в 22:08)   письмо автору
 
   для: 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

  Ответить  
 
 автор: cheops   (30.11.2011 в 23:57)   письмо автору
 
   для: 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;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования