Compartir vía


Tutorial: Adición de problemas matemáticos a una aplicación winForms de prueba matemática

En esta serie de cuatro tutoriales, crearás una prueba matemática. El cuestionario contiene cuatro problemas matemáticos aleatorios que un participante intenta responder dentro de un tiempo determinado.

Los controles usan código de C# o Visual Basic. En este segundo tutorial, hará que el cuestionario sea complicado agregando código para problemas matemáticos basados en números aleatorios. Tú también creas un método denominado StartTheQuiz() para resolver los problemas.

En este segundo tutorial, aprenderá a:

  • 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.

Prerrequisitos

Este tutorial se basa en un tutorial anterior, Crear una aplicación WinForms de prueba matemática. Si no ha completado el tutorial, hágalo primero.

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. Form1.cs o Form1.vb aparece, en función del lenguaje de programación que use, de modo que pueda 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 en Form1.cs o Form1.vb.

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

Puedes 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 variables, se declaran, lo que significa enumerar sus nombres y tipos de datos.

  1. Agregue dos variables enteras al formulario y asígneles el nombre addend1 y addend2 en Form1.cs o Form1.vb.

    Nota

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

    Se usa una sintaxis similar para agregar una variable de entero como hizo para agregar el objeto Random, 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()Form1.cs o Form1.vb. Este método usa el método Next() del objeto Random para generar números aleatorios para las etiquetas. StartTheQuiz() eventualmente rellenará todos los problemas y, a continuación, iniciará el temporizador, por lo que agregará esta información al comentario de resumen. La función debe tener un aspecto 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 se usa el método Next() con un objeto Random, como cuando se llama a randomizer.Next(51), se obtiene un número aleatorio menor que 51 o entre 0 y 50. Este código llama a randomizer.Next(51) para que los dos números aleatorios se sumen como resultado a una respuesta que esté entre 0 y 100.

Examine detenidamente estas declaraciones.

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

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

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

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

  1. Agregue variables enteras para el resto de problemas matemáticos al formulario, después de las variables de problema de suma. El código de Form1.cs o Form1.vb debe ser similar al ejemplo siguiente.

    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() en Form1.cs o Form1.vb agregando el siguiente código, comenzando con el comentario "Complete el ejercicio 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 usa el método Next() de la clase Random un poco diferente de la forma en que hace el problema de suma. Al asignar al método Next() dos valores, elige un número aleatorio 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 100 y la respuesta de división no es una fracción.

Agregar un controlador de eventos al botón iniciar

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 muestra un nuevo método.

    Estas acciones agregan un controlador de eventos de Clic al botón de inicio. Cuando un participante del cuestionario selecciona este botón, la aplicación ejecuta el código que añadirás 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.

Ejecución de la aplicación

  1. Guarde el código.

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

    Captura de pantalla que muestra valores aleatorios en los cuatro problemas matemáticos. El botón Iniciar el cuestionario aparece atenuado.

Pasos siguientes

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