Condividi tramite


Passaggio 6: aggiungere un problema di sottrazione

Per aggiungere un problema di sottrazione, è necessario:

  • Archiviare i valori della sottrazione.

  • Generare numeri casuali per il problema e verificare che la risposta sia compresa tra 0 e 100.

  • Aggiornare il metodo che archivia le risposte in modo che controlli anche il nuovo problema di sottrazione.

  • Aggiornare il gestore dell'evento Tick del timer in modo che fornisca la risposta corretta quando il tempo scade.

Per aggiungere un problema di sottrazione

  1. È innanzitutto necessario disporre di un posto in cui archiviare i valori, quindi aggiungere al form due int (Integer) per il problema di sottrazione.Il nuovo codice viene visualizzato tra gli Integer dell'addizione e l'Integer del timer.Il codice dovrebbe essere analogo al seguente.

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

    [!NOTA]

    I nomi dei nuovi intminuendo e sottraendo- termini di programmazione del aren't.Si tratta dei nomi tradizionali in aritmetica per il numero che si sta sottraendo (il sottraendo) e il numero da cui si sottrae (il minuendo).La differenza è il minuendo meno il sottraendo.È possibile utilizzare altri nomi, perché il programma non richiede nomi specifici per int, controlli, componenti o metodi.Esistono alcune regole (ad esempio, i nomi non possono iniziare con cifre), ma in generale è possibile utilizzare nomi quali x1, x2, x3, x4 e così via.Sarebbe tuttavia difficile leggere il codice e quasi impossibile localizzare i problemi.Successivamente in questa esercitazione si utilizzeranno i nomi tradizionali per la moltiplicazione (moltiplicando × moltiplicatore = prodotto) e la divisione (dividendo ÷ divisore = quoziente).

  2. Quindi, modificare il metodo StartTheQuiz() per compilare un problema di sottrazione casuale.Il nuovo codice segue il commento "Completare il problema di sottrazione".Il codice dovrebbe essere analogo al seguente.

    ''' <summary>
    ''' Start the quiz by filling in all of the problems
    ''' and starting the timer.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub StartTheQuiz()
    
        ' Fill in the addition problem.
        addend1 = randomizer.Next(51)
        addend2 = randomizer.Next(51)
        plusLeftLabel.Text = addend1.ToString()
        plusRightLabel.Text = addend2.ToString()
        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 problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
        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();
    }
    

    Questo codice utilizza il metodo Next() della classe Random in modo leggermente diverso.Quando gli si assegnano due valori, viene scelto un numero casuale maggiore o uguale al primo e minore del secondo.Nella riga seguente viene scelto un numero casuale da 1 a 100, che viene archiviato in minuendo.

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

    Il metodo Next() della classe Random può essere chiamato in diversi modi.Quando si chiama un metodo in più modi, questa operazione viene denominata metodo di overload ed è possibile utilizzare IntelliSense per esplorarla.Esaminare nuovamente la descrizione comando della finestra di IntelliSense per il metodo Next().

    Descrizione comando della finestra di IntelliSense

    Metodo Next

    Si noti che nella descrizione comando è visualizzato (+ 2 overload).Ciò vuol dire che esistono altri due modi per chiamare il metodo Next().Quando si digita il nuovo codice per il metodo StartTheQuiz(), è possibile visualizzare ulteriori informazioni.Non appena si digita randomizer.Next(, viene aperta la finestra di IntelliSense.Premere i tasti FRECCIA SU e FRECCIA GIÙ per scorrere gli overload, come mostrato nell'immagine seguente.

    Overload della finestra di Intellisense

    Overload della finestra di Intellisense

    L'overload desiderato è quello dell'immagine precedente, perché consente di specificare un valore minimo e massimo.

  3. Modificare il metodo CheckTheAnswer() per verificare la risposta corretta per la sottrazione.Il codice dovrebbe essere analogo al seguente.

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

    && corrisponde all'operatore logical and di Visual C#.In Visual Basic l'operatore equivalente è AndAlso.Equivale a dire "Se addendo1 più addendo2 è uguale al valore NumericUpDown della somma e se minuendo meno sottraendo è uguale al valore NumericUpDown della differenza". Il metodo CheckTheAnswer() restituisce True solo se sia il problema di addizione che quello di sottrazione sono corretti.

  4. Modificare l'ultima parte del gestore dell'evento Tick del timer in modo che fornisca la risposta corretta quando il tempo scade.Il codice dovrebbe essere analogo al seguente.

    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. Salvare ed eseguire il codice.Il programma dispone ora di un problema di sottrazione, come mostrato nell'immagine seguente.

    Quiz matematico con problema di sottrazione

    Quiz matematico con sottrazione

Per continuare o rivedere l'esercitazione