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.

float v;
float m;
v = 100;
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;
float 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 += 1
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):

«Est-ce que 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:

float energie_cinetique(float m, float 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

Laby:

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

Chou-Chèvre-Loup:

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

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/laby3a1.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’instruction.

#include <laby/global_fr.hpp>
LABY("3a")
debut();
droite();
avance();
gauche();
if (  regarde() == Toile ) {
    gauche();
    avance();
    
    
} else {
    avance();
    
    
}

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’instruction

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

Instructions itératives

Instructions itératives: exemple

#include <laby/global_fr.hpp>
LABY("2a")
avance();
avance();
avance();
avance();
avance();
avance();
avance();
avance();
avance();
avance();
avance();
ouvre();
debut();
while ( regarde() == Vide ) {
    avance();
}
ouvre();

Rappel:

La force d’un ordinateur est de savoir faire des tâches répétitives très rapidement et sans s’ennuyer

  • On veut afficher tous les nombres entre 1 et 1000.

  • Dans un jeu sur ordinateur, à la fin d’une partie, on veut demander «voulez vous rejouer?» et si oui recommencer une nouvelle partie.

  • Tous les 1/24ème de seconde on veut afficher une image d’un film (s’il en reste)

Les instructions itératives

Définition:

Les instructions itératives permettent de répéter un certain nombre de fois l’exécution d’un bloc d’instructions sous certaines conditions

De façon imagée, on appelle boucle cette méthode permettant de répéter l’exécution d’un groupe d’instructions.

Instructions itératives:

  • Boucles while: «tant que … faire …»

  • Boucles do … while: «Faire … tant que …»

  • Boucles for: «Pour … de … à … faire …»

La boucle while: «tant que … répéter …»

Syntaxe:

while ( condition ) {
    bloc d´instructions;
}

Sémantique:

  1. Évaluation de la condition

  2. Si la valeur est true:

    1. Exécution du bloc d’instructions

    2. On recommence en 1.

La boucle while: exemple

Exemple: Compter de 1 à 5

#include <iostream>
using namespace std;
int n = 1;

while ( n <= 5 ) {
    cout << n << endl;    // Affiche la valeur de n
    n = n + 1;
}

Cas particulier: condition toujours fausse

Si la valeur de la condition est fausse dès le départ, alors le bloc d’instructions ne sera jamais exécuté!

Exemple:

int n = 1;

while ( n < 0 ) {
   cout << n << endl;    // Affiche la valeur de n
   n = n + 1;
}

Cas particulier: condition toujours vraie

Si la valeur de la condition est toujours vraie, alors le bloc d’instructions sera exécuté indéfiniment!

Exemple: Que fait ce programme?

int n = 1;

while ( true ) {
    cout << n << endl;    // Affiche la valeur de n
    n = n + 1;
}

Exemple: Erreur typique: oublier l’incrémentation!

int n = 1;

while ( n <= 10 ) {
    cout << n << endl;    // Affiche la valeur de n
}

Résumé

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

    • Expressions et variables

    • Types

    • Variables (Affectation ≠ Égalité!)

    • Fonctions

    • Conditionnelles (if)

    • Boucles (while)

    On reviendra dessus!