Поделиться через


Шаг 6. Добавление задачи на вычитание

Чтобы добавить задачу на вычитание необходимо следующее.

  • Хранение значений, которые участвуют в операции вычитания.

  • Создание случайных чисел для задачи (а также гарантия, что ответ лежит в диапазоне от 0 до 100).

  • Обновление метода, который проверяет ответ таким образом, чтобы этот метод также проверял новую задачу на вычитание.

  • Обновление обработчика событий таймера Tick таким образом, чтобы этот обработчик событий заполнял корректный ответ после истечения времени.

Добавление задачи на вычитание

  1. Сначала необходимо место для хранения значений, поэтому добавьте два целых числа int (Integer) для задачи на вычитание в форму.Новый код добавляется между целыми числами задачи на сложение и целым числом для таймера.Код должен выглядеть следующим образом.

    Public Class Form1
    
        ' Create a Random object to generate random numbers.
        Private randomizer As New Random
    
        ' These Integers will store the numbers
        ' for the addition problem.
        Private addend1 As Integer
        Private addend2 As Integer
    
        ' These Integers will store the numbers
        ' for the subtraction problem.
        Private minuend As Integer
        Private subtrahend As Integer
    
        ' This Integer will keep track of the time left.
        Private timeLeft As Integer
    
    public partial class Form1 : Form
    {
        // Create a Random object to generate random numbers.
        Random randomizer = new Random();
    
        // These ints will store the numbers
        // for the addition problem.
        int addend1;
        int addend2;
    
        // These ints will store the numbers
        // for the subtraction problem.
        int minuend;
        int subtrahend;
    
        // This int will keep track of the time left.
        int timeLeft;
    
    ПримечаниеПримечание

    Имена нового ints-minuend и subtrahend- термины программирования aren't.Это принятые арифметические обозначения для числа, которое вычитается из другого (subtrahend — вычитаемое) и числа, из которого производится вычитание (minuend — уменьшаемое).Остаток — это уменьшаемое за минусом вычитаемого.Можно использовать другие имена, так как программа не требует определенных имен для целых чисел, элементов управления, компонентов или методов.Существуют определенные правила, например, имена не могут начинаться с цифр. В общем случае можно использовать такие имена, как x1, x2, x3, x4 и так далее.Однако это затруднит чтение кода и сделает практически невозможным отслеживание ошибок.Далее в этом руководстве для умножения и для деления будут использоваться принятые имена: multiplicand (множимое) × multiplier (множитель) = product (произведение); dividend (делимое) ÷ divisor (делитель) = quotient (частное).

  2. Затем, измените метод StartTheQuiz() для заполнения задачи на вычитание случайных чисел.Новый код располагается под комментарием "Fill in the subtraction problem" (Заполнение задачи на вычитание).Код должен выглядеть следующим образом.

    ''' <summary>
    ''' Start the quiz by filling in all of the problems
    ''' and starting the timer.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub StartTheQuiz()
    
        ' Fill in the addition problem.
        addend1 = randomizer.Next(51)
        addend2 = randomizer.Next(51)
        plusLeftLabel.Text = addend1.ToString()
        plusRightLabel.Text = addend2.ToString()
        sum.Value = 0
    
        ' Fill in the subtraction problem.
        minuend = randomizer.Next(1, 101)
        subtrahend = randomizer.Next(1, minuend)
        minusLeftLabel.Text = minuend.ToString()
        minusRightLabel.Text = subtrahend.ToString()
        difference.Value = 0
    
        ' Start the timer.
        timeLeft = 30
        timeLabel.Text = "30 seconds"
        Timer1.Start()
    
    End Sub
    
    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
        sum.Value = 0;
    
        // Fill in the subtraction problem.
        minuend = randomizer.Next(1, 101);
        subtrahend = randomizer.Next(1, minuend);
        minusLeftLabel.Text = minuend.ToString();
        minusRightLabel.Text = subtrahend.ToString();
        difference.Value = 0;
    
        // Start the timer.
        timeLeft = 30;
        timeLabel.Text = "30 seconds"; 
        timer1.Start();
    }
    

    Этот код немного по другому использует у класса Random метод Next().Когда ему передается два значения, он выбирает случайное число, которое меньше или равно первого значения и меньше второго значения.В следующей строке кода выполняется выбор случайного числа от 1 до 100 и производится сохранение его в переменной с именем minuend (уменьшаемое).

    minuend = randomizer.Next(1, 101)
    
    minuend = randomizer.Next(1, 101);
    

    Метод Next() класса Random может быть вызван несколькими способами.Когда происходит вызов метода несколькими способами, то такой метод называется перегруженным методом, для его изучения можно использовать IntelliSense.Еще раз посмотрите на подсказку окна IntelliSense для метода Next().

    Подсказка окна Intellisense

    Следующий метод

    Обратите внимание, что в подсказке указано (+ 2 overload(s)) (+ 2 перегрузки).Это значит, что существует два других способа, с помощью которых можно вызвать метод Next().При вводе нового кода для метода StartTheQuiz() можно увидеть дополнительные сведения.Как только будет введено randomizer.Next(,, откроется окно IntelliSense.Чтобы переключиться между перегрузками, которые показаны на рисунке ниже, используйте клавиши СТРЕЛКА ВВЕРХ и СТРЕЛКА ВНИЗ.

    Перегрузки в окне Intellisense

    Перегруженные варианты окна IntelliSense

    Нужна перегрузка, которая показана на рисунке выше, так как она позволяет указать минимальное и максимальное значение.

  3. Для проверки правильного ответа для задачи на вычитание, измените метод CheckTheAnswer().Код должен выглядеть следующим образом.

    ''' <summary>
    ''' Check the answer to see if the user got everything right.
    ''' </summary>
    ''' <returns>True if the answer's correct, false otherwise.</returns>
    ''' <remarks></remarks>
    Public Function CheckTheAnswer() As Boolean
    
        If addend1 + addend2 = sum.Value AndAlso 
           minuend - subtrahend = difference.Value Then
    
            Return True
        Else
            Return False
        End If
    
    End Function
    
    /// <summary>
    /// Check the answer to see if the user got everything right.
    /// </summary>
    /// <returns>True if the answer's correct, false otherwise.</returns>
    private bool CheckTheAnswer()
    {
        if ((addend1 + addend2 == sum.Value)
            && (minuend - subtrahend == difference.Value))
            return true;
        else
            return false;
    }
    

    Два знака && это оператор logical and (логическое И) в языке Visual C# .Эквивалентный оператор в языке Visual Basic — AndAlso.Это тоже самое, как сказать "Если переменную addend1 прибавить к переменной addend2 это равно значению переменной sum в элементе управления NumericUpDown, И если из переменной minuend (уменьшаемое) вычесть переменную subtrahend (вычитаемое) это равно значению переменной difference (разность) элемента управления NumericUpDown". Метод CheckTheAnswer() только лишь возвращает значение true если задача на сложение решена правильно и задача на вычитание решена правильно.

  4. Измените последнюю часть обработчика событий таймера Tick таким образом, чтобы этот обработчик событий заполнял корректный ответ после истечения времени.Код должен выглядеть следующим образом.

    Else
        ' If the user ran out of time, stop the timer, show
        ' a MessageBox, and fill in the answers.
        Timer1.Stop()
        timeLabel.Text = "Time's up!"
        MessageBox.Show("You didn't finish in time.", "Sorry")
        sum.Value = addend1 + addend2
        difference.Value = minuend - subtrahend
        startButton.Enabled = True
    End If
    
    else
    {
        // If the user ran out of time, stop the timer, show
        // a MessageBox, and fill in the answers.
        timer1.Stop();
        timeLabel.Text = "Time's up!";
        MessageBox.Show("You didn't finish in time.", "Sorry");
        sum.Value = addend1 + addend2;
        difference.Value = minuend - subtrahend;
        startButton.Enabled = true;
    }
    
  5. Сохраните и выполните код.Теперь программа должна содержать задачу на вычитание, как показано на рисунке ниже.

    Математическая головоломка с задачей на вычитание

    Математический опрос с задачей на вычитание

Продолжить или повторить пройденный материал