Мне нужно вычислить все средние (режим, среднее, медиана, диапазон) из массива чисел.
Калькулятор берет входные данные с NumericUpDown
и добавляет их к listBox
, Элементы listBox добавляются к List<Decimal>
(потому что печать на этикетке кажется проще).
Для каждого метода усреднения список преобразуется в Array
, потому что кажется, что его легче вычислить.
Не буду лгать, я даже не знаю, с чего начать с медианы ...
Я скопировал несколько кодовых форм различных решений в StackOverflow и что нет, но ни одно из них не работаетпотому что они не были написаны для десятичных знаков и слишком честно, я не совсем понимаю код.
AddNumbers
//Add number to list and retun to 0.
private void btnAddNums_Click(object sender, EventArgs e)
{
//Add selcted item from listbox
listBoxNumbers.Items.Add(numUpDownAvg.Value);
//Create new instance of listNumbers
List<Decimal> listNumbers = new List<Decimal>();
//for each decimal in listbox...
foreach (Decimal listItems in listBoxNumbers.Items)
{
//Add to listNumbers
listNumbers.Add(listItems);
numUpDownAvg.Value = 0;
}
//iterate though list printing each item seperate by a comma
for (int i = 0; i < listNumbers.Count; i++)
{
txtBoxNumbers.Text = (String.Join(",", listNumbers));
}
//print list to console
Console.WriteLine(String.Join(",", listNumbers));
}
Медиана
//This button prints median to results
private void btnMedian_Click(object sender, EventArgs e)
{
//Create new instance of listNumbers
List<Decimal> listNumbers = new List<Decimal>();
//for each decimal in listbox...
foreach (Decimal listItems in listBoxNumbers.Items)
{
//Add to listNumbers
listNumbers.Add(listItems);
}
//Convert list to array
decimal[] listArrayofNumbers = listNumbers.ToArray();
Array.Sort(listArrayofNumbers);
var n = listArrayofNumbers.Length;
decimal median;
var isOdd = n % 2 != 0;
if (isOdd)
{
median = listArrayofNumbers[(n + 1) / 2 - 1];
}
else
{
median = Convert.ToDecimal(listArrayofNumbers[n / 2 - 1] + listArrayofNumbers[n / 2]) / 2.0d;
}
// Console.WriteLine(median);
}
}
ошибка median = Convert.ToDecimal(listArrayofNumbers[n / 2 - 1] + listArrayofNumbers[n / 2]) / 2.0d;
Ошибка говорит "Оператор" / "нельзя использовать с типом десятичный или двойной"
, предполагая, что мне нужно где-то привести к десятичному числу?Очевидно, что Convert.ToDecimal не прав ...
TIA!