/*
Четвертым параметром шаблона задать функтор, выполняющий одну из следующих операций с элементом массива и значением k:
Экспонента разности k и элемента массива.*/
#include <conio.h>
#include <iostream.h>
#include <vector>
#include <windows.h>
#include <math.h>
char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text,bufRus);
return bufRus;
}
template <class T,int size_of_massiv,int k>
class Function
{
public:
static T MyArray(T massiv[])
{
vector<float>v;
float sum=0,sred_arifm=0,negative_number=0;
int flag=0;
cout<<Rus("Перед вставкой: ");
for(int i=0;i<size_of_massiv;i++)
{
v.push_back(massiv[i]);
cout<<v[i]<<" ";
}
cout<<endl<<Rus("Размер = ")<<v.size()<<endl;
for (int i=0;i<size_of_massiv;i++)
{
sum+=massiv[i];
}
cout<<endl<<Rus("Сумма элементов: ")<<sum;
sred_arifm=fabs(sum/size_of_massiv);
cout<<endl<<Rus("Среднее арифметическое по абсолютной величине: ")<<sred_arifm<<endl;
cout<<endl<<Rus("После вставки: ");
v.push_back(sum);
v.push_back(sred_arifm);
for(int i=0;i<size_of_massiv+2;i++)
{
cout<<v[i]<<" ";
}
cout<<endl<<Rus("Размер = ")<<v.size()<<endl;
for(int i=v.size();i>=0; i--)
{
if (v[i]<0)
{
negative_number=i;
flag=1;
break;
}
}
if (flag)
{
cout<<endl<<Rus("Последний отрицательный элемент: ")<<v[negative_number];
cout<<endl<<Rus("Половина последнего отрицательного элемента: ")<<v[negative_number]/2.0<<endl;
}
else
{
cout<<endl<<Rus("Отрицательных чисел в массиве нет.");
return 0;
}
cout<<endl<<Rus("Итоговый массив: ");
for (int i=0;i<size_of_massiv+2;i++)
{
cout<<v[i]+v[negative_number]/2.0<<" ";
}
cout<<endl<<Rus("Размер = ")<<v.size()<<endl;
cout<<endl<<Rus("Значение k = ")<<k;
cout<<endl<<Rus("Итоговый массив + k: ");
for (int i=0;i<size_of_massiv+2;i++)
{
cout<<v[i]+v[negative_number]/2.0+k<<" ";
}
cout<<endl<<Rus("Размер = ")<<v.size()<<endl;
return true;
}
};
class Add
{
public:
void operator()(int massiv[],int n)
{
int size;
for (int i=0; i<size; i++)
{
massiv[i]=exp(massiv[i])*exp(n);
}
}
};
int main()
{
int const a=4,k=10000;
int mas[a];
randomize();
for (int i=0;i<a;i++)
{
mas[i]=rand()%101-50;
}
Function<int,a,k>::MyArray(mas);
getch();
return 0;
}