Tutorial: Adicionar problemas matemáticos a um aplicativo WinForms de teste de matemática

Nesta série de quatro tutoriais, você criará um teste de matemática. O teste contém quatro problemas matemáticos aleatórios que um participante do teste tentará responder em um tempo especificado.

Os controles usam código C# ou Visual Basic. No segundo tutorial, você deixa o teste desafiador adicionando código de problemas de matemática baseados em números aleatórios. Você também cria um método chamado StartTheQuiz() para completar os problemas.

Neste segundo tutorial, você aprenderá como:

  • Escreva código para criar objetos Aleatórios a serem usados em problemas matemáticos.
  • Adicione um manipulador para o botão iniciar:
  • Escreva o código para iniciar o teste.

Pré-requisitos

Este tutorial se baseia em um tutorial anterior, Criar um aplicativo WinForms de teste de matemática. Se você ainda não concluiu esse tutorial, passe por ele primeiro.

Criar um problema de adição aleatório

  1. Em seu projeto do Visual Studio, selecione Designer de Formulários do Windows.

  2. Selecione o formulário Form1.

  3. Na barra de menus, selecione exibir>Código. Form1.cs ou Form1.vb aparecerá, dependendo da linguagem de programação que você estiver usando, para que você possa exibir o código do formulário.

  4. Crie um objeto de Random adicionando uma instrução de new próximo à parte superior do código.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    

Importante

Use o controle da linguagem de programação no canto superior direito desta página para exibir os snippets de código C# ou do Visual Basic.

Programming language control for Microsoft Learn

Você pode usar instruções new como esta para criar botões, rótulos, painéis, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms e até mesmo formulários. Esses itens são chamados de objetos.

Quando você executa o programa, o formulário é iniciado. O código por trás dele cria um objeto Random e o nomeia como randomizador.

Seu teste precisa de variáveis para armazenar os números aleatórios que ele cria para cada problema. Para usar variáveis corretamente, você deve declará-las, o que significa listar seus nomes e tipos de data.

  1. Adicione duas variáveis de inteiro ao formulário e nomeie-as addend1 e addend2.

    Observação

    Uma variável inteira é conhecida como um int em C# ou como Integer no Visual Basic. Esse tipo de variável armazena um número positivo ou negativo de -2147483648 a 2147483647 e pode armazenar apenas números inteiros, não decimais.

    Use uma sintaxe semelhante para adicionar uma variável inteira, como fez para adicionar o objeto Random, desde que o código a seguir seja mostrado.

    // 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;
    

  1. Adicionar um método chamado StartTheQuiz(). Esse método usa o método Next() do objeto Random para gerar números aleatórios para os rótulos. Por fim, o StartTheQuiz() preencherá todos os problemas e iniciar o temporizador, por isso, adicione essa informação ao comentário de resumo. A função deverá ser semelhante ao seguinte código:

    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// 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;
    }
    

Quando você usa o método Next() com um objeto rRandom, como quando você chama randomizer.Next(51), você obtém um número aleatório que é menor que 51, ou entre 0 e 50. Esse código chama randomizer.Next(51) para que os dois números aleatórios adicionem uma resposta entre 0 e 100.

Confira de perto estas instruções.

plusLeftLabel.Text = addend1.ToString();
plusRightLabel.Text = addend2.ToString();

Essas instruções definem propriedades Text de plusLeftLabel e plusRightLabel de modo que elas exibam os dois números aleatórios. Os controles de rótulo exibem valores no formato de texto e, na programação, as cadeias de caracteres mantêm o texto. Cada método ToString() de inteiro converte o inteiro em texto que um rótulo pode exibir.

Criar problemas aleatórios de subtração, multiplicação e divisão

A próxima etapa é declarar variáveis e fornecer valores aleatórios para os outros problemas matemáticos.

  1. Adicione variáveis de inteiro para os problemas matemáticos restantes ao formulário, após as variáveis de problema de adição. O código deve se parecer com o seguinte exemplo.

    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;
    
        // These integer variables store the numbers 
        // for the multiplication problem. 
        int multiplicand;
        int multiplier;
    
        // These integer variables store the numbers 
        // for the division problem. 
        int dividend;
        int divisor;
    

  1. Modifique o método StartTheQuiz() adicionando o código a seguir, começando com o comentário "Preencher o problema de subtração".

    /// <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;
    
        // Fill in the multiplication problem.
        multiplicand = randomizer.Next(2, 11);
        multiplier = randomizer.Next(2, 11);
        timesLeftLabel.Text = multiplicand.ToString();
        timesRightLabel.Text = multiplier.ToString();
        product.Value = 0;
    
        // Fill in the division problem.
        divisor = randomizer.Next(2, 11);
        int temporaryQuotient = randomizer.Next(2, 11);
        dividend = divisor * temporaryQuotient;
        dividedLeftLabel.Text = dividend.ToString();
        dividedRightLabel.Text = divisor.ToString();
        quotient.Value = 0;
    

Esse código usa o método Next() da classe Random de modo 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.

Usando o método Next() com dois argumentos, você pode garantir que o problema de subtração tenha uma resposta positiva, a resposta de multiplicação seja no máximo 100 e a resposta de divisão não seja uma fração.

Adicione um manipulador para o botão iniciar

Nesta seção, você adicionará código para iniciar o teste quando o botão Iniciar estiver selecionado. O código executado em reação a um evento como uma seleção de botão é chamado de manipulador de eventos.

  1. No Designer de Formulários do Windows, clique duas vezes no botão Iniciar o teste ou selecione-o e pressione Enter. O código do formulário é exibido e um novo método é visível.

    Essas ações adicionam um manipulador de eventos Click ao botão Iniciar. Quando um participante do teste seleciona esse botão, o aplicativo executa o código que você adicionará a esse novo método.

  2. Adicione as duas instruções a seguir para que o manipulador de eventos inicie o teste.

    private void startButton_Click(object sender, EventArgs e)
    {
        StartTheQuiz();
        startButton.Enabled = false;           
    }
    

A primeira instrução chama o novo método de StartTheQuiz(). A segunda instrução define a propriedade Enabled do controle startButton para false de modo que a pessoa realizando o teste não pode escolher o botão durante um teste.

Executar o aplicativo

  1. Salve seu código.

  2. Execute seu aplicativo e, em seguida, selecione Iniciar o teste. Problemas matemáticos aleatórios aparecem, como mostra a captura de tela a seguir.

    Screenshot that shows random values in all four math problems. The Start the quiz button appears dimmed.

Próximas etapas

Avance para o próximo tutorial para adicionar um temporizador ao teste de matemática e verificar as respostas dos usuários.