E
effreet
Помогите пожалуста найти ошибку. Программа у меня запускается, но считает не правильно. Заранее спасибо!
Задание:
Написать на языке СИ++ программу, вычисляющую функцию, представленную в виде ряда с заданной точностью e=0,001.
Мой код:
Задание:
Написать на языке СИ++ программу, вычисляющую функцию, представленную в виде ряда с заданной точностью e=0,001.
Мой код:
C++:
#include "iostream.h"
#include "math.h"
#include "conio.h"
float exponentation (float base,float exponent){ // функция возведения в степень
float a=base; // объявляем переменные
float x=1;
if(exponent==0) // проверка степени на 0
{
base=1;
goto end;
}
for (x; x<exponent; x++)
{
base=base*a;
}
end:
return (base); // функция возвращает значение
}
int main(){
int maxiter=600; // максимальное кол-во итераций
int n=0;
float x, accuracy, numerator, denominator, prov, lnx; // объявляем переменные
bool done=true; // переменная типа bool, задаем ей значение true
begin: // метка
cout <<"please, enter -1<=x<1"<< endl; // запрос на ввод икса
cin>>x; // вводим аргумент
if(fabs (x)>-1,(x)>=1) // проверка что Х>-1 и X>=1
{
cout <<"wrong x value"<< endl; // сообщение об ошибке
goto begin;
}
cout <<"enter accuracy"<< endl;
cin>>accuracy; // вводим точность
lnx=0; // обнуляем переменную
prov=1;
for(n; fabs(prov)>accuracy; n++)
{
numerator = exponentation (x, n); // считаем числитель, вызывая функцию степень
denominator = n; // знаменатель
prov=numerator/denominator; // член ряда
lnx+=-1*(numerator/denominator); // сумма
if (n > maxiter) // проверка на кол-во итераций
{
cout<<"Divergence"<< endl; // сообщение о том, что ряд расходится
done=false; // присвоение переменной значение false
break; // прерывание цикла и переход к следующему оператору
}
}
if(done)
{
cout <<" the natural logarithm of " << x << " = " << lnx << endl; // результат, высчитанный программой
cout <<" using built-in function " << x << " = " << log(1-x) << endl; // результат, полученный с использованием встроенной функции
cout <<" used " << n << " iterations " << endl; // кол-во использованных итераций
}
getch (); // ожидание ввода
return 0;
}