Помогите оптимизировать код на с#
Техническое задание к программе:
• Программа сообщает пользователю, что ему необходимо вводить числа по одному, завершая ввод клавишей Enter.
• После каждого введённого числа программа должна напечатать через пробел все введённые к настоящему моменту числа, а также сообщить минимальное, максимальное из них, среднее значение и среднеквадратичное отклонение (СКО).

В программе должны быть созданы несколько методов, например:
• Для печати на экран сообщения о необходимости ввода очередного числа и для считывания этого числа.
• Для добавления очередного числа в массив.
• Для расчёта статистических величин.
код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IvanovLabRab
{
class Program
{
static void Main(string[] args)
{
Console.Write("Введите количество элементов вашего массива: ");
int count = int.Parse(Console.ReadLine());
double[] massive = new double[count];
Console.WriteLine("Вы должны ввести числа по одному через Enter");
for (int i = 0; i < massive.Length; i++)
{
Console.WriteLine(" Введите " + (i + 1) + "-е число");
double.TryParse(Console.ReadLine(), out massive[i]);
Console.WriteLine(" Ваши числа массива: ");
for (int n = 0; n < massive.Length; n++)
{
if (n <= i)
{
Console.Write(massive[n] + " ");
}

}
Console.WriteLine();
Console.WriteLine("Минимум: " + Minimum(i, massive));
Console.WriteLine();
Console.WriteLine("Максимум: " + Maximum(i, massive));
Console.WriteLine();
Console.WriteLine("Среднее значение: " + SredneeZnachenie(i, massive));
Console.WriteLine();
Console.WriteLine("СКО : " + SredneKvadratichZnach(i, massive));
}
Console.ReadLine();
}
static double Minimum(int i, double[] massive)
{
double min = massive[0];
for (int k = 0; k <= i; k++)
if (min > massive[k])
{
min = massive[k];
}
{
return min;
}

}
static double Maximum(int i, double[] massive)
{
double max = massive[0];
for (int k = 0; k <= i; k++)
if (max < massive[k])
{
max = massive[k];
}
{
return max;
}
}
static double SredneeZnachenie(int i, double[] massive)
{
double sz = 0;
double sum = 0;
{
for (int k = 0; k <= i; k++)
sum = sum + massive[k];
}
sz = sum / (i + 1);

return sz;
}
static double SredneKvadratichZnach(int i, double[] massive)
{

double sko = 0;
double kvadr = 0;
double podkor = 0;

for (int k = 0; k <= i; k++)
{
kvadr += (massive[k] - SredneeZnachenie(i, massive)) * (massive[k] - SredneeZnachenie(i, massive));
}

podkor = kvadr / i;
sko = Math.Sqrt(podkor);
return sko;

}
}
}

Ответы

Ответ дал: settom
1

Объяснение:

Наверное, для глобальной оптимизации лучше вообще отказаться от массива как такового. В шарпе есть прекрасная альтернатива - List с уже встроенными функциями поиска минимального, максимального и среднего. Для нахождения СКО правда нужно применить дополнительные телодвижения.

И в условии задачи не сказано, что количество элементов заренее известно или задаётся вначале, поэтому заменил цикл на бесконечный с условием выхода, если будет введено нечто, что не распознается как число.

using System;

using System.Collections.Generic;

using System.Linq;

namespace IvanovLabRab

{

   class Program

   {

       static void Main(string[] args)

       {

           List<double> massive = new List<double>();

           Console.WriteLine("Вы должны ввести числа по одному через Enter\nДля выхода введите любое не числовое значение");

           int i = 0;

           do

           {

               i++;

               Console.WriteLine(" Введите " + i.ToString() + "-е число");

               try

               {

                   massive.Add(double.Parse(Console.ReadLine()));

               }

               catch

               {

                   break;

               }

               PrintMassiv(massive);

               Console.WriteLine();

               Console.WriteLine("Минимум: " + Minimum(massive));

               Console.WriteLine();

               Console.WriteLine("Максимум: " + Maximum(massive));

               Console.WriteLine();

               Console.WriteLine("Среднее значение: " + SredneeZnachenie(massive));

               Console.WriteLine();                

               Console.WriteLine("СКО : " + SredneKvadratichZnach(massive));

           } while (true);

           Console.WriteLine("Цикл ввода окончен");

           Console.ReadLine();

       }

       static void PrintMassiv(List<double> InArray)

       {

           Console.WriteLine(" Ваши числа массива: ");

           foreach(double Number in InArray) Console.Write(Number.ToString() + " " );

           Console.WriteLine();

       }

       static double Minimum(List<double> InArray)

       {

           return InArray.Min();

       }

       static double Maximum(List<double> InArray)

       {

           return InArray.Max();

       }

       static double SredneeZnachenie(List<double> InArray)

       {

           return InArray.Average();

       }

       static double SredneKvadratichZnach(List<double> InArray)

       {

           double average = SredneeZnachenie(InArray);

           double sumOfSquaresOfDifferences = InArray.Select(val => (val - average) * (val - average)).Sum();

           return Math.Sqrt(sumOfSquaresOfDifferences / InArray.Count);

       }

   }

}

Похожие вопросы