Condividi tramite


Esercitazione: Aggiungere problemi matematici a un'app WinForms quiz matematico

In questa serie di quattro esercitazioni si creerà un quiz matematico. Il quiz contiene quattro problemi matematici casuali che un quiz taker tenta di rispondere entro un determinato periodo di tempo.

I controlli usano codice C# o Visual Basic. In questa seconda esercitazione si rende difficile il quiz aggiungendo codice per problemi matematici basati su numeri casuali. Si crea anche un metodo denominato StartTheQuiz() per compilare i problemi.

In questa seconda esercitazione si apprenderà come:

  • Scrivere codice per creare oggetti casuali da usare nei problemi matematici.
  • Aggiungere un gestore eventi per il pulsante Start.
  • Scrivere codice per avviare il quiz.

Prerequisiti

Questa esercitazione si basa su un'esercitazione precedente, Creare un'app WinForms per quiz matematici. Se l'esercitazione non è stata completata, eseguire prima di tutto questa esercitazione.

Creare un problema di addizione casuale

  1. Nel progetto di Visual Studio selezionare Windows Form Designer.

  2. Selezionare il modulo Form1.

  3. Sulla barra dei menu selezionare Visualizza>codice. Viene visualizzato il file Form1.cs o Form1.vb, a seconda del linguaggio di programmazione in uso, per consentire di visualizzare il code-behind per il modulo.

  4. Creare un Random oggetto aggiungendo un'istruzione new nella parte superiore del codice.

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

Importante

Usare il controllo del linguaggio di programmazione in alto a destra di questa pagina per visualizzare il frammento di codice C# o il frammento di codice Visual Basic.

Programming language control for Microsoft Learn

È possibile usare new istruzioni come questa per creare pulsanti, etichette, pannelli, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms e persino moduli. Questi elementi sono denominati oggetti .

Quando si esegue il programma, viene avviato il modulo. Il codice sottostante crea un oggetto Random e lo assegna un nome casuale.

Il quiz richiede variabili per archiviare i numeri casuali creati per ogni problema. Prima di usare le variabili, dichiararle, ovvero elencarne i nomi e i tipi di dati.

  1. Aggiungere due variabili Integer al form e denominarle addend1 e addend2.

    Nota

    Una variabile integer è nota come int in C# o integer in Visual Basic. Questo tipo di variabile archivia un numero intero positivo o negativo compreso tra -2147483648 e 2147483647 e non può archiviare numeri decimali.

    Si usa una sintassi simile per aggiungere una variabile integer come è stato fatto per aggiungere l'oggetto Random, come illustrato nel codice seguente.

    // 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. Aggiungere un metodo denominato StartTheQuiz(). Questo metodo usa il metodo dell'oggetto Next() Random per generare numeri casuali per le etichette. StartTheQuiz() alla fine compila tutti i problemi e quindi avvia il timer, quindi aggiungi queste informazioni al commento di riepilogo. La funzione dovrebbe essere simile al codice seguente.

    /// <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 si usa il Next() metodo con un oggetto Random, ad esempio quando si chiama randomizer.Next(51), si ottiene un numero casuale minore di 51 o compreso tra 0 e 50. Questo codice chiama randomizer.Next(51) in modo che i due numeri casuali si sommano a una risposta compresa tra 0 e 100.

Esaminare attentamente queste istruzioni.

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

Queste istruzioni impostano le proprietà Text di plusLeftLabel e plusRightLabel in modo che visualizzino i due numeri casuali. I controlli etichetta visualizzano i valori in formato testo e, nella programmazione, le stringhe contengono testo. Il metodo di ToString() ogni integer converte l'intero in testo che un'etichetta può visualizzare.

Creare problemi di sottrazione, moltiplicazione e divisione casuali

Il passaggio successivo consiste nel dichiarare le variabili e fornire valori casuali per gli altri problemi matematici.

  1. Aggiungere variabili integer per i problemi matematici rimanenti al modulo, dopo le variabili di problema di addizione. Il codice dovrebbe essere simile all'esempio seguente.

    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. Modificare il StartTheQuiz() metodo aggiungendo il codice seguente, a partire dal commento "Compilare il problema di sottrazione".

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

Questo codice usa il Next() metodo della Random classe in modo leggermente diverso da come fa il problema di addizione. Quando si assegnano due valori al metodo Next(), viene scelto un numero casuale maggiore o uguale al primo valore e minore del secondo.

Usando il Next() metodo con due argomenti, è possibile verificare che il problema di sottrazione abbia una risposta positiva, la risposta di moltiplicazione è al massimo 100 e la risposta di divisione non è una frazione.

Aggiungere un gestore eventi al pulsante Start

In questa sezione si aggiunge il codice per avviare il quiz quando si seleziona il pulsante Start. Il codice eseguito in reazione a un evento come una selezione del pulsante è denominato gestore eventi.

  1. In Windows Form Designer fare doppio clic sul pulsante Avvia il quiz oppure selezionarlo e quindi premere INVIO. Viene visualizzato il codice del modulo e viene visualizzato un nuovo metodo.

    Queste azioni aggiungono un gestore eventi Click al pulsante Start. Quando un quiz taker seleziona questo pulsante, l'app esegue il codice che verrà aggiunto a questo nuovo metodo.

  2. Aggiungere le due istruzioni seguenti in modo che il gestore eventi avvii il quiz.

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

La prima istruzione chiama il nuovo metodo StartTheQuiz(). La seconda istruzione imposta la proprietà Enabled del controllo startButton su false in modo che il quiz taker non possa selezionare il pulsante durante un quiz.

Eseguire l'app

  1. Salvare il codice.

  2. Eseguire l'app e quindi selezionare Avvia il quiz. Vengono visualizzati problemi matematici casuali, come illustrato nello screenshot seguente.

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

Passaggi successivi

Passare all'esercitazione successiva per aggiungere un timer al quiz matematico e controllare le risposte dell'utente.