У меня есть цикл, который повторяется 100 раз и каждый раз генерирует случайное число

Random rnd = new Random();
        const double MAX = 42.0;
        const double MIN = 34.5;
        double ex4 = 0;
        for (int i = 0; i < 101; i++)
        {
            double num = rnd.NextDouble() * (MAX - MIN) + MIN;
            
            Console.WriteLine("{0:f1}", num);
        }

        Console.WriteLine("the average of the degres is: {0}",ex4);

И я хочу вычислить среднее значение чисел и распечатать его, но я не знаю, как сохранить все значения, которые я мог бы вычислить, или есть ли другой способ

-3
Lior Madav 10 Окт 2021 в 19:55

4 ответа

Лучший ответ

Сделайте ex4 двойным, а не int.

Внутри цикла ex4 + = num;

Выведите среднее значение как ex4 / 101.

2
Dronz 10 Окт 2021 в 16:59
Random rnd = new Random();
const double MAX = 42.0;
const double MIN = 34.5;
List<double> results = new List<double>();
for (int i = 0; i < 101; i++)
{
    double num = rnd.NextDouble() * (MAX - MIN) + MIN;
    if (num > 36.6 && num< 37.6)
    {
        
    }
    Console.WriteLine("{0:f1}", num);
    results.Add(num);
}

double average = results.Sum() / results.Count;
Console.WriteLine("the average of the degres is: {0}", average);
1
Mateech 10 Окт 2021 в 17:02

До сих пор во всех ответах рассказывается, как отслеживать все значения, чтобы впоследствии можно было взять среднее.

Однако это не лучший подход, лучший подход - отслеживать два значения:

  • Сумма значений
  • Сумма ценностей

После того, как вы закончите цикл, вы просто разделите сумму на среднее значение, и результатом будет среднее значение.

В псевдокоде:

double sum = 0;
int amount = 0;

for (...)
{
    value = random_calculation();
    sum = sum + value;
    amount = amount + 1;
}

write_to_output(sum / amount);

Этот подход лучше, потому что вы отслеживаете только 2 значения в памяти. Если вы отслеживаете все значения, вы занимаете 100 ячеек памяти.
Очевидно, что всего для 100 значений этим можно пренебречь, но представьте, что вы хотите сделать то же самое для миллионов значений, вы можете столкнуться с проблемами, связанными с ОЗУ.

1
Dominique 10 Окт 2021 в 17:09
 Random rnd = new Random();
    const double MAX = 42.0;
    const double MIN = 34.5;
    double ex4 = 0;
    int iterations=0;
    for (int i = 0; i < 101; i++)
    {
        double num = rnd.NextDouble() * (MAX - MIN) + MIN;
        if (num > 36.6 && num< 37.6)
        {
           ex4+=num;
           iterations++;
            
        }
        Console.WriteLine("{0:f1}", num);
    }
    ex4=ex4/iterations;
    Console.WriteLine("the average of the degres is: {0}",ex4);

`

1
Essam Sherifa 10 Окт 2021 в 17:32