Задача c++, даю 50 баллов
Среднее арифметическое
Выведите среднее арифметическое элементов последовательности. Решение оформите как функцию double average(vector &A).
Входные данные:
В первой строке входных данных записано натуральное число n (n≤100) — количество элементов последовательности. В следующей строке даны n целых чисел, по модулю не превышающих 100, — элементы последовательности.
Выходные данные:
Выведите ответ на задачу с точностью не менее трёх знаков после запятой.
Примеры
Ввод
5
1 2 3 4 5
Вывод
3.0000000000
Ввод
3
1 2 10
Вывод
4.3333333333

Ответы
Ответ:
double sum = 0;
for(int i = 0; i < a.size(); ++i)
sum += А[i];
return sum / a.size();
Может быть будет интересно.
#include <vector>
#include <string>
#include <iostream>
using namespace std;
double average(vector<int>& myVec) {
double sum = 0;
for (auto& i : myVec) { // таким образом можно обращаться к элементам вектора
sum += i;
}
return sum / myVec.size();
}
int main() {
setlocale(LC_ALL, "Ru");
int n;
do { // проверка на ввод n
cout << "Введите n:\nn = ";
cin >> n;
if (n > 100) {
cout << "n > 100 - противоречие условию, т.к. n принадлежит [1,100].\n";
}
else if (n == 0) {
cout << "0 не является натуральным числом.\n";
}
if (n == 0 || n > 100) {
cout << "Ошибка ввода. Попробуйте ещё раз.\n\n";
}
} while (n <= 0 || n > 100);
string str;
vector<int> myVec;
getline(cin, str); // собственно записывает строку в переменную str, т.к. cin >> str позволяет записать только первое вхождение (т.е. до пробела), а нам нужна полноценная строка
// В с++ есть забавный баг. При первом проходе, компилятор
// не читает getline(...), зато при повторных проходах - читает :D.
// Поэтому приходиться выкручиваться и писать вот так.
while (myVec.size() == 0) {
do {
cout << "\nВведите, через пробел, значения вектора:\n";
getline(cin, str);
if (str.empty()) {
cout << "Вы ничего не ввели. Попробуйте ещё раз.\n";
}
} while (str.empty()); // проверка на случай, если пользователь ничего не ввёл
str += " "; // это надо для того, чтобы следующий цикл while корректно работал
while (str.length() != 0) {
myVec.push_back(stoi(str.substr(0, str.find_first_of(" ")))); // добавляет в конец вектора первый элемент до пробела (stoi() - конвертирует string в int)
str.erase(0, str.find_first_of(" ") + 1); // удаляет первый элемент в str (т.е. тот, который мы выше занесли в наш вектор)
}
if (myVec.size() > n) { // снова наши проверки
cout << "Вы ввели значение вектора > n. Попробуйте ещё раз.\n";
myVec.clear();
}
else if (myVec.size() < n) {
cout << "Вы ввели значение вектора < n. Попробуйте ещё раз.\n";
myVec.clear();
}
}
cout.precision(10);
cout << "Среднее арифметическое: " << average(myVec);
return 0;
}

