| PDF С( [Théorie] Les bases du débutant- Partie 3) |

Il faut savoir qu'en plus de n'être qu'une vulgaire calculatrice, votre ordinateur est une calculatrice très basique puisqu'on ne peut faire que des opérations très simples :
Si vous voulez faire des opérations plus compliquées (des carrés, des puissances, des logarithmes et autres joyeusetés) il vous faudra les programmer, c'est-à-dire expliquer à l'ordinateur comment le faire. Fort heureusement, nous verrons plus loin dans ce chapitre qu'il existe une bibliothèque mathématique livrée avec le langage C qui contient plein de fonctions mathématiques toutes prêtes. Vous n'aurez pas à les réécrire donc, à moins que vous soyez maso (ou prof de maths, ça marche aussi)
Voyons donc l'addition pour commencer. Pour faire une addition, on utilise le signe + (non, sans blague ?). Vous devez mettre le résultat de votre calcul dans une variable. On va donc par exemple créer une variable "resultat" de type int et faire un calcul :
Code : C - Sélectionner
|
Pas besoin d'être un pro du calcul mental pour deviner que la variable "resultat" contiendra la valeur 8 après exécution Bien sûr, rien ne s'affiche à l'écran avec ce code. Si vous voulez voir la valeur de la variable, rajoutez un printf comme vous savez maintenant si bien le faire :
Code : C - Sélectionner
|
A l'écran, cela donnera :
Code : Console - Sélectionner
| 5 + 3 = 8 |
Voilà pour l'addition.
Pour les autres opérations, c'est pareil, seul le signe utilisé change :
Si vous avez déjà utilisé la calculatrice sur votre ordinateur, vous devriez connaître ces signes. Le signe "moins" est en fait le tiret, le signe "multiplié" est une étoile, et le signe "divisé" est le slash (la barre oblique).
Il n'y a pas de difficulté particulière pour ces opérations, à part pour les deux dernières (la division et le modulo). Nous allons donc parler un peu plus en détail de chacune d'elles.
Les divisions fonctionnent normalement sur un ordinateur quand il n'y a pas de reste. Par exemple, 6 / 3 ça fait 2, votre ordinateur vous donnera la réponse juste. Jusque-là pas de souci.
Prenons maintenant une division avec reste comme 5 / 2.
5 / 2, si vous calculez bien, ça fait 2.5
Et pourtant ! Regardez ce que fait ce code :
Code : C - Sélectionner
|
Code : Console - Sélectionner
| 5 / 2 = 2 |
Il y a un gros problème. On a demandé 5 / 2, on s'attend à avoir 2.5, et l'ordinateur nous dit que ça fait 2 !
Il y a anguille sous roche. Nos ordinateurs seraient-ils stupides à ce point ? En fait, quand il voit les chiffres 5 et 2, votre ordinateur fait une division de nombres entiers. Cela veut dire qu'il tronque le résultat, il ne garde que la partie entière (le 2).
Eh mais je sais ! C'est parce que resultat est un int ! Si ça avait été un double, il aurait pu stocker un nombre décimal à l'intérieur !
Même pas
Essayez le même code en transformant juste resultat en double, et vous verrez qu'on vous affiche quand même 2.
Si on veut que l'ordinateur affiche le bon résultat, il va falloir transformer les nombres 5 et 2 de l'opération en nombres décimaux, c'est-à-dire écrire 5.0 et 2.0 (ce sont les mêmes nombres, mais pour l'ordinateur ce sont des nombres décimaux, donc il fait une division de nombres décimaux) :
Code : C - Sélectionner
|
Code : Console - Sélectionner
| 5 / 2 = 2.500000 |
Là le nombre est correct. Bon il affiche plein de zéros derrière si ça lui chante, mais le résultat reste quand même correct.
Cette propriété de la division de nombres entiers est super importante. Il faut que vous reteniez que pour un ordinateur :
5 / 2 = 2
10 / 3 = 3
4 / 5 = 0
Si vous voulez avoir un résultat décimal, il faut que les nombres de l'opération soient décimaux :
5.0 / 2.0 = 2.5
10.0 / 3.0 = 3.33333
4.0 / 5.0 = 0.8
En fait, en faisant une division d'entiers comme "5 / 2", votre ordinateur répond à la question "Combien y a-t-il de fois 2 dans le nombre 5 ?". La réponse est 2 fois. De même, combien de fois y a-t-il le nombre 3 dans 10 ? 3 fois".
Mais alors me direz-vous, comment on fait pour récupérer le reste de la division ?
C'est là que super-modulo intervient
Le modulo est une opération mathématique qui permet d'obtenir le reste d'une division. C'est peut-être une opération moins connue que les 4 autres, mais pour votre ordinateur ça reste une opération de base... probablement justement pour combler le problème de la "division d'entiers" qu'on vient de voir.
Le modulo, je vous l'ai dit tout à l'heure, se représente par le signe %.
Voici quelques exemples de modulos :
Le modulo 5 % 2 est le reste de la division 5 / 2, c'est-à-dire 1. L'ordinateur calcule que 5 = 2 * 2 + 1 (c'est ce 1, le reste, que le modulo renvoie) De même, 14 % 3, le calcul est 14 = 3 * 4 + 2 (modulo renvoie le 2) Enfin, pour 4 % 2, la division tombe juste, il n'y a pas de reste, donc modulo renvoie 0.
Voilà, je ne peux pas dire grand-chose d'autre de plus au sujet des modulos. Je tenais juste à l'expliquer pour ceux qui ne connaîtraient pas
En plus j'ai une bonne nouvelle : on a vu toutes les opérations de base. Finis les cours de maths
Ce qui serait intéressant, maintenant que vous savez faire les 5 opérations de base, ce serait de s'entraîner à faire des calculs entre plusieurs variables. En effet, rien ne vous empêche de faire :
Code : C - Sélectionner
|
Cette ligne fait la somme des variables nombre1 et nombre2, et stocke le résultat dans la variable resultat.
Et c'est là que les choses commencent à devenir très intéressantes
Tenez, il me vient une idée. Vous avez maintenant déjà le niveau pour réaliser une mini calculatrice. Si si, je vous assure !
Imaginez un programme qui demande 2 nombres à l'utilisateur. Ces deux nombres, vous les stockez dans des variables. Ensuite, vous faites la somme de ces variables, et vous stockez le résultat dans une variable appelée "resultat".
Vous n'avez plus qu'à afficher le résultat du calcul à l'écran, sous les yeux ébahis de l'utilisateur qui n'aurait jamais été capable de calculer cela de tête aussi vite
Essayez de coder vous-même ce petit programme, c'est facile et ça vous entraînera
La réponse est ci-dessous :
Code : C - Sélectionner
|
Code : Console - Sélectionner
| Entrez le nombre 1 : 30 |
| Entrez le nombre 2 : 25 |
| 30 + 25 = 55 |
Mine de rien, on vient de faire là notre premier programme qui a un intérêt. Notre programme est capable d'additionner 2 nombres et d'afficher le résultat de l'opération
Vous pouvez essayer avec n'importe quel nombre (du temps que vous ne dépassez pas les limites d'un type int), votre ordinateur effectuera le calcul en un éclair (encore heureux, parce que des opérations comme ça il doit en faire des milliards dans une même seconde )
Je vous conseille de faire la même chose avec les autres opérations pour vous entraîner (soustraction, multiplication...). En plus, vous ne devriez pas avoir trop de mal vu qu'il y a juste un ou deux signes à changer Vous pouvez aussi ajouter une troisième variable et faire l'addition de 3 variables à la fois, ça fonctionne sans problème :
Code : C - Sélectionner
|
Comme promis, nous n'avons pas de nouvelles opérations à voir. Et pour cause ! On les a déjà toutes vues
C'est avec ces simples opérations de base que vous pouvez tout créer. Il n'y a pas besoin d'autres opérations. Je reconnais que c'est difficile à avaler, se dire qu'un jeu 3D ne fait rien d'autre au final que des additions et des soustractions, pourtant c'est la stricte vérité
Ceci étant, il existe en C des techniques permettant de raccourcir l'écriture des opérations. Pourquoi utiliser des raccourcis ? Parce que, souvent, on fait des opérations répétitives. Vous allez voir ce que je veux dire par là tout de suite, avec ce qu'on appelle l'incrémentation.
Vous verrez que vous serez souvent amenés à ajouter 1 à une variable. Au fur et à mesure du programme, vous aurez des variables qui augmentent de 1 en 1.
Imaginons que votre variable s'appelle "nombre" (nom très original n'est-ce pas). Sauriez-vous comment faire pour ajouter 1 à cette variable, sans savoir quel est le nombre qu'elle contient ?
Voici comment on doit faire :
Code : C - Sélectionner
|
Que se passe-t-il ici ? On fait le calcul nombre + 1, et on range ce résultat dans la variable... nombre ! Du coup, si notre variable nombre valait 4, elle vaut maintenant 5. Si elle valait 8, elle vaut maintenant 9 etc...
Cette opération est justement répétitive. Les informaticiens étant des gens particulièrement fainéants, ils n'avaient guère envie de taper 2 fois le même nom de variable (ben oui quoi, c'est fatigant !).
Ils ont donc inventé un raccourci pour cette opération qu'on appelle l'incrémentation. L'instruction ci-dessous fait exactement la même chose que le code qu'on vient de voir :
Code : C - Sélectionner
|
Cette ligne, bien plus courte que celle de tout à l'heure, signifie "Ajoute 1 à la variable nombre". Il suffit d'écrire le nom de la variable à incrémenter, de mettre 2 signes +, et de ne pas oublier le point-virgule bien entendu.
Mine de rien, cela nous sera bien pratique par la suite car, comme je vous l'ai dit, on sera souvent amenés à faire des incrémentations (c'est-à-dire ajouter 1 à une variable).
Si vous êtes perspicaces, vous avez d'ailleurs remarqué que ce signe ++ se trouve dans le nom du langage "C++". C'est en fait un clin d'oeil des programmeurs, et vous êtes maintenant capables de le comprendre ! C++ signifie que c'est du langage C "incrémenté", c'est-à-dire si on veut "du langage C à 1 niveau supérieur"
C'est tout bêtement l'inverse de l'incrémentation : on enlève 1 à une variable. Même si on fait plus souvent des incrémentations que des décrémentations, cela reste une opération pratique que vous utiliserez de temps en temps.
La décrémentation, si on l'écrit en forme "longue" :
Code : C - Sélectionner
|
Et maintenant en forme "raccourcie" :
Code : C - Sélectionner
|
On l'aurait presque deviné tout seul ça
Au lieu de mettre un ++, vous mettez un --. Si votre variable vaut 6, elle vaudra 5 après l'instruction de décrémentation.
Il existe d'autres raccourcis qui fonctionnent sur le même principe. Cette fois, ces raccourcis fonctionnent pour toutes les opérations de base : + - * / %
Cela permet là encore d'éviter une répétition du nom d'une variable sur une même ligne.
Ainsi, si vous voulez multiplier par 2 une variable :
Code : C - Sélectionner
|
Vous pouvez l'écrire d'une façon raccourcie comme ceci :
Code : C - Sélectionner
|
Si le nombre vaut 5 au départ, il vaudra 10 après cette instruction.
Pour les autres opérations de base, cela fonctionne de la même manière. Voici un petit programme d'exemple :
Code : C - Sélectionner
|
(allez boudez pas, un peu de calcul mental n'a jamais tué personne)
L'avantage ici est qu'on peut utiliser toutes les opérations de base, et qu'on peut ajouter, soustraire, multiplier par n'importe quel nombre. Ce sont des raccourcis à connaître si vous avez des lignes répétitives à taper un jour dans un programme
Retenez quand même que l'incrémentation reste de loin le raccourci le plus utilisé
En langage C, il existe ce qu'on appelle des bibliothèques "standard", c'est-à-dire des bibliothèques toujours utilisables. Ce sont en quelque sorte des bibliothèques "de base" qu'on utilise très souvent.
Les bibliothèques sont, je vous le rappelle, des ensembles de fonctions toutes prêtes. Ces fonctions ont été écrites par des programmeurs avant vous, elles vous évitent en quelque sorte d'avoir à réinventer la roue à chaque nouveau programme
Vous avez déjà utilisé les fonctions printf et scanf de la bibliothèque stdio.h.
Il faut savoir qu'il existe une autre bibliothèque, appelée math.h, qui contient de nombreuses fonctions mathématiques toutes prêtes.
En effet, les 5 opérations de base que l'on a vu sont loin d'être suffisantes ! Bon, il se peut que vous n'ayez jamais besoin de certaines opérations complexes comme les exponentielles (si vous ne savez pas ce que c'est, c'est que vous êtes peut-être un peu trop jeune ou que vous n'avez pas assez fait de maths dans votre vie). Toutefois, la bibliothèque mathématique contient de nombreuses autres fonctions dont vous aurez très probablement besoin.
Tenez par exemple, on ne sait pas faire des puissances en C ! Comment calculer un simple carré ? Vous pouvez toujours essayer de taper 5² dans votre programme, mais votre ordinateur ne le comprendra jamais car il ne sait pas ce que c'est... A moins que vous le lui expliquiez en lui indiquant la bibliothèque mathématique !
Pour pouvoir utiliser les fonctions de la bibliothèque mathématique, il est indispensable de mettre la directive de préprocesseur suivante en haut de votre programme :
Code : C - Sélectionner
|
Une fois que c'est fait, vous pouvez utiliser toutes les fonctions de cette bibliothèque.
J'ai justement l'intention de vous les présenter
Bon, comme il y a beaucoup de fonctions je ne peux pas faire la liste complète ici. D'une part ça vous ferait trop à assimiler, et d'autre part mes pauvres petits doigts auraient fondu avant la fin de l'écriture du chapitre
Je vais donc me contenter des principales fonctions, c'est-à-dire celles qui me semblent les plus importantes.
Vous n'avez peut-être pas tous le niveau en maths pour comprendre ce que font ces fonctions. Si c'est votre cas, pas d'inquiétude. Lisez juste, cela ne vous pénalisera pas pour la suite.
Ceci étant, je vous offre un petit conseil gratuit : soyez attentifs en cours de maths, on dirait pas comme ça mais en fait ça finit par servir
Cette fonction retourne la valeur absolue d'un nombre, c'est-à-dire |x| (c'est la notation mathématique). La valeur absolue d'un nombre est sa valeur positive :
En bref, elle renvoie toujours l'équivalent positif du nombre que vous lui donnez.
Code : C - Sélectionner
|
Cette fonction renvoie un double, donc votre variable "absolu" doit être de type double.
Il existe aussi une fonction similaire appelée "abs", située dans "stdlib.h" cette fois.
La fonction "abs" marche de la même manière, sauf qu'elle utilise des entiers (int). Elle renvoie donc un nombre entier de type int et non un double comme fabs.
Cette fonction renvoie le premier nombre entier après le nombre décimal qu'on lui donne.
C'est une sorte d'arrondi. On arrondit en fait toujours au nombre entier supérieur.
Par exemple, si on lui donne 26.512, la fonction renvoie 27.
Cette fonction s'utilise de la même manière, et renvoie un double :
Code : C - Sélectionner
|
C'est l'inverse de la fonction précédente, cette fois elle renvoie le nombre directement en dessous.
Si vous lui donnez 37.91, la fonction floor vous renverra donc 37
Cette fonction permet de calculer la puissance d'un nombre. Vous devez lui indiquer 2 valeurs : le nombre, et la puissance à laquelle vous voulez l'élever.
Voici le schéma de la fonction :
Code : C - Sélectionner
|
Par exemple, "2 puissance 3" (que l'on écrit habituellement 2^3 sur un ordinateur), c'est le calcul 2 * 2 * 2, ce qui fait 8 :
Code : C - Sélectionner
|
Vous pouvez donc utiliser cette fonction pour calculer des carrés. Il suffit d'indiquer une puissance de 2.
Cette fonction calcule la racine carrée d'un nombre. Elle renvoie un double.
Code : C - Sélectionner
|
Ce sont les 3 fameuses fonctions utilisées en trigonométrie.
Le fonctionnement est le même, ces fonctions renvoient un double.
Ces fonctions attendent une valeur en radians.
Ce sont les fonctions arc sinus, arc cosinus et arc tangente, d'autres fonctions de trigonométrie.
Elles s'utilisent de la même manière et renvoient un double.
Cette fonction calcule l'exponentielle d'un nombre. Elle renvoie un double (oui oui, elle aussi)
Cette fonction calcule le logarithme népérien d'un nombre (que l'on note aussi "ln")
Cette fonction calcule le logarithme base 10 d'un nombre.
Conclusion, ben heureusement que je n'ai pas parlé des autres fonctions (en fait, je ne comprends même pas à quoi elles servent) Déjà, avec ces fonctions-là vous avez de quoi faire si vous vous ennuyez
Encore une fois, si vous n'avez pas compris un mot de ce que j'ai dit, ce n'est pas bien grave car on n'en a pas absolument besoin. Tout dépend en fait du programme que vous allez faire : si vous programmez une calculatrice scientifique, c'est sûr que vous vous en servirez
Retenez quand même les fonctions floor, ceil, et pow, elles vous seront probablement utiles (même si vous ne programmez pas une calculatrice oui oui)
Les conditions servent à "tester" des variables. On peut par exemple dire "Si la variable machin est égale à 50, fais ceci"... Mais ce serait dommage de ne pouvoir tester que l'égalité ! Il faudrait aussi pouvoir tester si la variable est inférieure à 50, inférieure ou égale à 50, supérieure, supérieure ou égale...
Ne vous inquiétez pas, le C a tout prévu
(mais vous n'en doutiez pas hein)
Pour étudier les conditions "if... else", nous allons suivre le plan suivant :
Avant de voir comment on écrit une condition de type "if... else" en C, il faut donc que vous connaissiez 2-3 symboles de base. Ces symboles sont indispensables pour réaliser des conditions.
Voici un petit tableau de symboles du langage C à connaître par coeur
| Symbole | Signification |
| = = | Est égal à |
| > | Est supérieur à |
| < | Est inférieur à |
| >= | Est supérieur ou égal à |
| <= | Est inférieur ou égal à |
| != | Est différent de |
Faites très attention, il y a bien 2 symboles "=" pour tester l'égalité. Une erreur courante que font les débutants est de ne mettre qu'un symbole =, ce qui n'a pas la même signification en C. Je vous en reparlerai un peu plus bas.
Attaquons maintenant sans plus tarder
Nous allons faire un test simple, qui va dire à l'ordinateur :
Citation : Test simple
|
SI la variable vaut ça ALORS fais ceci |
En anglais, le mot "si" se traduit par "if". C'est celui qu'on utilise en langage C pour introduire une condition. Ecrivez donc un if. Ouvrez ensuite des parenthèses : à l'intérieur de ces parenthèses vous devrez écrire votre condition.
Ensuite, ouvrez une accolade { et fermez-la un peu plus loin }. Tout ce qui se trouve à l'intérieur des accolades sera exécuté uniquement si la condition est vérifiée.
Cela nous donne donc à écrire :
Code : C - Sélectionner
|
A la place de mon commentaire "Votre condition", on va écrire une condition pour tester une variable. Par exemple, on pourrait tester une variable "age" qui contient votre âge. Tenez pour s'entraîner, on va tester si vous êtes majeur, c'est-à-dire si votre âge est supérieur ou égal à 18 :
Code : C - Sélectionner
|
Le symbole >= signifie "Supérieur ou égal", comme on l'a vu dans le tableau tout à l'heure.
S'il n'y a qu'une instruction entre les accolades, alors celles-ci deviennent facultatives. Vous pouvez donc écrire :
Code : C - Sélectionner
|
Si vous voulez tester les codes précédents pour voir comment le if fonctionne, il faudra placer le if à l'intérieur d'une fonction main et ne pas oublier de déclarer une variable age à laquelle on donnera la valeur de notre choix. Ca peut paraître évident pour certains, mais apparemment ça ne l'était pas pour tout le monde aussi ai-je rajouté cette explication
Voici un code complet que vous pouvez tester :
Code : C - Sélectionner
|
Ici, la variable age vaut 20, donc le "Vous êtes majeur !" s'affichera. Essayez de changer la valeur initiale de la variable pour voir. Mettez par exemple 15 : la condition sera fausse, et donc "Vous êtes majeur !" ne s'affichera pas cette fois
Servez-vous de ce code de base pour tester les prochains exemples du chapitre
Une question de propretéLa façon dont vous ouvrez les accolades n'est pas importante, votre programme marchera aussi bien si vous écrivez tout sur une même ligne. Par exemple :
Code : C - Sélectionner
|
Pourtant, même si c'est possible d'écrire comme ça, c'est ultra déconseillé (notez que quand j'écris plus gros, en gras rouge souligné, c'est généralement parce que c'est vraiment important)
En effet, tout écrire sur une même ligne rend votre code difficilement lisible. Si vous ne prenez pas dès maintenant l'habitude d'aérer votre code, plus tard quand vous écrirez de plus gros programmes vous ne vous y retrouverez plus !
Essayez donc de présenter votre code source de la même façon que moi : une accolade sur une ligne, puis vos instructions (précédées d'une tabulation pour les "décaler vers la droite"), puis l'accolade de fermeture sur une ligne.
Il existe plusieurs bonnes façons de présenter son code source. Ca ne change rien au fonctionnement du programme final, mais c'est une question de "style informatique" si vous voulez
Si vous voyez un code de quelqu'un d'autre présenté un peu différemment, c'est qu'il code avec un style différent. Le principal, c'est que son code reste aéré et lisible.
Maintenant que nous savons faire un test simple, allons un peu plus loin : si le test n'a pas marché (il est faux), on va dire à l'ordinateur d'exécuter d'autres instructions.
En français, nous allons donc écrire quelque chose qui ressemble à cela :
Citation : Test avec sinon
|
SI la variable vaut ça ALORS fais ceci SINON fais cela |
Il suffit de rajouter le mot else après l'accolade fermante du if.
Petit exemple :
Code : C - Sélectionner
|
Les choses sont assez simples : si la variable age est supérieure ou égale à 18, on affiche le message "Vous êtes majeur !", sinon on affiche "Vous êtes mineur".
On a vu comment faire un "si" et un "sinon". Il est possible aussi de faire un "sinon si" pour faire un autre test si le premier test n'a pas marché. Le "sinon si" se met entre le if et le else.
On dit dans ce cas à l'ordinateur :
Citation : Avec un sinon si
|
SI la variable vaut ça ALORS fais ceci SINON SI la variable vaut ça ALORS fais ça SINON fais cela |
Traduction en langage C :
Code : C - Sélectionner
|
L'ordinateur fait les tests dans l'ordre :
Le "else" et le "else if" ne sont pas obligatoires. Pour faire une condition, il faut juste au moins un "if" (logique me direz-vous, sinon il n'y a pas de condition !)
Notez qu'on peut mettre autant de "else if" que l'on veut. On peut donc écrire :
Citation : Plusieurs else if
|
SI la variable vaut ça ALORS fais ceci SINON SI la variable vaut ça ALORS fais ça SINON SI la variable vaut ça ALORS fais ça SINON SI la variable vaut ça ALORS fais ça SINON fais cela |
Il peut aussi être utile de faire plusieurs tests à la fois dans votre if. Par exemple, vous voudriez tester si l'âge est supérieur à 18 ET si l'âge est inférieur à 25. Pour faire cela, il va falloir utiliser de nouveaux symboles :
| && | ET |
| || | OU |
| ! | NON |
Si on veut faire le test que j'ai mentionné plus haut, il faudra écrire :
Code : C - Sélectionner
|
Les deux symboles "&&" signifient ET. Notre condition se dirait en français : "Si l'âge est supérieur à 18 ET si l'âge est inférieur à 25"
Test OUPour faire un OU, on utilise les 2 signes ||. Je dois avouer que ce signe n'est pas facilement accessible sur nos claviers. Pour le taper sur un clavier AZERTY français, il faudra faire Alt Gr + 6. Sur un clavier belge, il faudra faire Alt Gr + &.
Imaginons un programme débile qui décide si une personne a le droit d'ouvrir un compte en banque. C'est bien connu, pour ouvrir un compte en banque il vaut mieux ne pas être trop jeune (on va dire arbitrairement qu'il faut avoir au moins 30 ans) ou bien avoir plein d'argent (parce que là même à 10 ans on vous acceptera à bras ouverts
Notre test pour savoir si le client a le droit d'ouvrir un compte en banque pourrait être :
Code : C - Sélectionner
|
Ce test n'est valide que si la personne a plus de 30 ans ou si elle possède plus de 100 000 euros
Test NONLe dernier symbole qu'il nous reste à tester est le point d'exclamation. En informatique, le point d'exclamation signifie "Non". Vous devez mettre ce signe avant votre condition pour dire "Si cela n'est pas vrai" :
Code : C - Sélectionner
|
Cela pourrait se traduire par "Si la personne n'est pas mineure". Si on avait enlevé le "!" devant, cela aurait signifié l'inverse : "Si la personne est mineure".
Si on veut tester si la personne a tout juste 18 ans, il faudra écrire :
Code : C - Sélectionner
|
N'oubliez pas de mettre 2 signes "égal" dans un if, comme ceci : = =
Si vous ne mettez qu'un seul signe =, alors votre variable prendra la valeur 18 (comme on l'a appris dans le chapitre sur les variables). Nous ce qu'on veut faire ici, c'est tester la valeur de la variable, pas la changer ! Faites très attention à cela, beaucoup d'entre vous n'en mettent qu'un quand ils débutent et forcément... leur programme ne marche pas comme ils voudraient
Une autre erreur courante de débutant : vous mettez parfois un point-virgule à la fin de la ligne d'un if. Or, un if est une condition, et on ne met de point-virgule qu'à la fin d'une instruction et non d'une condition.
Le code suivant ne marchera pas comme prévu car il y a un point-virgule à la fin du if :
Code : C - Sélectionner
|
Nous allons maintenant rentrer plus en détail dans le fonctionnement d'une condition de type if... else. En effet, les conditions font intervenir quelque chose qu'on appelle les booléens en informatique.
C'est un concept très important, donc ouvrez grand vos oreilles (euh vos yeux plutôt)
En cours de Physique-Chimie, mon prof avait l'habitude de nous faire commencer par quelques petites expériences avant d'introduire une nouvelle notion. Je vais l'imiter un peu aujourd'hui
Voici un code source très simple que je vous demande de tester :
Code : C - Sélectionner
|
Résultat :
Code : Console - Sélectionner
| C'est vrai |
Mais ??? On n'a pas mis de condition dans le if, juste un nombre. Qu'est-ce que ça veut dire ça n'a pas de sens ?
Si ça en a, vous allez comprendre
Faites un autre test maintenant en remplaçant le 1 par un 0 :
Code : C - Sélectionner
|
Résultat :
Code : Console - Sélectionner
| C'est faux |
Faites maintenant d'autres tests en remplaçant le 0 par n'importe quel autre nombre entier, comme 4, 15, 226, -10, -36 etc...
Qu'est-ce qu'on vous répond à chaque fois ? On vous répond : "C'est vrai".
En fait, à chaque fois que vous faites un test dans un if, ce test renvoie la valeur 1 s'il est vrai, et 0 s'il est faux.
Par exemple :
Code : C - Sélectionner
|
Ici, le test que vous faites est "age >= 18".
Supposons que age vaille 23. Alors le test est vrai, et l'ordinateur "remplace" en quelque sorte "age >= 18" par 1.
Ensuite, l'ordinateur obtient (dans sa tête) un "if (1)". Quand le nombre est 1, comme on l'a vu, l'ordinateur dit que la condition est vraie, donc il affiche "C'est vrai" !
De même, si la condition est fausse, il remplace age >= 18 par le nombre 0, et du coup la condition est fausse : l'ordinateur va lire les instructions du "else".
Testez maintenant un autre truc : envoyez le résultat de votre condition dans une variable, comme si c'était une opération (car pour l'ordinateur, c'est une opération !).
Code : C - Sélectionner
|
Comme vous le voyez, la condition age >= 18 a renvoyé le nombre 1 car elle est vraie. Du coup, notre variable majeur vaut 1, on vérifie d'ailleurs ça en faisant un printf qui montre bien qu'elle a changé de valeur.
Faites le même test en mettant age == 10 par exemple. Cette fois, majeur vaudra 0.
Retenez bien ceci :
Et aussi ceci :
Pour être tout à fait exact, 0 = faux et tous les autres nombres valent vrai (on a eu l'occasion de le tester plus tôt). Ceci dit, pour simplifier les choses on va se contenter de n'utiliser que les chiffres 0 et 1, pour dire si "quelque chose est faux ou vrai".
En langage C, il n'existe pas de type de variable "booléen". Il n'y a pas de type comme "double", "char"...
En fait, le type booléen n'a été rajouté qu'en C++. En effet, en C++ vous avez un nouveau type "bool" qui a été créé spécialement pour ces variables booléennes.
Comme pour l'instant on fait du C, on n'a donc pas de type spécial. Du coup, on est obligé d'utiliser un type entier comme int.
Souvent, on fera un test "if" sur une variable booléenne :
Code : C - Sélectionner
|
Comme majeur vaut 1, la condition est vraie, donc on affiche "Tu es majeur !".
Ce qui est très pratique, c'est que la condition se lit facilement par un être humain. On voit "if (majeur)", ce que peut traduire par "Si tu es majeur" Les tests sur des booléens sont donc faciles à lire et à comprendre, pour peu que vous ayez donné des noms clairs à vos variables comme je vous ai dit de le faire depuis le début
Tenez, voici un autre test imaginaire :
Code : C - Sélectionner
|
Ce test signifie "Si tu es majeur ET que tu es un garçon".
garcon est ici une autre variable booléenne qui vaut 1 si vous êtes un garçon, et 0 si vous êtes... une fille ! Bravo, vous avez tout compris !
Les booléens servent donc à exprimer si quelque chose est vrai ou faux.
C'est très utile, et ce que je viens de vous expliquer vous permettra de comprendre bon nombre de choses par la suite
Petite question : si on fait le test "if (majeur == 1)", ça marche aussi non ?
Tout à fait. Mais le principe des booléens c'est justement de raccourcir l'expression du if et de la rendre plus facilement lisible. Avouez que "if (majeur)" ça se comprend très bien non ?
Retenez donc : si votre variable est censée contenir un nombre, faites un test sous la forme "if (variable == 1)".
Si au contraire votre variable est censée contenir un booléen (c'est-à-dire soit 1 soit 0 pour dire vrai ou faux), faites un test sous la forme "if (variable)".
La condition "if... else" que l'on vient de voir est le type de condition le plus souvent utilisé.
En fait, il n'y a pas 36 façons de faire une condition en C. Le "if... else" permet de gérer tous les cas.
Toutefois, le "if... else" peut s'avérer quelque peu... répétitif. Prenons cet exemple :
Code : C - Sélectionner
|
Les informaticiens détestent faire des choses répétitives, on a eu l'occasion de le vérifier plus tôt
Alors, pour éviter d'avoir à faire des répétitions comme ça quand on teste la valeur d'une seule et même variable, ils ont inventé une autre structure que le "if... else" Cette structure particulière s'appelle "switch". Voici un switch basé sur l'exemple qu'on vient de voir :
Code : C - Sélectionner
|
Imprégnez-vous de mon exemple pour créer vos propres switch. On les utilise plus rarement, mais c'est vrai que c'est pratique car ça fait (un peu) moins de code à taper
L'idée c'est donc d'écrire "switch (maVariable)" pour dire "Je vais tester la valeur de la variable maVariable".
Vous ouvrez ensuite des accolades que vous refermez tout en bas.
Ensuite, à l'intérieur de ces accolades, vous gérez tous les "cas" : case 2, case 4, case 5, case 45...
Vous devez mettre une instruction break; obligatoirement à la fin de chaque cas. Si vous ne le faites pas, alors l'ordinateur ira lire les instructions en dessous censées être réservées aux autres cas !
L'instruction break; commande en fait à l'ordinateur de "sortir" des accolades.
Enfin, le cas "default" correspond en fait au "else" qu'on connaît bien maintenant. Si la variable ne vaut aucune des valeurs précédentes, l'ordinateur ira lire le default.
Le switch est très souvent utilisé pour faire des menus en console.
Je crois que le moment est venu de pratiquer un peu
En console, pour faire un menu, on fait des printf qui affichent les différentes options possibles. Chaque option est numérotée, et l'utilisateur doit rentrer le numéro du menu qui l'intéresse.,br /> Voici par exemple ce que la console devra afficher :
Code : Console - Sélectionner
|
=== Menu === 1. Royal Cheese 2. Mc Deluxe 3. Mc Bacon 4. Big Mac Votre choix ? |
(Vous aurez compris que j'avais un peu faim lorsque j'étais en train de rédiger ces lignes)
Voici votre mission (si vous l'acceptez) : reproduisez ce menu à l'aide de printf (facile), ajoutez un scanf pour enregistrer le choix de l'utilisateur dans une variable choixMenu (trop facile), et enfin faites un switch pour dire à l'utilisateur "Tu as choisi le menu Royal Cheese" par exemple.
Allez, au travail
CorrectionVoici la solution que j'espère que vous avez trouvée
Code : C - Sélectionner
|
Et voilà le travail
J'espère que vous n'avez pas oublié le "default" à la fin du switch !
En effet, quand vous programmez vous devez toujours penser à tous les cas. Vous avez beau dire de taper un nombre entre 1 et 4, vous trouverez toujours un imbécile qui ira taper "10" ou encore "Salut" alors que ce n'est pas ce que vous attendez
Bref, soyez toujours vigilants de ce côté-ci : ne faites pas confiance à l'utilisateur, il peut parfois rentrer n'importe quoi. Prévoyez toujours un cas "default" ou un "else" si vous faites ça avec des if.
Je vous conseille de vous familiariser avec le fonctionnement des menus en console, car on en fait souvent dans des programmes console et vous en aurez sûrement besoin
Il existe une troisième façon de faire des conditions, plus rare.
On appelle cela des expressions ternaires.
Concrètement, c'est comme un "if... else", sauf qu'on fait tout tenir sur une seule ligne !
Comme un exemple vaut mieux qu'un long discours, je vais vous donner 2 fois la même condition : la première avec un "if... else", et la seconde, identique, mais sous forme de ternaire.
Supposons qu'on ait une variable booléenne "majeur" qui vaut vrai (1) si on est majeur, et faux (0) si on est mineur.
On veut changer la valeur de la variable age en fonction du booléen, pour mettre "18" si on est majeur, "17" si on est mineur. C'est un exemple complètement débile je suis d'accord, mais ça me permet de vous montrer comment on peut se servir des ternaires.
Voici comment faire cela avec un if... else :
Code : C - Sélectionner
|
Notez que j'ai enlevé dans cet exemple les accolades car elles sont facultatives s'il n'y a qu'une instruction, comme je vous l'ai expliqué plus tôt.
Voici un code qui fait exactement la même chose que le code précédent, mais écrit cette fois sous forme de ternaire :
Code : C - Sélectionner
|
Les ternaires permettent, sur une seule ligne, de changer la valeur d'une variable en fonction d'une condition. Ici la condition est tout simplement "majeur", mais ça pourrait être n'importe quelle condition plus longue hein
Le point d'interrogation permet de dire "Est-ce que tu es majeur ?". Si oui, alors on met la valeur 18 dans age. Sinon (le ":" signifie "else" ici), on met la valeur 17.
Les ternaires ne sont pas du tout indispensables, personnellement je ne les utilise pas trop car ils peuvent rendre la lecture d'un code source un peu difficile. Ceci étant, il vaut mieux que vous les connaissiez si, un jour, vous tombez sur un code plein de ternaires dans tous les sens
nombre de visites: 841
