Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Татьяна Ларина Ученик (163), открыт 2 недели назад
Среднее значение последовательности

Определите среднее значение всех элементов последовательности, завершающейся числом 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 ответа
Carman Balch Мастер (1168) 2 недели назад
Для того, чтобы ответ выводился с бесконечной десятичной дробью в 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;
}
Татьяна ЛаринаУченик (163) 2 недели назад
пишет, что программа выдает неверный ответ...
Сергей Гений (60401) 2 недели назад
Любой из целых операндов в делении приводится к double. Тогда и весь результат деления будет double.
Число выводимых знаков задается с помощью метода precision перед выводом.
 cout.precision(10); //будет выводится 10 значащих цифр
cout << (double)sum/cnt; //sum приведен здесь к типу double
Целые числа могут быть и отрицательными, так что проверка a>0 вряд ли уместна.
Татьяна ЛаринаУченик (163) 2 недели назад
а что тогда в скобочках написать после while? извиняюсь за такой вопрос, я просто только недавно начала программировать...
Сергей Гений (60401) Татьяна Ларина, while(a)
Николай Веселуха Высший разум (381682) 2 недели назад
 #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';
}
Татьяна ЛаринаУченик (163) 2 недели назад
мне нужно для Сириус курсов... можно попроще как-то, пожалуйста? да и для понимания мне нужно, а многие вещи в Вашем коде я не понимаю. Мне кажется, что мой код нужно немного чем-то дополнить, но только чем...
Николай Веселуха Высший разум (381682)
 #include <iomanip> 
#include <iostream> 
using namespace std; 
int main() { 
    int a; 
    unsigned cnt = 0; 
    double sum = 0.0; 
    while (true) { 
        cin >> a; 
        if (!a) break; 
        sum += a; 
        ++cnt; 
    } 
    cout << fixed << setprecision(15) << sum / cnt << '\n';  
} 
Похожие вопросы