Faire évoluer une variable
Calculer, et modifier une variable à partir de sa propre valeur.
Après cette fiche, vous saurez :
- utiliser les quatre opérations
- comprendre la ligne hp = hp - 2
- construire un compteur et un total
- dessiner un ordinogramme avec plusieurs rectangles
1Les quatre opérations
Rien de surprenant, sauf pour les symboles.
| Signe | Opération | Exemple | Résultat |
|---|---|---|---|
+ | Addition | 7 + 2 | 9 |
- | Soustraction | 7 - 2 | 5 |
* | Multiplication | 7 * 2 | 14 |
/ | Division | 8 / 2 | 4 |
La multiplication s'écrit avec une étoile, pas avec un x. La division avec une barre oblique.
int hp = 50; int soin = 5; Console.WriteLine(hp + soin); // 55 Console.WriteLine(hp - soin); // 45 Console.WriteLine(hp * 2); // 100 Console.WriteLine(hp / 2); // 25
Attention
Avec des int, la division oublie le reste.
Console.WriteLine(7 / 2); // affiche 3, et non 3,5
Une boîte int ne peut contenir qu'un nombre entier. L'ordinateur
jette donc tout ce qui suit la virgule.
Nous verrons plus tard comment obtenir 3,5, avec un autre type de boîte. Pour l'instant, retenez simplement que la division entre entiers tombe toujours juste.
2Changer la valeur d'une variable
Une fois la boîte créée, on peut y mettre une nouvelle valeur autant de fois qu'on veut.
int hp = 50; Console.WriteLine(hp); // 50 hp = 40; Console.WriteLine(hp); // 40 hp = 12; Console.WriteLine(hp); // 12
50 40 12
À chaque fois, l'ancienne valeur est effacée. Et on n'écrit int qu'une
seule fois, tout au début.
3La ligne qui surprend tout le monde
Voici la ligne la plus importante de cette fiche.
hp = hp - 2;En mathématiques, cette égalité est impossible : aucun nombre n'est égal à lui-même moins deux.
Mais souvenez-vous de la fiche 4 : le signe = ne veut pas dire
« égal ». Il veut dire « reçoit ».
Comment l'ordinateur lit cette ligne
Il procède toujours en deux temps, de droite à gauche.
- Il calcule d'abord la partie de droite
Il regarde ce qu'il y a dans la boîte
hp. Disons 50. Il calcule50 - 2, ce qui donne 48. - Il range le résultat dans la boîte de gauche
Il met 48 dans
hp. L'ancienne valeur, 50, est effacée.
Résultat : hp vaut maintenant 48. La ligne se lit « hp reçoit hp
moins 2 ».
À retenir
Une image utile : c'est comme un compte en banque.
Nouveau solde = ancien solde moins 20 euros.
Personne ne trouve cette phrase absurde. C'est pourtant exactement ce que fait
hp = hp - 2;
Suivons Radakass pas à pas
int hp = 50; hp = hp - 2; // il se vautre dans la boue hp = hp - 10; // il prend une balle perdue hp = hp + 5; // il se baigne dans la fontaine magique
| Ligne exécutée | Calcul effectué | hp vaut ensuite |
|---|---|---|
int hp = 50; | — | 50 |
hp = hp - 2; | 50 − 2 | 48 |
hp = hp - 10; | 48 − 10 | 38 |
hp = hp + 5; | 38 + 5 | 43 |
À chaque ligne, l'ordinateur repart de la valeur actuelle de la boîte, et non de celle du début.
Attention
L'ordre des lignes change le résultat.
Ce n'est pas comme en mathématiques, où l'on peut réarranger les termes. Ici, chaque ligne part de ce que la précédente a laissé dans la boîte.
Sur papier, tracez toujours un petit tableau comme celui ci-dessus quand vous ne comprenez pas ce que fait un programme. C'est la méthode qu'utilisent aussi les professionnels.
4Le compteur
Un cas très fréquent : ajouter 1 chaque fois qu'il se passe quelque chose.
int nbEvents = 0; nbEvents = nbEvents + 1; // premier évènement nbEvents = nbEvents + 1; // deuxième évènement nbEvents = nbEvents + 1; // troisième évènement Console.WriteLine($"Radakass a rencontré {nbEvents} évènements !");
Radakass a rencontré 3 évènements !
C'est exactement le même mécanisme que hp = hp - 2, avec un
+ 1.
À retenir
Un compteur commence toujours à zéro.
Si vous oubliez int nbEvents = 0; au départ, l'ordinateur refusera de
démarrer : il ne peut pas ajouter 1 à une boîte vide.
Le total, c'est le même principe
Au lieu d'ajouter 1, on ajoute un montant.
int totalAchats = 0; totalAchats = totalAchats + 50; // fournitures totalAchats = totalAchats + 250; // matières premières Console.WriteLine($"Total du bon d'achat : {totalAchats} euros");
Total du bon d'achat : 300 euros
5Un raccourci d'écriture
Comme on écrit tout le temps hp = hp - 2, il existe une écriture plus
courte.
| Écriture longue | Raccourci |
|---|---|
hp = hp + 5; | hp += 5; |
hp = hp - 2; | hp -= 2; |
nbEvents = nbEvents + 1; | nbEvents++; |
Les deux colonnes font exactement la même chose.
À retenir
Vous n'êtes pas obligé d'utiliser les raccourcis.
Ils sont plus courts, mais l'écriture longue montre bien mieux ce qui se passe. Utilisez celle avec laquelle vous êtes à l'aise.
Sachez simplement les lire : vous les rencontrerez partout dans le code des autres.
6L'ordinogramme de l'aventure
Rappel des trois formes :
| Forme | Ce qu'elle veut dire |
|---|---|
| Ovale | Début ou fin |
| Rectangle | Un traitement : donner une valeur, faire un calcul |
| Trapèze | Afficher quelque chose |
Le programme correspondant :
int hp = 50; Console.WriteLine($"Radakass a {hp} HP"); hp = hp - 2; Console.WriteLine($"Radakass a {hp} HP"); hp = hp - 10;
Remarquez que la même ligne de code apparaît deux fois, et que les deux trapèzes affichent pourtant des valeurs différentes. C'est normal : entre les deux, un rectangle a modifié la boîte.
À retenir
Sur un ordinogramme, écrivez dans les trapèzes ce qui s'affichera réellement, avec les valeurs.
Cela vous force à suivre le programme pas à pas — et c'est justement le but de l'exercice.
→Exercices
Recopiez ce programme et lancez-le. Avant de le lancer, calculez sur papier combien de HP il restera à Radakass à la fin.
int hp; int nbEvents; hp = 50; nbEvents = 0; Console.WriteLine("*****************************"); Console.WriteLine("Première aventure de Radakass"); Console.WriteLine("*****************************"); Console.WriteLine(); Console.WriteLine($"Radakass a {hp} HP"); Console.WriteLine("Radakass se vautre dans la boue..."); hp = hp - 2; nbEvents = nbEvents + 1; Console.WriteLine(); Console.WriteLine($"Radakass a {hp} HP"); Console.WriteLine("Radakass prend une balle perdue..."); hp = hp - 10; nbEvents = nbEvents + 1; Console.WriteLine(); Console.WriteLine($"Radakass a {hp} HP"); Console.WriteLine("Radakass se baigne dans une fontaine magique..."); hp = hp + 5; nbEvents = nbEvents + 1; Console.WriteLine(); Console.WriteLine($"Radakass a {hp} HP"); Console.WriteLine($"Radakass a rencontré {nbEvents} évènements !");
Solution
***************************** Première aventure de Radakass ***************************** Radakass a 50 HP Radakass se vautre dans la boue... Radakass a 48 HP Radakass prend une balle perdue... Radakass a 38 HP Radakass se baigne dans une fontaine magique... Radakass a 43 HP Radakass a rencontré 3 évènements !
Le calcul : 50 − 2 = 48, puis 48 − 10 = 38, puis 38 + 5 = 43.
Deux variables évoluent en parallèle, chacune de son côté. hp monte et
descend, nbEvents ne fait qu'augmenter de 1.
À observer : la ligne Console.WriteLine($"Radakass a {hp} HP");
est écrite quatre fois, à l'identique. Elle affiche pourtant quatre valeurs
différentes. C'est bien la preuve que le contenu de la boîte a changé entre-temps.
Voici un programme incomplet. Recopiez-le et terminez-le.
int totalAchats; totalAchats = 0; Console.WriteLine("*******************************"); Console.WriteLine("Bon achat : 0123456789"); Console.WriteLine("*******************************"); // Ligne 1 : vous achetez pour 50 euros de fournitures Console.WriteLine("Achat de 50 euros de fournitures"); totalAchats = totalAchats + 50; // Ligne 2 : vous achetez pour 250 euros de matières premières // À VOUS : affichez la ligne, puis ajoutez 250 au total. // Ligne 3 : vous achetez pour 500 euros de pièces détachées // À VOUS : affichez la ligne, puis ajoutez 500 au total. // À VOUS : affichez le total du bon d'achat.
Vérifiez que le total final est correct.
Solution
int totalAchats; totalAchats = 0; Console.WriteLine("*******************************"); Console.WriteLine("Bon achat : 0123456789"); Console.WriteLine("*******************************"); // Ligne 1 Console.WriteLine("Achat de 50 euros de fournitures"); totalAchats = totalAchats + 50; // Ligne 2 Console.WriteLine("Achat de 250 euros de matières premières"); totalAchats = totalAchats + 250; // Ligne 3 Console.WriteLine("Achat de 500 euros de pièces détachées"); totalAchats = totalAchats + 500; Console.WriteLine(); Console.WriteLine($"Total du bon d'achat : {totalAchats} euros");
******************************* Bon achat : 0123456789 ******************************* Achat de 50 euros de fournitures Achat de 250 euros de matières premières Achat de 500 euros de pièces détachées Total du bon d'achat : 800 euros
Vérification : 0 + 50 + 250 + 500 = 800.
C'est exactement le mécanisme du compteur de Radakass. La seule différence est qu'on ajoute un montant au lieu d'ajouter 1.
Le piège classique : oublier totalAchats = 0; au début. Le
programme refuse alors de démarrer, parce qu'on ne peut pas ajouter 50 à une boîte
vide.
Écrivez le programme d'un combat, en vous inspirant de Radakass.
- Trois variables :
hpHerosà 100,hpMonstreà 60, et un compteurnbCoupsà 0. - Affichez les points de vie de départ des deux personnages.
- Le héros frappe : le monstre perd 25 points.
- Le monstre riposte : le héros perd 15 points.
- Le héros frappe à nouveau : le monstre perd 25 points.
- Après chaque coup, affichez les points de vie du personnage touché, et comptez le coup.
- Affichez le nombre total de coups à la fin.
Avant de coder, dessinez l'ordinogramme sur papier.
Solution
int hpHeros; int hpMonstre; int nbCoups; hpHeros = 100; hpMonstre = 60; nbCoups = 0; Console.WriteLine("=== DÉBUT DU COMBAT ==="); Console.WriteLine(); Console.WriteLine($"Le héros a {hpHeros} HP"); Console.WriteLine($"Le monstre a {hpMonstre} HP"); Console.WriteLine(); Console.WriteLine("Le héros attaque !"); hpMonstre = hpMonstre - 25; nbCoups = nbCoups + 1; Console.WriteLine($"Le monstre a {hpMonstre} HP"); Console.WriteLine(); Console.WriteLine("Le monstre riposte !"); hpHeros = hpHeros - 15; nbCoups = nbCoups + 1; Console.WriteLine($"Le héros a {hpHeros} HP"); Console.WriteLine(); Console.WriteLine("Le héros attaque encore !"); hpMonstre = hpMonstre - 25; nbCoups = nbCoups + 1; Console.WriteLine($"Le monstre a {hpMonstre} HP"); Console.WriteLine(); Console.WriteLine($"Le combat a duré {nbCoups} coups.");
=== DÉBUT DU COMBAT === Le héros a 100 HP Le monstre a 60 HP Le héros attaque ! Le monstre a 35 HP Le monstre riposte ! Le héros a 85 HP Le héros attaque encore ! Le monstre a 10 HP Le combat a duré 3 coups.
Trois boîtes qui évoluent en même temps. Chacune vit sa vie : deux descendent, une monte.
Le compteur nbCoups augmente à chaque coup, qu'il soit porté par
le héros ou par le monstre. C'est bien ce que demandait l'énoncé : le nombre total de
coups.
Vérification : le monstre passe de 60 à 35, puis à 10. Le héros passe de 100 à 85.
Je sais faire
- Je sais faire les quatre opérations.
- Je sais expliquer ce que fait la ligne hp = hp - 2.
- Je sais construire un compteur qui part de zéro.
- Je sais suivre un programme avec un tableau de valeurs.
- Je sais dessiner un ordinogramme avec des rectangles.
Une case qui coince ? Relisez la partie concernée avant de passer à la fiche suivante.