Sdílet prostřednictvím


Krok 6: Přidejte problém odečtení

V šesté části tohoto kurzu přidáte úlohu odčítání a zjistíte, jak provádět následující úkoly:

  • Uložit hodnoty odčítání.

  • Generujte náhodná čísla pro úlohu (a ujistěte se, že odpověď je od 0 do 100).

  • Aktualizujte metodu, která kontroluje odpovědi, takže metoda zkontroluje také novou úlohu odčítání.

  • Aktualizujte obslužnou rutinu události Tick časovače, aby obslužná rutina události vyplnila správnou odpověď, když vyprší čas.

Přidat úlohu odčítání

  1. Přidejte do formuláře dvě celočíselné proměnné pro odčítání mezi celočíselné proměnné pro sčítání a časovač.Kód by měl vypadat takto.

    Public Class Form1
    
        ' Create a Random object called randomizer  
        ' to generate random numbers. 
        Private randomizer As New Random
    
        ' These integer variables store the numbers  
        ' for the addition problem.  
        Private addend1 As Integer 
        Private addend2 As Integer 
    
        ' These integer variables store the numbers  
        ' for the subtraction problem.  
        Private minuend As Integer 
        Private subtrahend As Integer 
    
        ' This integer variable keeps track of the  
        ' remaining time. 
        Private timeLeft As Integer
    
    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;
    
        // This integer variable keeps track of the  
        // remaining time. 
        int timeLeft;
    

    Názvy nových proměnných celých čísel – minuend a subtrahend – nejsou programovací termíny.Jsou to tradiční názvy v aritmetice pro číslo, které bude odečteno (subtrahend) a číslo, od kterého se odečte (minuend).Rozdíl je minuend mínus subtrahend.Můžete použít jiné názvy, protože program nevyžaduje konkrétní názvy pro proměnné, ovládací prvky, komponenty nebo metody.Je třeba dodržovat pravidla, například nezačínat názvy číslicemi, ale obvykle můžete použít názvy jako x1, x2, x3 a x4.Obecné názvy však mohou ztížit čtení kódu a téměř znemožnit sledování problémů.Chcete-li udržet názvy proměnných jedinečné a užitečné, používejte tradiční názvy pro násobení (násobenec x násobitel = součin) a dělení (dělenec ÷ dělitel = podíl) dále v tomto výukovém programu.

    Dále upravíte metodu StartTheQuiz() pro poskytnutí náhodných hodnot pro problém s odčítáním.

  2. Přidejte následující kód za komentář "Vyplnění úlohy odčítání".

    ''' <summary> 
    ''' Start the quiz by filling in all of the problem  
    ''' values and starting the timer.  
    ''' </summary> 
    ''' <remarks></remarks> 
    Public Sub 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
    
        ' Start the timer.
        timeLeft = 30
        timeLabel.Text = "30 seconds"
        Timer1.Start()
    
    End Sub
    
    /// <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;
    
        // Start the timer.
        timeLeft = 30;
        timeLabel.Text = "30 seconds"; 
        timer1.Start();
    }
    

    Aby nedocházelo k záporným odpovědím z důvodu potíží při odčítání, tento kód používá metodu Next() třídy Random poněkud odlišně od toho, jak vypadá problém se sčítáním.Pokud metodě Next() poskytnete dvě hodnoty, použije náhodné číslo, které je větší než nebo rovno první hodnota a menší než druhá hodnota.Následující kód zvolí náhodné číslo od 1 do 100 a uloží jej do proměnné minuend.

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

    Můžete volat metodu Next() třídy Random, kterou jste nazvali "randomizer" dříve v tomto návodu několika způsoby.Metody, které můžete volat metodu více než jedním způsobem, se nazývají přetížené a umožňují, aby je zkoumala technologie IntelliSense.Podívá se znovu na okno popisu tlačítka technologie IntelliSense pro metodu Next().

    Okno popisu tlačítka technologie IntelliSense

    Okno popisu tlačítka technologie IntelliSense

    Zobrazí se popis (+ 2 přetížení), což znamená, že můžete volat metodu Next() dvěma dalšími způsoby.Přetížení obsahují různá čísla nebo typy argumentů, takže jejich funkce se mírně liší.Například metoda může převzít jediný celočíselný argument, zatímco jedno z jejich přetížení může být celé číslo a řetězec.Zvolíte správné přetížení na základě toho, co se má udělat.Pokud přidáte kód do metody StartTheQuiz(), další informace se zobrazí v okně technologie Intellisense ihned poté, co zadáte randomizer.Next(.Vyberte klávesu šipka nahoru a šipka dolů k cyklování skrze přetížení, jak je znázorněno na následujícím obrázku.

    Přetížení pro metodu Next() v IntelliSense

    Přetížení metody Next() v technologii IntelliSense

    V tomto případě chcete zvolit poslední přetížení, protože můžete zadat minimální a maximální hodnoty.

  3. Upravte metodu CheckTheAnswer() k vyhledání správné odpovědi na otázku odčítání.

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

    && je operátor logical and jazyka Visual C#.V jazyce Visual Basic je ekvivalentní operátor AndAlso.Tyto operátory označují "Pokud součet addend1 a addend2 je roven hodnotě součtu NumericUpDown a minuend mínus subtrahend je roven hodnotě rozdílu NumericUpDown." Metoda CheckTheAnswer() vrátí true pouze v případě, že odpovědi na problémy se sčítáním a odčítáním jsou obě správné.

  4. Nahraďte poslední část obslužné rutiny události cyklů časovače následujícím kódem, aby vyplnila správnou odpověď, když vyprší čas.

    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. Uložte a spusťte váš kód.

    Váš program zahrnuje úlohu odčítání, jak ukazuje následující obrázek.

    Matematický kvíz s úlohou odečítání

    Math kvízu k odečtení problému

Pokračování nebo kontrola