Здравствуйте. Вот задание:
То есть выполнить задание 2 варианта используя шаблоны.
Я написал такой код. Но он работает только с integer'ом. С флоатом и даблом выдает какую то хрень. Я делал отладку пошагово и понял что ошибка где то в функции void create(T *arr, T n);
Но в чем именно вообще не понимаю
Если подскажете буду очень благодарен.
#include <iostream>
#include <math.h>
using namespace std;
template <typename T> int func(T n);
template <typename T> void create(T *arr, T n);
template <typename T> T positiv(T *arr, int n);
template <typename T> T proizv(T *arr, int n);
template <typename T> void sort(T *arr, int n);
template <typename T> void print(T *arr, int n);
int main()
{
int n;
cin >> n;
func(n);
return 0;
}
template <typename T>
int func(T n)
{
T *arr1 = new T[n];
create(arr1, n);
/*T *arr2 = new T[n];
create(arr2, n);
T *arr3 = new T[n];
create(arr3, n);*/
//T s1 = positiv(arr1, n);
//T p1 = proizv(arr1, n);
//sort(arr1, n);
//T s2 = positiv(arr2, n);
//T p2 = proizv(arr2, n);
//sort(arr2, n);
//T s3 = positiv(arr3, n);
//T p3 = proizv(arr3, n);
//sort(arr3, n);
//cout << s1 << " ";
//if (p1 == -100)
// cout << "No elements between max and min." << endl;
//else
// cout << p1 << endl;
print(arr1, n);
/*cout << s2 << " ";
if (p2 == -100)
cout << "No elements between max and min." << endl;
else
cout << p2 << endl;
print(arr2, n);
cout << s3 << " ";
if (p3 == -100)
cout << "No elements between max and min." << endl;
else
cout << p3 << endl;
print(arr3, n);*/
system("pause");
return 0;
}
template <typename T>
void create( T *arr, T n)
{
for (int i = 0; i < n; i++)
{
arr[i] = 0;
}
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
}
template <typename T>
T positiv(T *arr, int n)
{
T i, summ;
for (i = summ = 0; i < n; i++)
{
if (arr[i] > 0) summ += arr[i];
}
return summ;
}
template <typename T>
T proizv(T *arr, int n)
{
int i, maxelem, minelem;
maxelem = minelem = 0;
for (maxelem = minelem = i = 0; i < n; i++)
{
if (fabs(arr[i]) > fabs(arr[maxelem])) maxelem = i;
if (fabs(arr[i]) < fabs(arr[minelem])) minelem = i;
}
T temp;
if (abs(maxelem - minelem) > 1)
{
int stelem = (maxelem < minelem ? maxelem : minelem);
int endelem = (maxelem < minelem ? minelem : maxelem);
for (i = stelem + 1, temp = 1; i < endelem; i++)
temp *= arr[i];
}
else
temp = -100;
return temp;
}
template <typename T>
void sort(T *arr, int n)
{
T temp;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j <= n - 1; j++)
if (arr[i] < arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
template <typename T>
void print(T *arr, int n)
{
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
delete[] arr;
}
Итак, ваш шаблон:
template <typename T>
int func(T n)
{
T *arr1 = new T[n];
Подставим для double
:
int func(double n)
{
double *arr1 = new double[n];
И как вы себе представляете массив из, скажем, 2.5 элементов? n
же у вас - double
!
В create
та же некорректность - вы используете n
с плавающей точкой...
P.S. А вообще, очень странно смотрится чисто C-шный подход с применением шаблонов :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно сделать синхронизацию с помощью мьютексов, но почему то пишет "индентификатор CloseHundle" не определен
Здравствуйте! Сейчас пытаюсь искать алгоритмы Маркова с помощью генетических алгоритмовЕсть такой вот код:
Завожу глобальную переменную собственноручно написанного класса в файле maincpp следующим образом:
Есть стандартный вектор, допустим типа std::vector<int>Есть функция void plusOne(std::vector<int>::iterator it1, std::vector<int>::iterator it2), прибавляющая всем элементам...