Когда ввожу от 1 до 10 с шагом 1, оно считает лишь 2 раза.
Задание - ряд тейлора, разложение arctg(x)
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include "stdio.h"
#include "math.h"
using namespace std;
int main()
{
int n, k, i;
double const pi = 3.1415926;
double xn, xk, dx, E = 1e-5, s, x, P, Fun;
cout << "xn = ";
cin >> xn;
cout << "xk = ";
cin >> xk;
cout << "dx = ";
cin >> dx;
cout << "__________________________________________________________" << endl;
cout << "| x | F | kolіatan(x) |" << endl;
cout << "__________________________________________________________" << endl;
x = xn;
while (x <= xk)
{
k = 0;
s = pi / 2;
n = 0;
P = (pow(-1, n + 1) / (2 * n + 1)*(pow(x, 2 * n + 1)));
while (fabs(P)>E)
{
P = (pow(-1, n + 1) / (2 * n + 1)*(pow(x, 2 * n + 1)));
k = k + 1;
n = n + 1;
s = s - P;
}
Fun = atan(x);
printf("%f|\t%f|\t%d|\t\t%f|\t\n", x, s, k, Fun);
x = x + dx;
}
cout << "___________________________________________________________" << endl;
_getche();
return 0;
}
Другие языки программирования и технологии
Почему считает всего несколько раз, не проходит все елементьі последовательности от a1 до a2 с шагом dx. Ряд тейлора C++?
Много мусора в коде - сложно отслеживать запятые за наворотами алгоритма
выкидывая лишнее и впустую вычисляемое, тут-же выкидываемое, в ядре у тя вроде бы такое
------
for(x=xn; x<=xk;x+=dx){ //Тут заменено вайл на фор -так короче и четче
s=pi/2;
double xstep=x; // для pow
n=0;
//Предцикловые выкидываемые вычисления P и лишнее k отброшены
while(P= ((n^0x1)?(xstep ):(-xstep))/(2*n+1) , fabs( P) > E){ //степень единицы взята просто через чётность
s-=P;
xstep*=x*x;//Это вместо pow(x,2n+1), чтоб и тут лишний раз степень не гонять
n++;
}
printf("%f|\t%f|\t%d|\t\t%f|\t\n", x, s, n, atan(x));//это в стиле С а не С++, в плюсах вывод обычно через ">>"
}
-------
насколько так вычисляемое отличается от арктангенса -лень вспоминать его разложение - тут уж самостоятельно))
выкидывая лишнее и впустую вычисляемое, тут-же выкидываемое, в ядре у тя вроде бы такое
------
for(x=xn; x<=xk;x+=dx){ //Тут заменено вайл на фор -так короче и четче
s=pi/2;
double xstep=x; // для pow
n=0;
//Предцикловые выкидываемые вычисления P и лишнее k отброшены
while(P= ((n^0x1)?(xstep ):(-xstep))/(2*n+1) , fabs( P) > E){ //степень единицы взята просто через чётность
s-=P;
xstep*=x*x;//Это вместо pow(x,2n+1), чтоб и тут лишний раз степень не гонять
n++;
}
printf("%f|\t%f|\t%d|\t\t%f|\t\n", x, s, n, atan(x));//это в стиле С а не С++, в плюсах вывод обычно через ">>"
}
-------
насколько так вычисляемое отличается от арктангенса -лень вспоминать его разложение - тут уж самостоятельно))
Нужно бы было указать в чём программу пишите. В Borland C++ Builder 3(6), что ли? Мой вариант в Visual C++ 2013.
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
double arctg(double, double = 1e-5);
double set_argument(string = " x: ");
double get_member(double);
void sign(double&);
int main() {
double x = set_argument();
cout << " arctg(" << x << ") = " << fixed << setprecision(5) << arctg(x) << endl;
cout.unsetf(ios::fixed);
cout << " atan(" << x << ") = " << fixed << atan(x) << endl;
cin.get(); cin.get();
return 0;
}
double set_argument(string msg) {
double value;
do {
cout << msg;
cin >> value;
if (cin.good() && value < 1) return value;
else {
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "\aError!\n";
}
} while (true);
return value;
}
double arctg(double value, double eps) {
double prev, cur = 0, result = 0;
do {
prev = cur;
cur = get_member(value);
result += cur;
} while (fabs(fabs(prev) - fabs(cur)) > eps);
return result;
}
double get_member(double value) {
static short n = 1;
static short count = 0;
double member = pow(value, n) / n;
if (count & 1) sign(member);
n += 2;
++count;
return member;
}
void sign(double& value) { value *= -1; }
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
double arctg(double, double = 1e-5);
double set_argument(string = " x: ");
double get_member(double);
void sign(double&);
int main() {
double x = set_argument();
cout << " arctg(" << x << ") = " << fixed << setprecision(5) << arctg(x) << endl;
cout.unsetf(ios::fixed);
cout << " atan(" << x << ") = " << fixed << atan(x) << endl;
cin.get(); cin.get();
return 0;
}
double set_argument(string msg) {
double value;
do {
cout << msg;
cin >> value;
if (cin.good() && value < 1) return value;
else {
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cout << "\aError!\n";
}
} while (true);
return value;
}
double arctg(double value, double eps) {
double prev, cur = 0, result = 0;
do {
prev = cur;
cur = get_member(value);
result += cur;
} while (fabs(fabs(prev) - fabs(cur)) > eps);
return result;
}
double get_member(double value) {
static short n = 1;
static short count = 0;
double member = pow(value, n) / n;
if (count & 1) sign(member);
n += 2;
++count;
return member;
}
void sign(double& value) { value *= -1; }
Владимир Константинов
Хороший вариант, но увьі - рамки другие у меня да и часть из етого мьі даже не учили. Результат оно проавильньій вьідает кроме, нескольких маленьких деталей - оно не вьідает все вариантьі при x от 1 до 10 с шагом 1, вьідает лишь при х=1 а так же количество шагов оно не правильн осчитает (
Похожие вопросы
- Помогите!!! с помощью вектора написать кодДаны действительные числа a1...,a30 Получить; а) max (a1+a30,a2+a29,...a15+a16
- Lazarus. Даны действительные числа a1,a2,.,a2n . Получить: a1,a2n,a2,a2n-1,a3,.,an,an+1
- Вычисление суммы ряда на c++
- Почему компиляция веб-проекта в браузере проходит легче чем компиляция десктопного проекта в среде? (объяснения внутри)
- Какая Винда лучше, 7 или 8 ??? Как вы считаете какая лучше, объясните почему считаете лучшей именно этот вин
- Почему считают что программисту математика не нужна? Откуда взялся этот миф?
- Даны натуральное число n, действительные числа a1,.,an. Вычислить: |a1|,|a1+a2|,.,|a1+.+an|; delphi
- Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности B1, …, BN и C1, …, CN
- Непонятка с C++. Хочу посчитать колво точек в строке и почему то на 1 больше считает
- Как в c++ сравнить несколько чисел