public static void PrintQuestion(this SubtractionProblem sp, int questionNumber)
        {
            switch (sp.MissingPart)
            {
            case SubtractionProblemPart.Minuend:
                Console.WriteLine($"({questionNumber}) _ - {sp.Subtrahend} = {sp.Difference}");
                break;

            case SubtractionProblemPart.Subtrahend:
                Console.WriteLine($"({questionNumber}) {sp.Minuend} - _ = {sp.Difference}");
                break;

            default:
                throw new ArgumentOutOfRangeException(paramName: nameof(sp.MissingPart), message: $"Missing Part is '{sp.MissingPart}'.");
            }
        }
コード例 #2
0
        public override object GenerateQuestion(Difficulty difficulty)
        {
            SubtractionProblem problem = new SubtractionProblem();
            Random             rand    = new Random();

            int[] easy   = { 1, 15 };
            int[] medium = { 15, 50 };
            int[] hard   = { 50, 1000 };

            switch (difficulty)
            {
            case Difficulty.Easy:
                problem.Minuend    = rand.Next(easy[0], easy[1]);
                problem.Subtrahend = rand.Next(easy[0], problem.Minuend);
                problem.Difference = problem.Minuend - problem.Subtrahend;
                break;

            case Difficulty.Medium:
                problem.Minuend    = rand.Next(medium[0], medium[1]);
                problem.Subtrahend = rand.Next(medium[0], problem.Minuend);
                problem.Difference = problem.Minuend - problem.Subtrahend;
                break;

            case Difficulty.Hard:
                problem.Minuend    = rand.Next(hard[0], hard[1]);
                problem.Subtrahend = rand.Next(hard[0], problem.Minuend);
                problem.Difference = problem.Minuend - problem.Subtrahend;
                break;
            }

            switch (rand.Next(2))
            {
            case 0:
                problem.MissingPart = SubtractionProblemPart.Minuend;
                break;

            case 1:
                problem.MissingPart = SubtractionProblemPart.Subtrahend;
                break;

            default:
                throw new Exception("Missing part generated was not valid.");
            }

            return(problem);
        }
コード例 #3
0
        public override bool IsCorrect(object problem, int answer)
        {
            SubtractionProblem p = (SubtractionProblem)problem;

            switch (p.MissingPart)
            {
            case SubtractionProblemPart.Minuend:
                return(p.Minuend == answer);

            case SubtractionProblemPart.Subtrahend:
                return(p.Subtrahend == answer);

            case SubtractionProblemPart.Difference:
                return(p.Difference == answer);

            default:
                return(false);
            }
        }
コード例 #4
0
        public static void AskSubtractionQuestions(Generator generator)
        {
            Subtract subject         = new Subtract();
            var      questionCount   = generator.QuestionCount;
            var      currentQuestion = 1;

            while (currentQuestion <= questionCount)
            {
                SubtractionProblem p = (SubtractionProblem)subject.GenerateQuestion(generator.Difficulty);
                var isCorrect        = false;
                while (!isCorrect)
                {
                    // Ask question
                    p.PrintQuestion(currentQuestion);

                    // Get answer
                    Console.Write("Answer: ");
                    int  answer      = 0;
                    bool validAnswer = true;
                    try
                    {
                        answer = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (Exception)
                    {
                        validAnswer = false;
                    }

                    // Work out if answer is correct
                    if (validAnswer)
                    {
                        isCorrect = subject.IsCorrect(p, answer);
                        Console.WriteLine(isCorrect ? "Correct!" : "Not quite right. Try again.");
                    }
                }

                currentQuestion++;
            }
        }