Premiers éléments de programmation impérative#

Prélude#

Résumé des épisodes précédents …#

  • Info 111: modalités et infrastructure

  • Informatique: usage, technologie, science

  • Objectif d’Info 111: initier à la science via la technologie

  • Concrètement: bases de la programmation impérative + …

Rappel#

Definition 52 (Programmes)

Programme : séquence d’instructions qui spécifie étape par étape les opérations à effectuer pour obtenir à partir des entrées un résultat (la sortie).

Example 46

debut()
droite()
avance()
prend()
gauche()
avance()
pose()
droite()
avance()
gauche()
avance()
avance()
droite()
ouvre()
../../_images/laby05.png

Comment rompre la monotonie?#

  • Découper en petits programmes : les fonctions

  • Répéter : les instructions itératives (boucles)

Expressions#

Definition 53 (Expressions)

Expression : combinaison de valeurs par des opérations donnant une nouvelle valeur

Example 47

L’expression 3 * (1 + 3) + (1 + 4) * (2 + 4) vaut 42

Opérations sur les entiers

Opération

Exemple

Résultat

opposé

-(-5)

5

addition

17 + 5

22

soustraction

17 - 5

12

multiplication

17 * 5

85

division entière

17 / 5

3

reste de la division entière

17 % 5

2

Astuce

Aparté : syntaxe, sémantique, algorithme

  • Syntaxe : comment on l’écrit

  • Sémantique : ce que cela fait

  • Algorithme : comment c’est fait

Example 48

  • Syntaxe : 17 / 5

  • Sémantique : calcule la division entière de 17 par 5

  • Algorithme : division euclidienne

Expressions booléennes#

Definition 54 (Expressions booléennes (conditions))

Une expression booléenne est une expression dont la valeur est «vrai» ou «faux» (type : bool).

Une expression booléenne est aussi appelée une condition.

Exemples :

true
false
  • regarde() == Vide

  • x > 3.14

  • 2 <= n  and  n <= 5

Opérations booléennes usuelles

Opération

Exemple

Résultat

comparaison

3 <= 5

true

comparaison stricte

3 < 5

true

comparaison stricte

3 > 5

false

égalité

3 == 5

false

inégalité

3 != 5

true

négation

not 3 <= 5

false

et

3 < 5 and 3 > 5

false

ou

3 < 5 or  3 > 5

true

Variables#

1. / 2 * 14.5 * 1 * 1
1. / 2 * 14.5 * 10 * 10
1. / 2 * 14.5 * 100 * 100
1. / 2 * 14.5 * 1000 * 1000 

Qu’est-ce qui n’est pas satisfaisant?

double v;
double m;
v = 1000;
m = 14.5;
1. / 2 * m * v * v

Definition 55 (Variables)

Une variable est un espace de stockage nommé où le programme peut mémoriser une donnée

Le nom de la variable est choisi par le programmeur

  • Objectif : stocker des informations durant l’exécution d’un programme

  • Analogie : utiliser un récipient pour stocker des ingrédients en cuisine :

    • Verser le sucre dans un saladier

    • Ajouter la farine dans le saladier

    • Laisser reposer

    • Verser le contenu du saladier dans …

À retenir

En C++, une variable possède quatre propriétés :

  • un nom (ou identificateur)

  • une adresse
    à préciser la semaine prochaine

  • un type

  • une valeur

La valeur peut changer en cours d’exécution du programme (d’où le nom de variable)

Notion de type#

Les variables peuvent contenir toutes sortes de données différentes :

  • nombres entiers, réels, booléens, …

  • textes

  • relevés de notes, images, musiques, …

Definition 56 (Types)

  • Une variable C++ ne peut contenir qu’une seule sorte de données.

  • On appelle cette sorte le type de la variable.

  • On dit que C++ est un langage typé statiquement.

Definition 57 (Types de base)

Les types de base en C++ sont :

  • Les entiers (mots clés int, long int)
    Exemples : 1, 42, -32765

  • les réels (mots clés float, double)
    Exemples : 10.43, 1.0324432e22

  • les chaînes de caractères (mot clé string)
    Exemples : « bonjour », « Alice aime Bob »

  • les booléens (mot clé bool)
    Exemples : true (vrai), false (faux)

Les entiers, les caractères et les booléens forment les types ordinaux.

La déclaration des variables#

Pour chaque variable, il faut donner au programme son nom et son type. On dit que l’on déclare la variable.

Syntaxe : déclaration des variables

type nomvariable;
type nomvariable1, nomvariable2, ...;

Example 49

int x, y, monEntier;
double f, g;
bool b;

Note : en C++ (compilé) on ne peut pas redéclarer une variable avec le même nom!

L’affectation#

Syntaxe

identificateur = expression;

Example 50

x = 3 + 5;

Sémantique

  • Calcul (ou évaluation) de la valeur de l’expression

  • Stockage de cette valeur dans la case mémoire associée à cette variable.

  • La variable et l’expression doivent être de même type!

Exemples d’affectations#

int x, y;

On affecte la valeur 1 à la variable x :

x = 1;

On affecte la valeur 3 à la variable y :

y = 3;

Valeurs des variables après l’affectation :

x
y

Exemple : affecter la valeur d’une variable à une autre variable

x = y;
x
y

Note

  • Affectation x = y : copie de la valeur

  • y garde sa valeur

  • L’ancienne valeur de x est perdue!

  • Différent de transférer un ingrédient d’un récipient à l’autre

Exemple : incrémentation

int x; x = 1;

x = x + 1;
x

Variantes :

x -= 2;
x
x++;
x

Quelques raccourcis pratiques

Syntaxe

Sémantique

Syntaxe équivalente

x += a

Incrémenter x de a

x = x + a

x -= a

Décrémenter x de a

x = x - a

x++

Incrémenter x

x = x + 1

x--

Décrémenter x

x = x - 1

Avertissement

Affectation et égalité : deux concepts différents

  • L’affectation x = 5 :

    Une instruction modifiant l’état de la mémoire.

  • Le test d’égalité x == 5 :

    Une expression booléenne (valeur vrai ou faux) :

    « x est égal à 5? »

    Autrement dit : est-ce que la valeur contenue dans la variable x est 5?

Fonctions#

Retour sur notre exemple :

Calculer l’énergie cinétique \(\frac12 m v^2\) d’un objet de masse \(14,5\) kg selon qu’il aille à \(1\), \(10\), \(100\), ou \(1000\) km/h.

Voilà comment nous avions procédé :

m = 14.5;
v = 100;
1. / 2 * m * v * v

Comment éviter de retaper chaque fois la formule?

Fonctions#

Definition 58 (Fonctions)

Informellement, une fonction est un petit programme :

  • Entrées

  • Traitement

  • Sortie

Exemple :

double energie_cinetique(double m, double v) {
    return 1. / 2 * m * v * v;
}
energie_cinetique(14.5, 10)
  • Entrées : la masse et la vitesse (des nombres réels)

  • Sortie : l’énergie cinétique (un nombre réel)

  • Traitement : 1. / 2 * m * v * v

Autres exemples de fonctions#

Structures de contrôle#

Rôle des structures de contrôle#

Rappel#

Les instructions sont exécutées de manière séquentielle (les unes après les autres), dans l’ordre du programme.

Exemple :

debut()
droite()
avance()
prend()
gauche()
avance()
pose()
droite()
avance()
gauche()
avance()
avance()
droite()
ouvre()
../../_images/laby05.png

Le problème#

On a souvent besoin de rompre l’exécution séquentielle :

  • Des instructions différentes selon le contexte :

    Le labyrinthe 3a avec petite et grande toile
  • Des instructions répétées :

    Un labyrinthe tout en longueur

Nous avons besoin des structures de contrôle.

Instructions conditionnelles#

En fonction d’une condition, on va exécuter ou non un bloc d’instructions.

#include <laby/global_fr.hpp>
LABY("3a")
debut();
droite();
avance();
gauche();

Solution complète :

LABY("3a")
debut()
droite();
avance();
gauche();

if ( regarde() == Toile ) {
    gauche();
    avance();
    avance();
    droite();
    avance();
    avance();
    droite();
    avance();
    gauche();
} else {
    avance();
    avance();
    gauche();
    avance();
    droite();
}
ouvre();

Definition 59 (Blocs d’instructions)

Un bloc d’instructions est une suite d’instructions à exécuter successivement. Il est décrit par la syntaxe suivante :

{
    instruction 1;
    instruction 2;
    ...
    instruction n;
}

Une instruction toute seule est aussi considérée comme un bloc d’instructions.

Instruction conditionnelle simple : «si … alors …»#

Syntaxe :

if ( condition ) {
    bloc d instructions;
}

Sémantique

  1. Évaluation de la condition

  2. Si sa valeur est vraie, exécution du bloc d’instructions

Example 51

if ( regarde() == Toile ) {     // Au secours, fuyons!
    gauche();
    gauche();
}
if ( x >= 0 ) gauche();

Instruction conditionnelle : «si … alors … sinon …»#

Syntaxe

if ( condition ) {
    bloc d instructions 1;
} else {
    bloc d instructions 2;
}

Sémantique

  1. Évaluation de la condition

  2. Si sa valeur est «Vrai», exécution du bloc d’instructions 1

  3. Si sa valeur est «Faux», exécution du bloc d’instructions 2

Exemples d’instruction alternative#

Example 52

if ( regarde() == Toile ) {     // Au secours, fuyons!
    gauche();
    gauche();
} else {                        // Tout va bien
    avance();
}

Exemples d’instruction alternative (2)#

Exemple : Calcul du maximum et du minimum de x et y

int x = 3, y = 5;              // Les entrées
int maximum, minimum;          // Les sorties

if ( x > y ) {
    maximum = x;
    minimum = y;
} else {
    maximum = y;
    minimum = x;
}
minimum
maximum

Résumé#

Un aperçu de premiers éléments de programmation :

On reviendra dessus!