Создать n наборов тестов - C#
Формулировка задачи:
"Тесты". Преподавателю необходимо создать n наборов тестов. В каждом наборе
должны быть представлены вопросы разной тематики, по возможности равномерно. У
преподавателя составлен общий список вопросов, упорядоченный по их названиям.
Помогите преподавателю распределить вопросы по тестам.
Указание: тематику вопросов следует задать перечислением. Следует определить класс
Question, среди полей которого будет поле theme, заданное перечислением.
Решение задачи: «Создать n наборов тестов»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; namespace TestCreator { class Program { private static Random rand = new Random(); private static List<Question> questions = new List<Question>(); private static List<Test> tests = new List<Test>(); static void Main(string[] args) { CreateQuestion(Question.Themes.Логика, "1"); CreateQuestion(Question.Themes.Логика, "2"); CreateQuestion(Question.Themes.Логика, "3"); CreateQuestion(Question.Themes.Логика, "4"); CreateQuestion(Question.Themes.Логика, "5"); CreateQuestion(Question.Themes.Логика, "6"); CreateQuestion(Question.Themes.МатАнализ, "1"); CreateQuestion(Question.Themes.МатАнализ, "2"); CreateQuestion(Question.Themes.МатАнализ, "3"); CreateQuestion(Question.Themes.МатАнализ, "4"); CreateQuestion(Question.Themes.МатАнализ, "5"); CreateQuestion(Question.Themes.МатАнализ, "6"); CreateQuestion(Question.Themes.ДискретМат, "1"); CreateQuestion(Question.Themes.ДискретМат, "2"); CreateQuestion(Question.Themes.ДискретМат, "3"); CreateQuestion(Question.Themes.ДискретМат, "4"); CreateQuestion(Question.Themes.ДискретМат, "5"); CreateQuestion(Question.Themes.ДискретМат, "6"); Console.Write("Сколько тестов создать? "); int count = int.Parse(Console.ReadLine()); Console.Write("Количество вопросов в тесте: "); int qCount = int.Parse(Console.ReadLine()); for (int i = 0; i < count; i++) CreateTest(qCount); int j = 0; foreach(var test in tests) { Console.WriteLine($"======Тест №{++j}======="); foreach (var question in test.questions) Console.WriteLine($"Тема вопроса: {question.theme.ToString()}. Вопрос: {question.text}"); } Console.ReadKey(); } static void CreateQuestion(Question.Themes theme, string text) { var question = new Question(); question.theme = theme; question.text = text; questions.Add(question); } static void CreateTest(int qCountInTest) { int qCount = qCountInTest / (int)Question.Themes.Макс; var test = new Test(); int theme = (int)Question.Themes.Логика; for (int i = 0, temp = 0; i < qCountInTest; i++, temp++) { if (temp % qCount == 0 && temp > 0 && theme + 1 < (int)Question.Themes.Макс) theme++; var question = GetRandomQuestionByTheme(test, (Question.Themes)theme); if (question == null) { theme++; continue; } test.questions.Add(question); } tests.Add(test); } static Question GetRandomQuestionByTheme(Test test, Question.Themes theme) { var qArray = questions.FindAll(x => x.theme == theme); if (qArray.Count == 0) return null; HashSet<Question> sQuestions = new HashSet<Question>(); foreach (var question in qArray) sQuestions.Add(question); sQuestions.ExceptWith(test.questions.ToArray()); if (sQuestions.Count == 0) return null; return sQuestions.ElementAt(rand.Next(0, sQuestions.Count - 1)); } } public class Test { public HashSet<Question> questions = new HashSet<Question>(); } public class Question : IComparable<Question> { public Themes theme { get; set; } public string text { get; set; } public int CompareTo(Question other) { return 1; } public enum Themes : int { Логика = 0, МатАнализ, ДискретМат, Макс }; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д