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#

Programme : suite d’instructions exécutées de manière séquentielle (les unes après les autres)

Exemple :

    debut();
    droite();
    avance();
    prend();
    gauche();
    avance();
    pose();
    droite();
    avance();
    gauche();
    avance();
    avance();
    droite();
    ouvre();

Comment rompre la monotonie?#

  • Faire des calculs : expressions et variables

  • Découper en petits programmes : les fonctions

  • S’adapter au contexte : les instructions conditionnelles

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

Expressions#

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

Exemple: 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

Aparté : syntaxe, sémantique, algorithme#

  • Syntaxe : comment on l’écrit

  • Sémantique : ce que cela fait

  • Algorithme : comment c’est fait

Exemple :

  • Syntaxe : 17 / 5

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

  • Algorithme : division euclidienne

Expressions booléennes#

Définition :

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

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#

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\) m/s.

1./2 * 14.5 * 1 * 1
1./2 * 14.5 * 10 * 10
1./2 * 14.5 * 10 * 10
1./2 * 14.5 * 100 * 100
double v;
double m;
v = 1000;
m = 14.5;
1.0/2.0 * m * v * v

Définition#

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 …

Notes#

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, …

Définition :

  • 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

Les types de base#

Les différents 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 caractères (mot clé char)
    Exemples : “a”, “b”, “ “, “]”

  • 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, ...;

Exemples :

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;

Exemple :

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

⚠️ 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 qui a une valeur booléenne (vrai ou faux) :

«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.

Comment éviter de retaper chaque fois la formule?

Fonctions#

Définition informelle :

Une fonction est un petit programme :

  • Entrées

  • Traitement

  • Sortie

Exemple :

double energie_cinetique(double m, double v) {
    return 0.5 * 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 : 0.5 * m * v * v

Autres exemples de fonctions#

Chou-Chèvre-Loup :

void transporter(... T) {
    charger(T);
    traverser();
    decharger(T);
}

Laby :

void avance_tant_que_tu_peux() {
    while ( regarde() == Vide ) {
        avance();
    }
}

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 :

../../_images/laby0.png
          droite();
          avance();
          prend();
          gauche();
          avance();
          pose();
          droite();
          avance();
          gauche();
          avance();
          avance();
          droite();
          ouvre();

Le problème#

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

  • Des instructions différentes selon le contexte :

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

    Un labyrinthe tout en longueur

Ce sont les 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")
droite();
avance();
gauche();

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

Définition : bloc 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 considérée comme un bloc

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

Exemples :

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#

Exemple :

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;
}

Résumé#

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

  • Expressions, valeurs et types

  • Variables (affectation ≠ égalité!)

  • Fonctions

  • Conditionnelles (if)

On reviendra dessus!