Результаты вычислений Задания 1 занести в массив и найти в нём все элементы, которые лежат в заданном интервале [p1;p2]. Если таковых элементов в массиве нет, то выдать соответствующее сообщение. Использовать рекуррентные соотношения.
Решение
Для занесения элементов в массив добавим в список параметров функции table ссылку на указатель на массив и ссылку на размер массива, который определяется количеством точек в таблице по формуле:
, где квадратные скобки означают взятие целой части числа.
Для поиска элементов из заданного интервала создадим функцию, находящую и выводящую на экран такие элементы. Функция принимает указатель на массив, его размер, а также границы диапазона. В цикле проходим по элементам массива и выводим те из них, которые лежат в диапазоне. Если таких элементов не нашлось, после завершения цикла выводим соответствующее сообщение.
Текст программы:
#include <iostream>
using namespace std;
double F(double t, int N); //вычисление значения функции
void table(double tn, double tk, double dt, int N, double *&A, int &size); //построение таблицы функции
void printEl(double *A, int size, double p1, double p2); //выводит значения, лежащие в интервале [p1;p2]
int main()
{
int N;
cout << "N = ";
cin >> N; //ввод N
int size;
double *A;
table (-5, 5, 2, N, A, size); //построение таблицы для заданных данных
cout << "Input p1, p2: ";
double p1, p2;
cin >> p1 >> p2;
cout << "Elements from " << p1 << " to " << p2 << ":" << endl;
printEl(A, size, p1, p2); //вывод элементов из интервала
delete [] A;
return 0;
}
double F(double t, int N)
{
double slag = 1.0/((2*t)*(2*t)) / 2; //первое слагаемое
double sum = slag; //значение суммы
for (int i = 2; i <= N; i++)
{
slag = slag * 2*t / (2*i*(2*i-1)); //вычисляем следующее слагаемое при помощи рекуррентной формулы
sum += slag; //добавляем его к сумме
}
return sum;
}
void table(double tn, double tk, double dt, int N, double *&A, int &size)
{
size = (int)((tk-tn)/dt) + 1;
A = new double[size];
//для t от tn до tk с шагом dt
int i = 0;
for (double t = tn; t <= tk; t+=dt, i++)
{
double f = F(t, N);
A[i] = f;
cout << t << "\t" << f << endl;
}
}
void printEl(double *A, int size, double p1, double p2)
{
bool found = false; //установим в true, если элементы есть
for (int i = 0; i < size; i++)
{
if (A[i] <= p2 && A[i] >= p1)
{
cout << A[i] << endl;
found = true;
}
}
if (!found)
cout << "No such elements" << endl;
}