Étape 6 : ajouter un problème de soustraction
Pour ajouter un problème de soustraction, vous devez :
Stocker les valeurs de soustraction.
Générer des nombres aléatoires pour le problème (et vérifier que la réponse est comprise entre 0 et 100).
Mettre à jour la méthode qui vérifie les réponses pour qu'elle vérifie également le nouveau problème de soustraction.
Mettre à jour le gestionnaire d'événements Tick de votre minuterie pour qu'il remplisse la réponse correcte lorsque le temps est écoulé.
Pour ajouter un problème de soustraction
Tout d'abord, vous avez besoin d'entiers pour stocker les valeurs : vous devez donc ajouter à votre formulaire deux ints (Integers) pour le problème de soustraction.Le nouveau code apparaît entre les entiers d'addition et l'entier de minuterie.Le code doit se présenter comme suit.
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;
[!REMARQUE]
Les noms des nouveaux ints (minuend et subtrahend- termes de programmation de pas t.Ce sont des noms généralement utilisés en arithmétique pour désigner le nombre à retrancher (subtrahend, ou diminuteur en français) et le nombre duquel le diminuteur est soustrait (minuend, ou diminuende en français).La différence correspond à minuend moins subtrahend.Vous pourriez utiliser d'autres noms, étant donné que votre programme ne requiert aucun nom spécifique pour les ints, les contrôles, les composants ou les méthodes.Il existe des règles (par exemple, les noms ne peuvent pas commencer par des chiffres), mais en général, vous pouvez utiliser des noms comme x1, x2, x3, x4, et ainsi de suite.Mais votre code serait difficile à lire, et il serait presque impossible de suivre les problèmes.Vous utiliserez les noms traditionnels pour la multiplication (multiplicand × multiplier = product) et la division (dividend ÷ divisor = quotient) dans d'autres étapes de ce didacticiel.
Ensuite, modifiez la méthode StartTheQuiz() pour remplir un problème de soustraction aléatoire.Le nouveau code se situe après le commentaire « Fill in the subtraction problem » (« Remplissage du problème de soustraction »).Le code doit se présenter comme suit.
''' <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(); }
Ce code utilise la méthode Next() de la classe Random de façon un peu différente.Lorsque vous lui attribuez deux valeurs, elle choisit un nombre aléatoire qui est supérieur ou égal à la première valeur, mais inférieur à la deuxième.La ligne suivante choisit un nombre aléatoire entre 1 et 100, et le stocke dans minuend.
minuend = randomizer.Next(1, 101)
minuend = randomizer.Next(1, 101);
La méthode Next() de la classe Random peut être appelée de plusieurs façons.Une méthode surchargée désigne une méthode qui peut être appelée de plusieurs façons (et que vous pouvez utiliser à l'aide d'IntelliSense).Examinez à nouveau l'info-bulle de la fenêtre IntelliSense pour la méthode Next().
Info-bulle de la fenêtre Intellisense
Notez que l'info-bulle affiche (+ 2 surcharge(s)).Cela signifie qu'il existe deux autres façons d'appeler la méthode Next().Lorsque vous tapez le nouveau code pour la méthode StartTheQuiz(), vous avez accès à plus d'informations.Dès que vous tapez randomizer.Next(,, la fenêtre IntelliSense s'ouvre.Appuyez sur les touches de direction HAUT et BAS pour parcourir les surcharges, comme indiqué dans l'image suivante.
Surcharges de la fenêtre Intellisense
Vous voulez utiliser la surcharge indiquée dans l'image précédente, car elle vous permet de spécifier une valeur minimale et maximale.
Modifiez la méthode CheckTheAnswer() pour vérifier si la réponse à la soustraction est correcte.Le code doit se présenter comme suit.
''' <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; }
&& correspond à l'opérateur logical and en Visual C#.En Visual Basic, l'opérateur équivalent est AndAlso.Cela revient à dire, « Si addend1 plus addend2 est égal à la valeur de sum NumericUpDown, et si minuend moins subtrahend est égal à la valeur de difference NumericUpDown ». La méthode CheckTheAnswer() retourne la valeur True uniquement si les problèmes d'addition et de soustraction sont corrects.
Remplacez la dernière partie du gestionnaire d'événements Tick de la minuterie afin que la réponse correcte soit indiquée lorsque le délai est écoulé.Le code doit se présenter comme suit.
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; }
Enregistrez et exécutez votre code.Votre programme doit maintenant avoir un problème de soustraction, comme indiqué dans l'image suivante.
Questionnaire de mathématiques avec un problème de soustraction
Pour continuer ou examiner
Pour passer à l'étape suivante du didacticiel, consultez Étape 7 : ajouter des problèmes de multiplication et de division.
Pour revenir à l'étape précédente du didacticiel, consultez Étape 5 : ajouter des gestionnaires d'événements Enter pour les contrôles NumericUpDown.