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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.65
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 16:15     Написать шаблон функции для поиска среднего арифметического массива #1
Написать шаблон функции для поиска среднего арифметического значений массива
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2010, 16:15     Написать шаблон функции для поиска среднего арифметического массива
Посмотрите здесь:

C++ вычисление среднего арифметического из массива
C++ Шаблон функции для нахождения среднего арифметичного элементов масива
Программа для вычисления среднего арифметического и геометрического массива чисел C++
C++ В программе написать функции: вставки элемента, поиска максимального элемента, определения среднего арифметического элементов массива
C++ Составить программу для расчета среднего арифметического двух любых элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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());
}
Шаблон функции.. кхех..
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
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
02.09.2010, 17:12     Написать шаблон функции для поиска среднего арифметического массива #4
Aleksandr1, компилятор у тебя не тот
Используй .push_back(...) или конструируй вектор на основе массива.
Или просто передай в шаблонную функцию указатели на первый элемент массива и на элемент за последним элементом массива
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 17:20  [ТС]     Написать шаблон функции для поиска среднего арифметического массива #5
Компилирую в Visual Studio 2008!
Если есть лучший вариант подскажите буду очень благодарен
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.09.2010, 17:25     Написать шаблон функции для поиска среднего арифметического массива #6
Цитата Сообщение от Nameless One Посмотреть сообщение
компилятор у тебя не тот
Не надо вводить человека в заблуждение, текущий стандарт не поддерживает такую инициализацию. Так что c компилятором у него всё в порядке.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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 как раз-таки поддерживает конкретно эту функцию.
Но заранее извиняюсь, если не прав
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 17:33  [ТС]     Написать шаблон функции для поиска среднего арифметического массива #8
Подскажите пожалуйста как сделать правильно новичку
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
02.09.2010, 17:35     Написать шаблон функции для поиска среднего арифметического массива #9
Aleksandr1, я тебе уже три варианта предложил. Что непонятно-то?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
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;
}
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
02.09.2010, 17:38  [ТС]     Написать шаблон функции для поиска среднего арифметического массива #11
Всем большое спасибо за помощь!!!
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 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;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 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;
}
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);
    
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2013, 09:55     Написать шаблон функции для поиска среднего арифметического массива #16
Ruzhin, не компилируется
krigan
 Аватар для krigan
1 / 1 / 0
Регистрация: 31.10.2012
Сообщений: 92
30.08.2014, 16:04     Написать шаблон функции для поиска среднего арифметического массива #17
Вариант со случайно сгенерированным массивом

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
35
36
37
38
39
40
41
#include <iostream>
#include <stdlib.h>
#include<time.h>
 
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<< " \n ";
    
    return sr/size;
}
 
void main()
{
    setlocale (LC_ALL,"");
    srand(time(NULL));
 
    int const SIZE=5;
 
    double A[SIZE]={};
 
    cout<<" Сгенерированный массив: ";
 
    for (int j = 0; j < SIZE; j++)  
        
    {
        A[j]=rand()%100;
        cout.width(2); cout<<A[j]<< "  ";       
    }
 
    cout<<" \n";
    srednee (A, SIZE);
    
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2014, 16:16     Написать шаблон функции для поиска среднего арифметического массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
30.08.2014, 16:16     Написать шаблон функции для поиска среднего арифметического массива #18
krigan, к твоему коду есть несколько замечаний.
  1. Выполнять I/O в функциях без особой необходимости — плохо.
  2. Сишные заголовочные файлы подключаются без суффикса ".h", но с префиксом "с". Например, вместо <time.h> нужно использовать <ctime>.
  3. Твой код работает только с массивами и не может контейнеры STL.
  4. Называть функции транслитом — моветон. arith_mean куда лучше подходит для названия функции вычисления среднего арифметического.
  5. Некропостинг — плохо.
Yandex
Объявления
30.08.2014, 16:16     Написать шаблон функции для поиска среднего арифметического массива
Ответ Создать тему
Опции темы

Текущее время: 09:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru