Variables et calculs

moyenne.cpp


Comme je vous l'ai dit la semaine dernière, nous allons cette fois-ci voir comment on peut faire des calculs en C++. D'une part, nous allons voir les opérateurs de base, et d'autre part, je vais introduire les types et les variables. Ce cours sera un peu plus lourd à digérer que le précédent, mais il nous faut tout ça si on veut arriver quelque part par la suite. Nous n'adopterons pas la même méthode que dans le cours précédent : aujourd'hui, je vais poser les principes et les points importants, et à la fin, nous en ferons un programme.

Les opérations de base

Bien évidemment, en C++, on peut faire des additions, des soustractions, des multiplications et des divisions. Ces quatre opérations là, tout le monde les connaît. A celles-ci vient se rajouter une cinquième opération : le calcul du reste de la division euclidienne. Je m'en vais illustrer tout ça. Je vous rappelle qu'il existe une annexe sur Les opérateurs, que vous pourrez consulter pour plus de détails. Je ne m'atarderais pas plus que ça sur les 4 premières opérations, tant elles sont basiques et bien connues. Je rappellerais juste que pour la division, il faut s'assurer que le diviseur soit non nul, sinon il en resulte une erreur et le programme se terminera automatiquement. Autrement dit, si vous écrivez :
a / b
dans votre programme, assurez vous toujours que b est différent de 0.

Venons-en à cette opération de reste de division euclidienne. Elle se fait grâce à l'opérateur modulo %. L'opération
a % b
calcule le reste de la division de a par b. Ainsi, par exemple, le résultat de
13 % 5
est 3, car 13 = 2*5 + 3. Par contre, le résultat de
15 % 5
est 0 car15 est un multiple de 5 (15 = 3*5 + 0)!

L'opérateur modulo est très pratique pour savoir par exemple si un nombre est pair ou impair, ou si il est le multiple d'un autre.

Les variables

Bien sûr, il n'est pas très intéressant de faire un programme qui fasse à chaque fois le même calcul. Ce qui nous intéresserait d'avantage serait de pouvoir faire varier quelques valeurs, pour adapter à chaque fois le calcul. D'où l'utilisation de variables.

Une variable est un nombre qu'on désigne par son nom. Le fait de désigner ce nombre par son nom fait qu'on peut en changer la valeur. Prenons un exemple :
int a = 5;
Cette ligne crée une nouvelle variable appelée a, qui ne peut contenir que des valeurs entières (c'est la signification du mot clé int). Cette variable a, après cette ligne, contient la valeur 5. Si après, on écrit :
a + 3
le résultat est 8. Pour l'instant, c'est facile!

Il se peut après, qu'on ait envie de changer la valeur de a (après tout, c'est une variable!). Ceci se fait tout simplement en écrivant quelque chose comme ceci :
a = nouvelle valeur;
Voici quelques exemples:

a = 10;
a = 5 + 8;
a = b + c;
a = a + 1;

  • Tout d'abord, notez bien que le mot clé int n'apparaît plus : la variable a a déjà été créée, et remettre int serait une erreur : cela voudrait dire que nous voulons créer une autre variable, de type int et qui porte le nom a, alors qu'il existe déjà une variable appelée a.
  • Dans le troisième exemple, on assume que les variables b et c ont également été créées au préalable, sinon le compilateur vous dirait que b et c ne sont pas définies, ce qui est une autre erreur.

Les trois premiers exemples sont évidents. Le troisième vous montre qu'on peut utiliser d'autres variables pour affecter une valeur.

Le quatrième exemple est plus exotique : on utilise la valeur de a pour donner une nouvelle valeur à a. Si on avait a = 5 avant cette ligne, on aurait a = 6 après. Dans ce cas précis, on dit qu'on a incrémenté la variable a, c'est-à-dire qu'on lui a rajouté 1 (c'est une opération très courante en programmation). De la même façon, on aurait pu multiplier sa valeur par 2 en écrivant :
a = a * 2;

Il existe quelques conventions pour les noms de variables. Celles-ci sont décrites dans l'annexe Conventions nominatives.

Saisie d'une valeur

Cependant, on en revient presque au même problème que tout-à-l'heure : l'exécution d'un tel programme produirait à chaque fois le même résultat. Et si on avait envie de péciser soi-même la valeur d'une variable au moment de l'exécution? Il faut alors faire la saisie de la valeur d'une variable, grâce à l'instruction cin (notez la resemblance avec l'instruction cout!). Voici un petit exemple pour vous illustrer ceci :

int a;
cin >> a;
cout << "Le double vaut: " << (a * 2) << '\n';

Que font ces trois lignes?

Tout comme cout, cin est défini dans le fichier iostream.h.

Revenons un peu sur l'instruction cout: contrairement à la dernière fois, où nous n'affichions qu'une chaîne de caractères, cette fois ci, nous affichons à la suite une chaîne de caractères, une valeur numérique, puis un caractère. Les deux premières seront affichées l'une à la suite de l'autre, et le caractère '\n' effectura un retour à la ligne. L'instruction cout a1 << a2; veut donc dire quelque chose comme: à la suite de a1, afficher a2.

Notez qu'un caractère s'écrit différemment d'une chaîne de caractères : on utilise l'apostrophe au lieu de guillemets. Cependant, on aurait très bien pu noter "\n", ce qui aurait fait une chaîne de caractères contenant un seul caractère. Par contre, écrire 'ab' est une erreur, car on ne peut écrire plus d'un caractère, et dans ce cas là il faut utiliser "ab".

Les types de variables

Pour l'instant, nous n'avons utilisé que des variables de type int, c'est-à-dire des variables ne pouvant contenir que des valeurs entières. Il existe cependant 7 types fondamentaux en C++ qui se divisent en 3 catégories :

Tous ces types peuvent être déclarés signés (les entiers et les réels le sont par défaut) ou non signés avec les mots clés signed et unsigned. Voici quelques exemples de déclarations de variables :
int a;
signed char b;
long double c;
float d;
unsigned short int e;

Les valeurs maximales pour ces 7 types ainsi que leur taille en mémoire sont dicutées dans l'annexe Les types de variables.

Afin de vous laisser le temps de digérer un peu tout ça, je ne vais pas aller plus loin dans la description des types fondamentaux. Les précisions dont nous aurons besoins, nous les verrons en temps voulu plus tard. Nous utiliserons plutôt les int, les double et les char, les autres types étant un peu moins utilisés.

Cependant, voici les 7 types qui peuvent être utilisés pour déclarer une variable. Je vous rappelle que pour utiliser une variable, il faut la déclarer exactement une fois. En C++, si aucune valeur n'est précisée lors de la déclaration (comme dans le premier exemple du paragraphe Les variables), la variable vaut 0 par défaut.

    Vous avez peut-être constaté que cette page ne contient pas de liens vers les définitions des divers types de variables que nous avons présenté aujourd'hui. En effet, ces définitions contiennent des notions que nous n'avons pas encore vu (notamment l'occupation de la mémoire). Cependant, nous verrons tout ceci bien assez tôt, et vous serez alors en mesure de profiter pleinement de ces définitions.

Le programme

Pour illustrer tout ce que nous avons vu aujourd'hui, nous allons faire un petit programme qui calcule la moyenne de trois nombres. Les trois nombres sont saisis pas l'utilisateur, et le programme en affiche la moyenne arithmétique.

1
2
3

4

5

6
7

8
9

10
11

12
13

14
15
16
17

18

19

#include <iostream.h>
main()
{

    double a, b, c;

    cout << "Calcul de la moyenne de 3 nombres:\n";

    cout << "Entrez le premier nombre: ";
    cin >> a;

    cout << "Entrez le second nombre: ";
    cin >> b;

    cout << "Entrez le troisieme nombre: ";
    cin >> c;

    double moyenne = (a + b + c) / 3;
    cout << "La moyenne des trois nombres vaut: " << moyenne << '\n';

    a = a + 2;
    b = b - 1;
    c = c * 2;
    moyenne = (a + b + c) / 3;

    cout << "La nouvelle moyenne des trois nombres vaut: " << moyenne << "\n";

}

Procédons à l'analyse du programme.

La ligne 4 nous montre qu'on peut initialiser plusieurs variables en une instruction : a, b et c sont toutes les trois de type double. Comme aucune valeur n'est précisée, elles valent toutes 0. Si je les ai déclarées toutes les trois en une ligne, c'était principalement pour vous montrer que c'était possible. Cependant, ce genre de déclarations rendent le programme plus compliqué à lire, et le mieux serait de toutes les déclarer les unes après les autres.

De 5 à 11, ce qui se passe est relativement évident: on saisit les valeurs de a, b et c.

Ligne 12, nous déclarons la variable moyenne, de type double également, et nous lui affectons sa valeur, caculée à partir de a, b et c.

Vous remarquerez que ligne 13 et 18, j'ai utilisé '\n' une fois, et "\n" l'autre fois, pour vous montrer qu'il s'agit de la même chose.

Puis, de 14 à18, nous modifions légèrement les valeurs entrées et nous recalculons la moyenne avec les nouvelles valeurs et nous affichons à nouveau le résultat.

Et si on remplaçait moyenne par (a + b + c) / 3 dans les lignes 13 et 18? Faites-le, et vous verrez que c'est tout à fait possible, et le résultat serait le même. En fait, cette variable ne sert pas réellement à grand chose, mis à part le fait qu'avec son nom, elle justifie sa valeur (on sait qu'il s'agit de la moyenne des trois nombres entrés) et que le programme en devient plus lisible. C'est une histoire de goût.

Voici donc les points importants à retenir de ce cours:

  • Toute variable doit être déclarée avant d'être utilisée.
  • Plusieurs variables du même type peuvent être déclarées en une seule instruction (bien que ce ne soit pas recommandé).
  • Une variable peut recevoir une valeur initiale lors de sa déclaration (préférable).
  • cin et cout servent respectivement à saisir et à afficher des données.

Voici les petits exercices du jour:

  • Que se passe-t-il si vous inversez >> et << ?
  • Changez la déclaration de a, b et c pour en faire des entiers (int). Que se passe-t-il si vous n'entrez pas une valeur entière?
  • Augmentez ce programme pour faire une moyenne pondérée. Il vous faudra pour ça saisir un coefficient pour chaque nombre (par exemple c1, c2 et c3) et le calcul de la moyenne se fait avec la formule:
    moyenne = (a * c1 + b * c2 + c * c3) / (c1 + c2 + c3);
  • Ecrivez un nouveau programme qui saisisse deux nombres réels (de type double) et qui calcule et affiche leur somme, leur différence et leur produit.

La prochaine fois, nous entrerons plus dans les détails avec le calcul, et nous verrons les expressions et les opérateurs. Nous reviendrons aussi sur l'opération d'incrémentation, si importante en informatique. Ah! oui, nous verrons également comment commenter nos programmes (très important!!!).


Voir aussi: Les opérateurs - Conventions nominatives - Les types de variables