/// <summary> /// Расчет среднего балла и сортировка по критериям /// </summary> /// <param name="sort">Критерии сортировки</param> /// <param name="numBalls">Последовательность из кол-ва генерируемых оценок каждого типа</param> /// <param name="marksWeights">Последовательность оценок, которая была внесена в таблицу</param> /// <returns></returns> internal override List <float> SortMarks(SortMarkStructAverage sort, int numBalls, List <int> marksWeights) { List <float> averBall = new List <float>(); int preBall = 0, preWeight = 0; if (marksWeights != null) { for (int i = 0; i < marksWeights.Count; i++) { preBall += marksWeights[i]; preWeight += 1; } } for (int i = 0; i < sort.marks.Count; i++) { int resultBall = 0, resultWeight = 0; foreach (int oneMark in sort.marks[i]) { resultBall += oneMark; resultWeight += 1; } averBall.Add((float)Math.Round((Convert.ToSingle(resultBall + preBall) / Convert.ToSingle(resultWeight + preWeight)), 2)); } SortCriteriaRecurse(sort, averBall); return(averBall); }
/// <summary> /// Сортировка списка сгенерированных оценок /// </summary> /// <param name="sort">Структура в который находятся критерии для сортировки</param> /// <param name="averBall">Список со средними баллами</param> internal override void SortCriteriaRecurse(SortMarkStructAverage sort, List <float> averBall) { for (int i = 0; i < sort.marks.Count; i++) { for (int j = 0; j < sort.marks[i].Length; j++) { if (!(sort.criteria[0] <= sort.marks[i][j] && sort.criteria[1] >= sort.marks[i][j]) || !(sort.averBall[0] <= averBall[i] && sort.averBall[1] >= averBall[i])) { sort.marks.RemoveAt(i); averBall.RemoveAt(i); SortCriteriaRecurse(sort, averBall); return; } } } }
/// <summary> /// Генерирует последовательность оценок /// </summary> /// <param name="numBalls">Последовательность из кол-ва генерируемых оценок каждого типа</param> /// <param name="criteria">Последовательность с параметрами индивидуальной сложности оценок</param> /// <param name="_averBall">Последовательность с параметрами сортировки по среднему баллу</param> /// <param name="marksWeights">Последовательность оценок, которая была внесена в таблицу</param> /// <returns></returns> public override MarksDataAverage GenMarks(int numBalls, int[] criteria, float[] _averBall, List <int> marksWeights) { List <int[]> itogMarks = new List <int[]>(); GenMarksRecurse(numBalls, itogMarks); SortMarkStructAverage sort = new SortMarkStructAverage { criteria = criteria, marks = itogMarks, averBall = _averBall }; List <float> averBall = SortMarks(sort, numBalls, marksWeights); MarksDataAverage data = new MarksDataAverage { averBall = averBall, countBalls = numBalls, marks = itogMarks }; return(data); }
/// <summary> /// Расчет среднего балла и сортировка по критериям /// </summary> /// <param name="sort">Критерии сортировки</param> /// <param name="numBalls">Последовательность из кол-ва генерируемых оценок каждого типа</param> /// <param name="marksWeights">Последовательность оценок, которая была внесена в таблицу</param> /// <returns></returns> internal virtual List <float> SortMarks( SortMarkStructAverage sort, int numBalls, List <int> marksWeights) => null;
/// <summary> /// Сортировка списка сгенерированных оценок /// </summary> /// <param name="sort">Структура в который находятся критерии для сортировки</param> /// <param name="averBall">Список со средними баллами</param> internal virtual void SortCriteriaRecurse( SortMarkStructAverage sort, List <float> averBall) { }