Partilhar via


Etapa 6: Adicionar um problema de subtração

Na sexta parte deste tutorial, você adicionará um problema de subtração e aprenderá a executar as seguintes tarefas:

  • Armazenar os valores de subtração.

  • Gere números aleatórios para o problema (e certifique-se de que a resposta esteja entre 0 e 100).

  • Atualize o método que verifica as respostas de modo que verifique também o novo problema se subtração.

  • Atualize o manipulador de eventos de escala do temporizador de modo que ele preencha a resposta correta quando o tempo de execução se esgotar.

Para adicionar um problema de subtração

  1. Adicione duas variáveis inteiras para o problema de subtração ao formulário, entre as variáveis inteiras para o problema de adição e o timer.O código deve se parecer com o seguinte.

    Public Class Form1
    
        ' Create a Random object called randomizer  
        ' to generate random numbers. 
        Private randomizer As New Random
    
        ' These integer variables store the numbers  
        ' for the addition problem.  
        Private addend1 As Integer 
        Private addend2 As Integer 
    
        ' These integer variables store the numbers  
        ' for the subtraction problem.  
        Private minuend As Integer 
        Private subtrahend As Integer 
    
        ' This integer variable keeps track of the  
        ' remaining time. 
        Private timeLeft As Integer
    
    public partial class Form1 : Form
    {
        // Create a Random object called randomizer  
        // to generate random numbers.
        Random randomizer = new Random();
    
        // These integer variables store the numbers  
        // for the addition problem.  
        int addend1;
        int addend2;
    
        // These integer variables store the numbers  
        // for the subtraction problem.  
        int minuend;
        int subtrahend;
    
        // This integer variable keeps track of the  
        // remaining time. 
        int timeLeft;
    

    Os nomes das variáveis inteiras novas—minuendo e subtraendo— não são termos de programação.São os nomes tradicionais em aritmética para o número sendo subtraído (o subtraendo) e o número de que o subtraendo está sendo subtraído (o minuendo).A diferença é o minuendo menos o subtraendo.É possível usar outros nomes, pois seu programa não exige nomes específicos para variáveis, controles, componentes ou métodos.Você deve seguir as regras como não iniciar nomes com os dígitos, mas geralmente é possível usar nomes como x1, x2, x3 e x4.No entanto, os nomes genéricos dificultam a leitura do código e tornam os problemas quase impossíveis de rastrear.Para manter nomes de variável exclusivas e úteis, você usará os nomes tradicionais para multiplicação (multiplicando x multiplicador = produto) e a divisão (dividendo ÷ divisor = quociente) posteriormente neste tutorial.

    Em seguida, você modificará o método de StartTheQuiz() para fornecer valores aleatórios para o problema de subtração.

  2. Adicione o seguinte código após o comentário "Preencha o problema de subtração".

    ''' <summary> 
    ''' Start the quiz by filling in all of the problem  
    ''' values and starting the timer.  
    ''' </summary> 
    ''' <remarks></remarks> 
    Public Sub StartTheQuiz()
    
        ' Fill in the addition problem. 
        ' Generate two random numbers to add. 
        ' Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51)
        addend2 = randomizer.Next(51)
    
        ' Convert the two randomly generated numbers 
        ' into strings so that they can be displayed 
        ' in the label controls.
        plusLeftLabel.Text = addend1.ToString()
        plusRightLabel.Text = addend2.ToString()
    
        ' 'sum' is the name of the NumericUpDown control. 
        ' This step makes sure its value is zero before 
        ' adding any values to it.
        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 problem  
    /// values and starting the timer.  
    /// </summary> 
    public void StartTheQuiz()
    {
        // Fill in the addition problem. 
        // Generate two random numbers to add. 
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers 
        // into strings so that they can be displayed 
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control. 
        // This step makes sure its value is zero before 
        // adding any values to it.
        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();
    }
    

    Para evitar respostas negativas para o problema de subtração, esse código usa o método de Next() da classe Random de forma um pouco diferente de do problema de adição.Quando você fornece dois valores do método de Next(), ele escolhe um número aleatório maior ou igual ao primeiro valor e menor que o segundo.O código a seguir escolhe um número aleatório de 1 a 100 e o armazena na variável de minuendo.

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

    Você pode chamar o método de Next() da classe de Random, que você nomeou como "randomizer" anteriormente neste tutorial, de várias maneiras.Os métodos que você pode chamar em mais de uma maneira são conhecidos como sobrecarregados, e você pode usar o IntelliSense para explorá-los.Procure novamente na dica de ferramenta da janela do IntelliSense pelo método de Next().

    Dica de ferramenta da janela do Intellisense

    Dica de ferramenta da janela do Intellisense

    A dica de ferramenta exibe (+ 2 sobrecarga(s)), o que significa que você pode chamar o método Next() em outras duas maneiras.As sobrecargas contêm números ou tipos diferentes de argumentos, para que funcionem ligeiramente diferentes um do outro.Por exemplo, um método pode levar um único argumento inteiro, enquanto uma de suas sobrecargas pode levar um inteiro e uma cadeia de caracteres.Você escolhe a sobrecarga correta com base no que você deseja fazer.Quando você adiciona código ao método de StartTheQuiz(), mais informações aparecem na janela do Intellisense para você inserir randomizer.Next(.Pressione as teclas de seta para cima e seta para baixo para percorrer as sobrecargas, como mostra a ilustração a seguir.

    Sobrecarga para o método Next() no IntelliSense

    Sobrecarga para o método Next() no IntelliSense

    Nesse caso, você deseja escolher a última sobrecarga, porque você pode especificar valores mínimo e máximo.

  3. Modifique o método de CheckTheAnswer() para verificar a resposta correta da subtração.

    ''' <summary> 
    ''' Check the answers 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 answers 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;
    }
    

    No Visual C#, && é o operador logical and.No Visual Basic, o operador equivalente é AndAlso.Esses operadores indicam "Se a soma da addend1 e addend2 for igual ao valor da soma NumericUpDown e o minuendo menos o subtraendo for igual ao valor da diferença NumericUpDown". O CheckTheAnswer() método retorna true somente se as respostas para os problemas de adição e subtração estiverem corretas.

  4. Substitua a parte mais recente do manipulador de eventos de escala do timer pelo código a seguir, de modo que preencha a resposta correta quando o tempo de execução se esgotar.

    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. Salve e execute seu código.

    Seu programa inclui um problema de subtração, como mostra a ilustração a seguir.

    Teste de matemática com problema de subtração

    Teste de matemática com problema de subtração

Para continuar ou revisar