Manipulations de variables
Description du chapitre et des ses objectifs :
Je vois dans vos yeux éblouis que vous avez très envie d'utiliser vos variable? Non? Ben dommage, après ce chapitre vous saurez faire la plupart des opérations sur les variables comme un pro. Bonne lecture.
Accéder directement à une des parties du cours :
L'affectation
J'espère qu'à partir d'ici tout le monde sait créer des variables
. En programmation, tout se base sur des chiffres, les variables seront donc toujours là pour récupérer le résultat d'opérations. Vous allez voir, il n'y a rien de compliqué.
Tout d'abord créons une variable (on ne peut pas faire d'opération dessus si elle n'a pas été déclarée et c'est d'ailleurs une régle générale en C et pour tout ce que vous verrez ensuite: On ne peut pas utiliser quoi que ce soit tant que ça n'a pas été déclaré! )
Maintenant nous allons l'
initialiser, c'est à dire lui donner une valeur de base (que vous choisissez).
Voila,
maVariable vaut 0
Comme vous pouvez le remarquer, pour initialiser on utilise le signe égal. Il s'agit d'une
affectation ! A chaque fois que vous voulez changer la valeur d'une variable, il faut lui affecter une valeur de la même façon, par exemple:
Maintenant,
maVariable vaut 124563. Facile non?
Attention : Le ne nom de la variable à qui on affecte une valeur est TOUJOURS à gauche du signe égal. Il ne peut JAMAIS il y avoir de chiffres à gauche ou autre chose qu'une variable. NB: une affectation est une instruction, n'oubliez pas le ";" à la fin de la ligne.
Seulement voilà... les informaticiens ont toujours été feignants, ils ont donc pas supporté de devoir écrire 2 lignes qui se répètent un peu. C'est de qu'est apparue l'idée de pouvoir combiner l'initialisation et la déclaration en une seule ligne! (bon d'accord ce n'est pas la véritée, mais on s'en accomodera

)
Comment faire?
Impressionnant non?
Voici un petit exemple pour voir si vous avez bien compris:
int maVariable;
char autre = 89;
float a = 15.47;
maVariable = 5;
autre = 0;
Tout ceci est correct. Je suppose que je n'ai pas besoin de détailler, le code parle de lui-même.
Opérations élémentaires
C'est bien joli de pouvoir mettre des valeurs dans nos variables, mais nous ce qu'on veut c'est surtout faire des opérations dessus!
Pour cela, on va donc affecter le résultat de l'opération que l'on souhaite, par exemple, si je veux que ma variable reçoive le résultat de l'addition de 4 et 99, je n'ai qu'à faire:
int maVariable;
maVariable = 4 + 99;
Là encore, vous ne devriez pas avoir trop de problèmes, c'est presque trop évident... Cela fonctionne pour tous les opérateurs courants de calcul:
| + | addition |
| - | soustraction |
| * | multiplication |
| / | division |
| % | reste de la division euclidienne |
Si vous ne savez pas ce qu'est le reste de la division euclidienne, c'est le reste de la division entière ( 4 % 3 = 1, car 4 - 1*3 = 1). Ce qui signifie que cette opération ne marche que avec des entiers, jamais de float avec donc! Cette opération est aussi appelée
modulo.
A noter que l'on pouvait aussi utiliser le raccourci vu un peu plus haut en combinant initialisation et déclaration:
Information : Si vous faites la division de 5 par 2, vous obtiendrez le nombre entier 2. Pour avoir une division contenant des décimales, il faut spécifier que ce sont des nombres à virgule: 5.0 / 2.0 vous retournera 2.5. Attention aussi à stocker ces nombres dans des float.
Question : Que ce passe-t'il si le résultat de mon opération dépasse la taille limite de ma variable, par exemple: char a = 120+50.
Je suis ravis que vous me posiez cette question

(pour ceux qui n'avaient pas tout suivit, les valeurs d'un
char tiennent entre -128 et 127)
Vous dépassez de la taille maximale, alors que fait la variable... et bien elle fait bien l'addition, mais à partir de sa valeur minimale. Je m'explique:
Vous êtes à la dernière valeur positive possible d'une variable (127 pour un char par exemple) et puis vous ajoutez 1. La variable prendra donc la plus petite valeur possible après 127, c'est à dire... -128! C'est un effet néfaste qu'il faut mieux éviter, il faut donc toujours bien savoir ce que valent vos variables à tout moment. Au final, 120 + 50 = -86 dans un
char
Opérations entre variables
C'est sympa de pouvoir additionner des nombres entre eux, mais pouvoir additionner des variables, c'est mieux!
Le principe est exactement le même que pour les faire des opérations entre les nombres.
Premièrement on déclare nos variables.
Ensuite on les initialise.
Puis on fait les opérations que l'on veut dessus.
Attention : Il faut toujours faire des opérations entre des valeurs initialisées! Cependant, rien ne vous empêche d'affecter à une variable non initialisée le résultat d'une opération.
Voici un petit exemple:
int a;
int b = 6 * 2;
int c;
c = 3;
a = b / c;
Voyons cela en détail:
1° ligne:
a est déclaré et n'a encore aucune valeur.
2° et 3° lignes: on déclare les variables
b et
c.
4° ligne: je suppose que vous comprenez
5° ligne: on affecte à
a le résultat de
b / c.
Pratique pour faire des calculs où une variable change tout le temps non?
Autre chose, rien ne vous empêche "d'appeler" la variable à laquelle vous affectez un résultat dans votre calcul:
Cependant, comme vous l'appelez,
a doit être initialisé, il est donc impossible de faire:
Cela n'a aucun sens.
Attention : Comme je vous l'ai dit, il faut obligatoirement un nom de variable à gauche du signe d'affectation. L'écriture
n'a donc absolument aucun sens! On affecte toujours à une variable et pas à un calcul.
Profitons en pour voir la
priorit de calcul. L'écriture des calculs est extrêmement similaire à celle que vous que vous deviez faire en mathématiques. Il existe des parenthèses qui permettent d'augmenter la priorité d'un calcul par rapport à un autre.
int resultat = ( 4 + 2 ) * 3 - 5
La plus grande priorité appartient aux parenthèses, l'ordinateur calcule donc d'abord ce qu'il y a à l'intérieur:
4 + 2 = 6
Puis viens la division et multiplication qui ont la même priorité:
6 * 3 = 18
Et enfin l'addition et la soustraction:
18 - 5 = 13
resultat vaut donc 13 à la fin de ce calcul.
Attention : Il ne faut pas, en règle générale, que la contenance de la variable à laquelle on affecte un résultat soit plus petite que celles avec lesquelles on fait un calcul
Par exemple, ce code est dangereux/impossible:
char mauvais_exemple;
int a = 10;
int b = 52;
float c = -3.1;
mauvais_exemple = a * b + c;
Un char ne peut contenir de int, et encore moins de float. Par contre, changer mauvais_exemple en
float suffirait pour accueillir le résultat.
Ceci est donc tout à fait possible car la contenance de la variable récupérant le résultat est plus grande que les variables utilisées dans le calcul:
int resultat;
char a = 8;
char b = -52;
resultat = a * b;
Raccourcis et syntaxe
Comme je vous l'ai dit, les informaticiens sont feignants. Et pour répondre à leurs attentes, ils ont inventé plein de raccourcis pour se faciliter la vie.
Premier cas: la déclaration multiple.
Si vous avez plusieurs variables du même type à déclarer, vous pouvez toutes les mettre sur une seule ligne. Pour cela il suffit d'indiquer le type en début d'instruction, puis de donner vos noms de variable à la chaine en les séparant par une virgule. On peut aussi combiner cette méthode avec l'initialisation rapide:
int premiere_variable = 0, a, b, c = 10;
Pratique non?
Deuxième cas: L'opération sur la valeur qui reçois l'affectation. (je n'ai pas trouvé plus court

)
Comme je vous l'avais montré, il existe une écriture qui fait un peu répéter le code. Nous autres informaticiens nous détestons ça.
C'est vraiment trop long (quel calvaire)... alors on a inventé une syntaxe qui fait déplacer le signe de l'opération à gauche du "=" et qui signifie:
J'affecte à la valeur la gauche l'ancienne valeur à gauche plus/moins/divisé/multiplié/modulo l'expression à droite. Exemple:
int a = 10;
a += 2;
a /= 6;
Alors que vaut
a à la fin?
1° ligne:
a vaut 10.
2° ligne:
a vaut
a + 2, soit 10+2 donc 12.
3° ligne:
a vaut
a / 6, soit 12/6 donc 2.
Troisième cas: L'
incrémentation et la
décrémentation
Voilà une notion toute nouvelle pour vous. L'incrémentation est une opération qui augmente de 1 une variable. La décrémentation, c'est le contraire, ça soustrait 1.
L'incrémentation se note à l'aide du signe "++" collé à la variable.
La décrémentation se note à l'aide du signe "--" collé à la variable.
Question : Heu, mais on colle ça à gauche ou à droite de la variable?
La réponse est que les 2 sont possibles, mais leur effet est légèrement différent. Exemple:
Question : Oula, c'est pas un peu casse tête?
Exactement! Et vous êtes loin du compte. Voici une explication qui peut vous sembler bien déroutante.
Lorsque le signe est placé
après le nom de la variable, l'incrémentation/décrémentation se fait après l'exécution de la ligne. (ou pas, cela dépend du compilateur pour compliquer la chose)
Lorsque le signe est placé
avant le nom de la variable, l'incrémentation/décrémentation se fait avant l'exécution de la ligne.
Voici un code pour comprendre:
int a = 0;
a = 10 * a++;
a = --a * 5;
a++;
1° ligne:
a est créé et prends la valeur de 0.
2° ligne: on affecte à
a le résultat de
10 * a++ . Ici l'incrémentation n'est pas encore faite, l'opération faite est donc
10 * 0 et mon compilateur va même jusqu'à ignorer l'incrémentation pour ne pas faire d'erreurs.
3° ligne: il y une pré-décrémentation,
a vaut donc actuellement
0 - 1. On multiplie à ce résultat 5.
a vaut donc maintenant
-5.
4° ligne: on incrémente
a,
a vaut donc maintenant
-4. Ouf!
Mais le casse tête ne s'arrête pas la. Pourquoi le compilateur a-t'il ignoré mon premier
a++?
La réponse se trouve dans les calculs un peu tordus:
int a = 0;
a = (--a * 2) + (++a * 4)
A votre avis combien cela fait? 0? -2?
Et bien non, mon compilateur me donne 4 comme solution. Ce genre de problème porte un nom, c'est un
effet de bord, on ne peut pas prévoir ce qu'il va se passer. Il faut
absolument éviter cela, sinon on perd le contrôle sur ce que l'on fait sur ses variables...
Voilà pourquoi généralement l'incrémentation tient sur une seule instruction à part et se retrouve sous cette forme:
Dernier point concernant la syntaxe:
Durant le cours, je fais toujours attention à laisser des espaces entre les opérateurs et les valeurs. Il ne s'agit que d'un moyen pour rendre la lecture plus aisée. Le seul cas où il faut séparer d'un espace, c'est pour délimiter les noms de variables des mots clefs (comme le type). Voici plusieurs syntaxes correctes:
int a=10+2*789;
int b = 5 * 4 * 6;
int c = 40+1 *3;
Petit test: voyons si vous avez le bon résultat à ces calculs
a vaut 1588.
b vaut 120.
c vaut 43. (si vous avez répondu 123, attention! La multiplication est prioritaire sur l'addition! Peu importe le nombre d'espaces séparant les valeurs.)
Et voilà, vous connaissez tout de la programmation de base, faire des opérations. Fascinant non?
Chapitre précédent - Sommaire - Chapitre suivant
Nos rédacteurs et membres sont pour la plupart ouverts à des remarques constructives et servir à alerter le rédacteur du cours, des fautes éventuelles ou de propositions et nouvelles perspectives de cours etc ...
Pour ce faire cliquez ici
Postez vous aussi un commentaire à cette partie via le lien que voici