Ayrıca ortalama hesaplayabilir bağımsız değişken sayısı kullanılarak. Bu ilke, bilinmeyen sayıda argümanın bir yığında saklandığı ve bunları alabildiğimiz bir fonksiyon.
double average(int n, ...) // where n - count of argument (number)
{
int *p = &n; // get pointer on list of number in stack
p++; // get first number
double *pp = (double *)p; // transformation of the pointer type
double sum = 0;
for (int i = 0; i < n; pp++, i++) //looking all stack
sum+=(*pp); // summarize
return sum/n; //return average
}
Ve gibi bu fonksiyonu kullanarak yapabilirsiniz:
double av1 = average(5, 3.0, 1.5, 5.0, 1.0, 2.0);
double av2 = average(2, 3.0, 1.5);
Ama argüman sayısı n ile aynı olmalıdır. Ben bunu test
template <typename ForwardIterator, typename F>
double inline averageOf (ForwardIterator first, ForwardIterator last, F function) {
std::vector<typename std::result_of<F(typename ForwardIterator::value_type)>::type> values;
while (first != last) {
values.emplace_back (function(*first));
++first;
}
return static_cast<double>(std::accumulate (values.begin(), values.end(), 0))/values.size();
}
istemci kodu
şöyledir: Burada
testlerin sayısı girişini okuyana kadar bilinmemektedir ise, * n * sayıların ortalama yapmak için bir döngü gerekiyordu. – FrustratedWithFormsDesigner
Adım 0: Yığın Taşması'na Taşı. Burada konu yok. –
Mükemmel bir soru ve mükemmel bir gözlem.Hardcoding '5' a) sihirli ve b) gereksizdir. –