Другие языки программирования и технологии

Программирование на Си++

Запрашивает у пользователя положительное целое N Запрашивает у него N целых чисел, сохраняет их в массиве а потом Выводит их среднее арифметическое и дисперсию.
На Си++(как можно проще
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
class Box {
public:
Box() : count_(0U) {}
void clear() {
box_.clear();
box_.shrink_to_fit();
}
void count(const size_t n) {
count_ = n;
}
bool add(const int value) {
box_.push_back(value);
return box_.size() < count_;
}
double average()const {
auto sum = 0.0;
for (const auto value : box_) sum += value;
return sum / count_;
}
double dispersion()const {
auto sum = 0.0;
const auto avg = average();
for (const auto value : box_) sum += pow(value - avg, 2);
return sum / count_;
}
double sd()const {
return sqrt(dispersion());
}
private:
size_t count_;
vector<int> box_;
};
int main() {
cout << "n: ";
size_t limit;
cin >> limit;
Box box;
box.count(limit);
cout << ">>> ";
int value;
do cin >> value; while (box.add(value));
const streamsize place = 3U;
cout << fixed << setprecision(place)
<< "\nAverage: " << box.average()
<< "\nDispersion: " << box.dispersion()
<< "\nStandard deviation: " << box.sd()
<< endl;
system("pause");
}
SM
Stranik Mira
94 514
Лучший ответ
#include "iostream"

using namespace std;

int main()

{ double s,d,x,a[100000]; int k,n; na:cout << "n=?\b"; cin >> n; s=0; d=0; for (k=0 ; k<n ; k++){cout << k << " : "; cin >> a[k]; s+=a[k];}

s/=n; for (k=0 ; k<n ; k++) { x=a[k]-s; d+=x*x; }

d/=n; cout << "среднее=" << s << '\n' << "дисперсия=" << d << '\n'; goto na; }
Серега 1 для новича код не прозрачный - не подходит
впадает в бесконечный цикл
n=?0 : среднее=2
дисперсия=0
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
дисперсия=2
n=?0 : 1 : 2 : среднее=1
Алишер Молдажанов Код абсолютно хрестоматийный! Запрашивает n, аккуратно вводит первые n элементов массива с приглашением, находит по ним среднее и дисперсию, выводит их на экран и предлагает продолжить снова!..
Алишер Молдажанов А вот зачем я сделал приглашение на ввод очередного элемента массива от 1 до n на единицу меньше номера этого элемента- сам не знаю! В С/С++ массивы, конечно, считаются с нулевого номера, но вводить-то лучше по приглашению истинный номер элемента, а не машинный! Поэтому нужно исправить:
cout << k+1 << " : ";