Compartir a través de


Tutorial: adición de problemas matemáticos a una prueba matemática de la aplicación WinForms

En esta serie de cuatro tutoriales, creará una prueba matemática. El cuestionario contiene cuatro problemas matemáticos aleatorios que el usuario intentará responder en un tiempo especificado.

Los controles usan código C# o Visual Basic. En este segundo tutorial, volverá la prueba más difícil al agregar código para problemas de matemáticas basados en números aleatorios. También creará un método denominado StartTheQuiz() para rellenar los problemas.

En este segundo tutorial, obtendrá información sobre cómo hacer lo siguiente:

  • Escriba código para crear objetos aleatorios para usarlos en problemas matemáticos.
  • Agregue un controlador de eventos para el botón de inicio.
  • Escriba código para iniciar la prueba.

Prerequisites

Este tutorial se basa en uno anterior: Crear una prueba matemática en la aplicación WinForms. Si no ha completado ese tutorial, hágalo antes.

Crear un problema de suma aleatoria

  1. En el proyecto de Visual Studio, seleccione Diseñador de Windows Forms.

  2. Seleccione el formulario: Form1.

  3. En la barra de menús, seleccione Ver>Código. Aparecerá Form1.cs o Form1.vb, según el lenguaje de programación que esté utilizando, de modo que podrá ver el código subyacente del formulario.

  4. Cree un objeto Random agregando una instrucción new cerca de la parte superior del código.

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

Importante

Use el control del lenguaje de programación situado en la parte superior derecha de esta página para ver el fragmento de código de C# o el de Visual Basic.

Programming language control for Microsoft Learn

Puede usar instrucciones new como esta para crear botones, etiquetas, paneles, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms e incluso formularios. Estos elementos se denominan objetos.

Al ejecutar el programa, se inicia el formulario. El código subyacente crea un objeto aleatorio y lo denomina randomizer.

La prueba necesita variables para almacenar los números aleatorios que crea para cada problema. Antes de usar las variables, debe declararlas, lo que significa que debe enumerar sus nombres y tipos de datos.

  1. Agregue dos variables de entero al formulario y asígneles los nombres addend1 y addend2.

    Nota

    Una variable de entero se conoce como int en C# o Integer en Visual Basic. Este tipo de variable almacena un número positivo o negativo comprendido entre -2147483648 y 2147483647, y solo puede almacenar números enteros, no decimales.

    Para agregar una variable de entero se utiliza una sintaxis similar a la que usó para agregar el objeto aleatorio, tal y como se muestra en el código siguiente.

    // 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. Agregue un método denominado StartTheQuiz(). Este método usa el método del objeto aleatorio Next() para generar números aleatorios para las etiquetas. StartTheQuiz() finalmente rellenará todos los problemas y, a continuación, iniciará el temporizador, así que agregue esta información al comentario de resumen. La función debe ser similar al código siguiente.

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

Cuando use el método Next() con un objeto aleatorio, como cuando llame a randomizer.Next(51), obtendrá un número aleatorio menor que 51 (del 0 al 50). Este código llama a randomizer.Next(51) para que los dos números aleatorios sumen una respuesta que esté entre 0 y 100.

Fijémonos con más atención en estas instrucciones.

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

Las instrucciones establecen las propiedades Text de plusLeftLabel y plusRightLabel para que muestren los dos números aleatorios. Los controles de la etiqueta muestran valores en formato de texto y, en programación, las cadenas mantienen texto. El método de ToString() de cada entero convierte el entero en texto que puede mostrar una etiqueta.

Crear problemas aleatorios de resta, multiplicación y división

El siguiente paso consiste en declarar variables y proporcionar valores aleatorios para los otros problemas matemáticos.

  1. Agregue variables de enteros para los problemas matemáticos restantes al formulario, después de las variables de problemas de suma. El código debe tener un aspecto similar al del siguiente ejemplo.

    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 el método StartTheQuiz() agregando el código siguiente, empezando por el comentario "Rellene el problema de resta".

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

Este código utiliza el método Next() de la clase Random de forma ligeramente diferente a como lo hace el problema de suma. Al asignar dos valores al método Next(), este elige un número aleatorio que sea mayor o igual que el primer valor y menor que el segundo.

Mediante el uso del método Next() con dos argumentos, puede asegurarse de que el problema de resta tiene una respuesta positiva, la respuesta de multiplicación es como máximo de 100 y la respuesta de división no es una fracción.

Adición de un controlador de eventos al botón de inicio

En esta sección, agregará código para iniciar la prueba cuando se seleccione el botón Iniciar. El código que se ejecuta en reacción a un evento como una selección de botón se denomina controlador de eventos.

  1. En Diseñador de Windows Forms, haga doble clic en el botón Iniciar la prueba o selecciónelo y, después, Entrar. Aparece el código del formulario y se ve un nuevo método.

    Estas acciones agregan un controlador de eventos de Clic al botón de inicio. Cuando el usuario selecciona este botón, la aplicación ejecuta el código que usted agregará a este nuevo método.

  2. Agregue las dos instrucciones siguientes para que el controlador de eventos inicie la prueba.

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

La primera instrucción llama al nuevo método StartTheQuiz(). La segunda instrucción establece la propiedad Enabled del control startButton en false, de modo que el usuario no pueda pulsar el botón durante una prueba.

Ejecutar la aplicación

  1. Guarde el código.

  2. Ejecute la aplicación y, después, seleccione Iniciar la prueba. Aparecen problemas matemáticos aleatorios, como se muestra en la captura de pantalla siguiente.

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

Pasos siguientes

Avance al siguiente tutorial para agregar un temporizador a la prueba matemática y comprobar las respuestas del usuario.