#include<iostream>
#include <Windows.h>
using namespace std;
void SummaN(double x, int n);
void SummaE(double x,double e);
void vivod(double *a, int n);
int main()
{
setlocale(LC_ALL, "Russian");
SetConsoleCP(1251); SetConsoleOutputCP(1251);
const double pi=3.1415926535;
double x,e;
int n;
cout<<"Введите x "; cin >>x;
while (x>2*pi) x=x-2*pi;
while (x<-2*pi) x=x+2*pi;
cout<<"Введите N "; cin >>n;
cout<<"Введите E "; cin >>e;
cout<<"Сумма при N"<<endl;
SummaN(x,n);
cout<<"Сумма для E1"<<endl;
SummaE(x,e);
cout<<"Сумма для E2"<<endl;
SummaE(x,e/10);
//Точное значение
cout<<"Точное значение sin(x)="<<sin(x)<<endl;
system("pause");
return 0;
}
void SummaN(double x, int n)
{
double *a;
a=new double [n];
int k, i, znak;
double s, chisl, znam;
chisl=x;
znam=1;
s=0;
znak=1;
k=2;
for (i=0;i<n;i++)
{
a[i]=chisl/znam*znak;
s=s+chisl/znam*znak;
znam=znam*k*(k+1);
chisl=chisl*x*x;
znak=znak*(-1);
k=k+2;
}
cout<<"1. sin(x)="<<s<<endl;
cout<<"Элементы массива"<<endl;
vivod(a,n);
delete a;
}
void SummaE(double x, double e)
{
int k, i, znak;
double s, chisl, znam;
chisl=x;
znam=1;
s=0;
znak=1;
k=2;
i=0;
while (abs(chisl/znam)>e)
{
s=s+chisl/znam*znak;
znam=znam*k*(k+1);
chisl=chisl*x*x;
znak=znak*(-1);
k=k+2;
i++;
}
cout<<"sin(x)="<<s<<" Количество слагаемых= "<<i<<endl;
}
void vivod(double *a, int n)
{
for (int i=0;i<n;i++)
{
cout <<a[i]<<" "<<endl;
}
cout << endl;
}
|