using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Task_4 { class Program { static void Main(string[] args) { Random rnd = new Random(); int n = 58, a = 29, b = 52, a1 = 11, b1 = 37; List myArray = new List(), resultArray = new List(); for (int i = 0; i < n; ++i) { myArray.Add(rnd.Next(a, b)); if (myArray[i] >= a1 && myArray[i] <= b1) resultArray.Add(myArray[i]); } Console.WriteLine("-------------------------------------------------------------------------------"); Console.WriteLine("Массив псевдослучайных чисел в диапазоне [a,b]:"); for (int i = 0; i < n; ++i) Console.Write("{0} ", myArray[i]); Console.WriteLine("\n-------------------------------------------------------------------------------"); resultArray.Sort(); resultArray.Reverse(); Console.WriteLine("Упорядосенный по убыванию массив псевдослучайных чисел в диапазоне [a1,b1]:"); double summ = 0; for (int i = 0; i < resultArray.Count; ++i) { Console.Write("{0} ", resultArray[i]); summ += resultArray[i]; } // вычислим ранги List rangs = new List(); List used = new List(); for (int i = 0; i < resultArray.Count; ++i) { rangs.Add(0); used.Add(false); } double midValue = summ / resultArray.Count; summ = 0; int rang = 1, count = 0; bool flag = true; for (int i = 0; i < resultArray.Count; ++i) { used[i] = true; count = 1; rang = i + 1; summ = rang; flag = false; for (int j = i + 1; j < resultArray.Count; ++j) { if (resultArray[i] == resultArray[j] && !used[j]) { rang++; summ += rang; used[j] = true; count++; flag = true; } else break; } if (flag) { for (int j = 0; j < used.Count; ++j) { if (used[j] && rangs[j] == 0) rangs[j] = summ / count; } continue; } if (rangs[i] == 0) { rangs[i] = i + 1; } } Console.WriteLine("\nРанги:"); for (int i = 0; i < resultArray.Count; ++i) { Console.Write("{0} ", rangs[i]); } Console.WriteLine("\nСреднее значение: {0:f2}", midValue); summ = 0; for (int i = 0; i < resultArray.Count; ++i) summ += (resultArray[i] - midValue) * (resultArray[i] - midValue); Console.WriteLine("Сумма квадратов отклонений от среднего значения: {0:f2}", summ); Console.WriteLine("-------------------------------------------------------------------------------"); // группировка данных int k = 4, // количество групп omega = resultArray[0] - resultArray[resultArray.Count - 1] + 1, // размах данных length = (int)(omega / k); // длинна группы Console.WriteLine("Количество групп: {0}\nРазмах данных: {1}\nДлина группы: {2}", k, omega, length); // формируем массив границ интервалов List begin = new List(), end = new List(); int leftRange = resultArray[0], rightRange = resultArray[resultArray.Count - 1]; while (leftRange >= rightRange) { begin.Add(leftRange); leftRange -= length; end.Add(leftRange); leftRange -= 1; } Console.Write("Границы групп: "); for (int i = 0; i < begin.Count; ++i) Console.Write("{0} - {1} ", begin[i], end[i]); // вычисляем частоту List frequency = new List(); List frequency2 = new List(); for (int i = 0; i < begin.Count; ++i) { frequency.Add(0); frequency2.Add(0); } for (int i = 0; i < resultArray.Count; ++i) { for (int j = 0; j < begin.Count; ++j) { if (resultArray[i] >= end[j] && resultArray[i] <= begin[j]) { frequency[j]++; break; } } } frequency2[0] = frequency[0]; for (int i = 1; i < frequency.Count; ++i) { frequency2[i] = frequency[i] + frequency2[i - 1]; } Console.WriteLine(); Console.Write("Частота: "); for (int i = 0; i < frequency.Count; ++i) Console.Write(" {0} ", frequency[i]); Console.WriteLine(); Console.Write("Накопленная частота:"); for (int i = 0; i < frequency2.Count; ++i) Console.Write(" {0} ", frequency2[i]); Console.WriteLine(); // расчет медианы int Xn = 0, // начало мединного интервала h = 0, // ширина мединного интервала nMe = 0, // частота мединного интервала SMe = 0; // накомпленная частота до мединного интервала int ind = 0; for (int i = 0; i < begin.Count; ++i) { if (midValue <= begin[i] && midValue >= end[i]) { ind = i; break; } } Xn = end[ind]; h = begin[ind] - end[ind]; nMe = frequency[ind]; SMe = (ind > 0) ? frequency2[ind - 1] : 0; double mean = Xn + (double)((double)resultArray.Count / 2 - SMe) / nMe * h; Console.WriteLine("Медиана: {0:f2}", mean); // расчет моды int X0 = 0, // начало модального интервала n1 = 0, // частота до интервала n2 = 0, // частота интервала n3 = 0; // частота после интервала h = 0; ind = 0; int maxValue = -999; for (int i = 0; i < frequency.Count; ++i) { if (frequency[i] > maxValue) { maxValue = frequency[i]; ind = i; } } X0 = end[ind]; h = begin[ind] - end[ind]; n2 = frequency[ind]; n1 = (ind > 0) ? frequency[ind] : 0; n3 = (ind + 1 < begin.Count) ? frequency[ind + 1] : 0; double mod = X0 + h * ((double)(n2 - n1)) / ((n2 - n1) + (n2 - n3)); Console.WriteLine("Мода: {0:f2}", mod); } } }