Średnia ważona

0

Cześć! Mam do napisania funkcję, która obliczy średnią ważoną wg tego wzoru: a1p1 + a2p2 +···+ anpn + an+1(1−p1 −p2 −···−pn). Jej jedyny określony argument to n. Pozostałe argumenty to ciąg liczb typu double postaci a1,p1,a2,p2,...,an,pn,an+1. Ponadto funkcja ma sprawdzać podane warunki pi >= 0 dla i = 1,2,...,n; pi <= 1 dla i = 1,2,...,n; p1 + p2 +···+ pn <= 1. Przygotowałem sobie taki oto szkielet funkcji, ale nie za bardzo wiem, jak go wypełnić. Ktoś mógłby pomóc?

double sredniaWazona(unsigned int n,...)
{
	va_list ap;
	
        unsigned int i;
	double *wagi=new double[n];
	double *oceny=new double[n+1];
		
	va_start (ap, n);
	
	for(int i=va_arg(ap,unsigned int);i<n;i=va_arg(ap,unsigned int))
		{
			
		}
	
	va_end (ap);
}
0
template <class T>
auto WeightedAverage(T begin, T end)
{
    if (begin == end) {
        throw invalid_argument("Range can't be empty");
    }
    typename T::value_type avrg {}; 
    typename T::value_type totalWeight {};
    auto a = *begin++;
    while (begin != end) {
         auto w = *begin++;
         totalWeight += w;
         avrg += w * a;
         if (begin == end) {
              throw invalid_argument("range distance is not odd");
         }
         a = *begin++;
    }
    avrg += (1 - totalWeight) * a;

    return avrg;
}

https://wandbox.org/permlink/AQD7tzYSKYFkbY4e

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.