Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.65
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
#1

Написать шаблон функции для поиска среднего арифметического массива - C++

02.09.2010, 16:15. Просмотров 7010. Ответов 17
Метки нет (Все метки)

Написать шаблон функции для поиска среднего арифметического значений массива
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2010, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать шаблон функции для поиска среднего арифметического массива (C++):

Написать шаблон функции для поиска среднего арифметического значений массива - C++
#include <iostream> #include <windows.h> using namespace std; template <typename T> int arifm( T mas, int size) { int...

Написать шаблон функции для поиска среднего арифметического значений массива - C++
Кто знает как решить задачу на С++, при помощи шаблонов функций? Написать шаблон функции для поиска среднего арифметического значений ...

В программе написать функции: вставки элемента, поиска максимального элемента, определения среднего арифметического элементов массива - C++
В целочисленном массиве Х(N) после каждого четного числа вставить максимальный элемент массива. Найти среднее арифметическое элементов ...

Шаблон функции вычисляющей квадрат среднего арифметического четных элементов массива - C++
Шаблон функции в которую передается массив и поворачивается квадрат среднего арифметического всех парных элементов

Написать шаблон функции для вычисления среднего значения элементов массива - C++
Напишите шаблон функции, возвращающей среднее арифметическое всех элементов массива. Аргу-ментом функции должен быть размер массива типа...

Шаблон функции для поиска произведения всех элементов одномерного массива - C++
Есть задание: /* Создать функцию-шаблон. Используя эту функцию, проверить её для разных типов параметров (int, double, float). ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.09.2010, 16:34 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <iterator>
#include <vector>
 
template <typename Iterator>
double average(Iterator first, Iterator last)
{
    int n = 0;
    double sum = 0;
    
    while(first != last) { 
        sum += *first++;
        ++n;
    }
   
    return sum/n;
}
 
int main() 
{
   std::vector<int> v = { 1, 2, 3, 4 };    
   std::cout << average(v.begin(), v.end());
}
Шаблон функции.. кхех..
0
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 16:52  [ТС] #3
Спасибо но при компиляции выдает вот что!
Error 1 error C2552: 'v' : non-aggregates cannot be initialized with initializer list c:\users\александр\documents\visual studio 2008\projects\3\3\3.cpp 21 3
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
02.09.2010, 17:12 #4
Aleksandr1, компилятор у тебя не тот
Используй .push_back(...) или конструируй вектор на основе массива.
Или просто передай в шаблонную функцию указатели на первый элемент массива и на элемент за последним элементом массива
0
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 17:20  [ТС] #5
Компилирую в Visual Studio 2008!
Если есть лучший вариант подскажите буду очень благодарен
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
02.09.2010, 17:25 #6
Цитата Сообщение от Nameless One Посмотреть сообщение
компилятор у тебя не тот
Не надо вводить человека в заблуждение, текущий стандарт не поддерживает такую инициализацию. Так что c компилятором у него всё в порядке.
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
02.09.2010, 17:30 #7
Aleksandr1, вроде gcc свежий уже поддерживает такую инициализацию, а вот msvs еще нет. Точно не знаю.
Для тебя это не суть важно. Можешь заменить строку 21 на это:
C++
1
2
3
std::vector<int> v;
for(size_t i = 1; i < 5; ++i)
    v.push_back(i);
Или на вот это:
C++
1
2
3
const size_t size = 4;
int ivec[4] = {1, 2, 3, 4};
std::vector<int> v(ivec, ivec + size);
А можешь вообще заменить содержимое функции main:
C++
1
2
3
4
const size_t size = 4;
int ivec[4] = {1, 2, 3, 4};
// И никакие векторы здесь не нужны :)
std::cout << average(ivec, ivec + size);
rangerx, gcc и msvs уже поддерживают некоторые фичи нового стандарта. И где-то мне на форуме говорили, по-моему fasked, что gcc как раз-таки поддерживает конкретно эту функцию.
Но заранее извиняюсь, если не прав
0
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 17:33  [ТС] #8
Подскажите пожалуйста как сделать правильно новичку
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
02.09.2010, 17:35 #9
Aleksandr1, я тебе уже три варианта предложил. Что непонятно-то?
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
02.09.2010, 17:38 #10
Вариант бзе векторов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
template <typename T>
double average(const T *MAS, const size_t SIZE)
{
    double sum=0;
    for (int i=0; i<SIZE; i++)
        sum+=MAS[i];
 
    return sum/SIZE;
}
int main (void)
{
    const int SIZE=10;
    int MAS[SIZE]={1,2,3,4,5,6,7,8,9,10};
 
    std::cout << "Average: " << average (MAS, SIZE);
    std::cout << std::endl;
 
    return 0;
}
1
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 17:38  [ТС] #11
Всем большое спасибо за помощь!!!
0
ForEveR
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
02.09.2010, 20:36 #12
В догонку. Вдруг пригодится.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <algorithm>
#include <vector>
 
template<class T>
class Average
{
public:
   Average():sum(0), num(0){}
   ~Average(){}
   void operator()(T elem)
   {
      sum+=elem;
      num++;
   }
   double Aver()
   {
      return sum/num;
   }
 
private:
   double sum;
   int num;
};
 
int main()
{
   std::vector<int> Vec;
   for(int i=1; i<=10; ++i)
      Vec.push_back(i);
   Average<int> Ob=std::for_each(Vec.begin(), Vec.end(), Average<int>());
   std::cout<< Ob.Aver() <<'\n';
   return 0;
}
1
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.09.2010, 21:50 #13
И на добивку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <numeric>
#include <cstddef>
 
template<typename T>
double Average(const T* arr, std::size_t size) {
  return static_cast<double>(std::accumulate(arr, arr + size, 0)) / size;
}
 
int main() {
  int arr[] = { 1, 2, 3, 4, 5, 6 };
  std::cout << Average(arr, sizeof(arr) / sizeof(arr[0])) << std::endl;
  return 0;
}
1
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.09.2010, 22:13 #14
Также очень интересный вариант решения с помощью boost::accumulators:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstddef>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/mean.hpp>
 
template<typename T>
double Average(const T* arr, std::size_t size) {
  using namespace boost::accumulators;
 
  accumulator_set<T, stats<tag::mean>> acc;
  for (std::size_t i = 0; i < size; ++i)
    acc(arr[i]);
 
  return mean(acc);
}
 
int main() {
  int arr[] = { 1, 2, 3, 4, 5, 6 };
  std::cout << Average(arr, sizeof(arr) / sizeof(arr[0])) << std::endl;
  return 0;
}
1
Ruzhin
15 / 15 / 3
Регистрация: 18.01.2013
Сообщений: 17
31.01.2013, 00:52 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
template <typename T> double srednee (T A[], int size)
{
    double sr=0;
    for (int i=0; i<size; i++)
    {
        sr+=A[i];
    }
 
    cout <<"Среднее арифметическое значение массива: " <<sr/size <<endl;
    
    return sr/size;
}
 
void main()
{
    setlocale (LC_ALL,"");
 
    int const SIZE=5;
 
    float A[SIZE]={1.3,2.4,3.78,4.79,6.56};
 
    srednee (A, SIZE);
    
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 00:52
Привет! Вот еще темы с ответами:

Написать функцию подсчета среднего арифметического значений элементов массива - C++
Написать функцию подсчета среднего арифметического значений элементов заданного массива вещественных чисел с заданой длинной. По одному...

Написать программу для подсчёта среднего арифметического - C++
Доброго времени суток. Есть задачка....нужен калькулятор, но не со стандартным набором функций...задача такова, вводим количество разных...

Выдает ошибку ! Даны два массива. Найти отклонение медианы от среднего арифметического для третьего массива - C++
3. Даны два массива. Найти отклонение медианы от среднего арифметического для третьего массива, элементы которого - частное от деления...

Разработайте перегруженные функции нахождения среднего арифметического и среднего геометрического трех целых и вещественных чисел - C++
Составьте программу для решения задачи. Выясните, что больше: среднее арифметическое или среднее геометрическое трех положительных чисел....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.01.2013, 00:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru