Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+1

Программирование, язык с++

Среднее значение последовательности

Определите среднее значение всех элементов последовательности, завершающейся числом 0. Сам ноль в последовательность не входит.

Использовать массивы в данной задаче нельзя.

Входные данные

Вводится последовательность целых чисел, не равных 0, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит признаком её окончания).

Выходные данные

Выведите ответ задачи.
Примеры

Ввод
1
7
9
0
Вывод
5.66666666667
МОЙ КОД:
#include <iostream>
using namespace std;
int main ()
{
int a,sum=0,cnt=0;
cin >> a;
while (a>0) {
sum=sum+a;
cnt=cnt+1;
cin >> a;
}
cout << sum/cnt;
return 0;
}
ПРОБЛЕМА В ТОМ, ЧТО Я НЕ ПОНИМАЮ, КАК ИМЕННО В С++ СДЕЛАТЬ ТАК, ЧТОБЫ ОТВЕТ ВЫВОДИЛСЯ В БЕСКОНЕЧНОЙ ДЕСЯТИЧНОЙ ДРОБИ. то есть я понимаю, что / - это целая часть от деления, а % - это дробная часть от деления.

По дате
По рейтингу
Аватар пользователя
Высший разум
3мес
123456789101112131415161718192021222324252627
 #include <iostream>

using namespace std;

class Sequence { 
    size_t count = 0; 
    long long sum = 0LL; 
public: 
    bool add(const int value) { 
        if (!value) return false; 
        sum += value; 
        ++count; 
        return true; 
    } 
    double average() const { 
        return static_cast<double>(sum) / static_cast<double>(count); 
    } 
};

int main() { 
    cout.setf(ios::fixed); 
    cout.precision(15); 
    Sequence sequence; 
    int value; 
    do cin >> value; while (sequence.add(value)); 
    cout << sequence.average() << '\n';  
} 
Аватар пользователя
Гений
3мес

Любой из целых операндов в делении приводится к double. Тогда и весь результат деления будет double.
Число выводимых знаков задается с помощью метода precision перед выводом.

12
 cout.precision(10); //будет выводится 10 значащих цифр
cout << (double)sum/cnt; //sum приведен здесь к типу double 

Целые числа могут быть и отрицательными, так что проверка a>0 вряд ли уместна.

Аватар пользователя
Мастер
3мес

Для того, чтобы ответ выводился с бесконечной десятичной дробью в C++, можно использовать оператор деления с плавающей точкой (/) и привести один из операндов к типу данных с плавающей точкой. Например, можно привести переменные sum и cnt к типу double, чтобы результат деления был с плавающей точкой. Вот пример исправленного кода:

#include <iostream>
using namespace std;

int main() {
int a, cnt = 0;
double sum = 0.0;

cin >> a;

while (a > 0) {
sum = sum + a;
cnt = cnt + 1;
cin >> a;
}

cout << fixed << sum / cnt;

return 0;
}