Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Introduction

Langages de programmation

Compilation

  • Analyse lexicale : Cela permet d'isoler chaque mot et de le qualifier (est-ce un mot réservé du langage, est-ce une valeur, un identificateur ?).
  • Analyse syntaxique : Cela permet de vérifier que l'enchainement des mots est valide par rapport à la grammaire du langage.
  • Analyse sémantique : Cela permet de vérifier que les types des variables sont respectés ou qu'elles ont été bien déclarées par exemple.

Les chaînes de caractères

Affichage

afficher('Hello World !');

Saisie

lire(nom);

afficher('Quel est votre nom ?');
lire(nom);
afficher('Bonjour ' + nom + ' !');
                        

Variables et types

afficher('Quel est votre nom ?');
lire(nom);
afficher('Bonjour ' + nom + ' !');
afficher('Rappelez-moi votre nom ?');
lire(nom);
afficher('OK ! Bonjour ' + nom + ' !');
afficher('Bonjour ' + 'nom' + ' !');
                            

Déclarations de variables

nom : chaîne;


afficher('Quel est votre nom ?');
lire(nom);
afficher('Bonjour ' + nom + ' !');

Initialisation et affectation de variables

msg : chaîne;
ch : chaîne;
msg := 'Bonjour ';
afficher('Quel est votre prénom ?');
lire(ch);
msg := msg + ch + ' ';
afficher('Quel est votre nom ?');
lire(ch);
msg := msg + ch + ' !';
afficher(msg);

Type entier

nombre : entier;
afficher('Nombre entre 1 et 10');
lire(nombre);
afficher('Carré : ' + nombre*nombre);

Type réel

nbEntier, deux, cinq, dix : entier;
nbReelFini, nbReelNonFini : réel;

dix := 10;
cinq := 5;
deux := 10 / 5;=> 
nbEntier := cinq / deux;=> 2
nbReelFini := cinq / deux;=> 2.0
nbReelFini := cinq / nbReelFini;=> 2.5
nbReelNonFini := 2.0 / 3;=> 

Type structuré

type personne = structure 
    nom : chaîne;
    prenom : chaîne;
    âge : entier;
fin;

p : personne;
p.nom := 'Pierre-Julien';
p.prenom := 'Villoud';
p.âge := 32;

Exercice

Conditions et itérations

Condition

nombre : entier;
afficher('Pair ou impair ? Entre un nombre : ');
lire(nombre);
Si nombre est pair on exécute l'instruction suivante
     afficher(nombre + ' est pair !');
Sinon, on exécute l'instruction suivante
     afficher(nombre + ' est impair !');

Itération

x, y, resultat : entier;
afficher('On souhaite calculer x ^ y. Entrer x : ');
lire(x);
afficher('Entrer y');
lire(y);
resultat := 1;
Exécuter l'instruction suivante y fois
     resultat := resultat * x;

afficher(x + ' ^ ' + y + ' = ' + resultat);

Conditions

si condition alors
    instructions...
finsi

si condition alors
    instructions...
sinon
    instructions...
finsi

si condition alors
    instructions...
sinon si condition alors
    instructions...
sinon
    instructions...
finsi
si x = 0 alors
    afficher('x est nul !');
finsi

si x < 0 alors
    afficher('x est négatif !');
sinon
    afficher('x est positif ou nul !');
finsi

si x < 0 alors
    afficher('x est négatif !');
sinon si x > 0 alors
    afficher('x est positif !');
sinon
    afficher('x est nul !');
finsi

Expressions booléennes (1/2)

Négation

La négation permet d'inverser la condition.

non A
        non x = 0 
        équivalent à x ≠ 0  ou  x != 0
A non A
vrai faux
faux vrai

Intersection

Le résultat d'une intersection est vrai lorsque les deux opérandes sont vrais.

A et B
        x > 0 et x ≤ 4 (ou x <= 4)
        est vrai si x est compris entre 1 et 4,
        faux sinon
A B A et B
vrai vrai vrai
vrai faux faux
faux vrai faux
faux faux faux

Expressions booléennes (2/2)

Union

L'union permet de s'assurer qu'au moins un des deux opérandes est vrai.

A ou B
autorisationParentale : booléen;
age >= 18 ou autorisationParentale
 
A B A ou B
vrai vrai vrai
vrai faux vrai
faux vrai vrai
faux faux faux

Union exclusive

L'union exclusive permet de s'assurer qu'un et un seul des deux opérandes est vrai.

A xou B
fromage, dessert : booléen;
fromage xou dessert
A B A xou B
vrai vrai faux
vrai faux vrai
faux vrai vrai
faux faux faux

Itérations

tantque condition faire
    instructions
finfaire;

resultat, x, y, i : entier;
afficher('On souhaite calculer x ^ y. Entrer x : ');
lire(x);
afficher('Entrer y');
lire(y);
resultat := 1;
i := 1;
tantque i <= y faire
    resultat := resultat * x;
    afficher('Calcul... ' + x + ' ^ ' i + ' = ' + resultat);
    i := i + 1;
finfaire;
afficher(x + ' ^ ' y + ' = ' + resultat);

Exercice

Procédures et fonctions

Procédure

Une procédure est simplement un regroupement d'instructions.

procédure bonjour
debproc
    afficher('Quel est votre nom ?');
    lire(nom);
    afficher('Bonjour ' + nom + ' !');
finproc;

...

bonjour;

Fonction

Une fonction est un regroupement d'instructions mais qui renvoie un résultat qui peut être stocké dans une variable ou utilisé directement dans une instruction.

fonction majeur(âge : entier) : booléen
debfonc
    si âge < 18 alors
        retour faux;
    sinon
        retour vrai;
    finsi;
finfonc;
...
estmajeur := majeur(25);vrai
si majeur(12) alors...faux

Paramètres

fonction saisieNombre() : entier
nombre : entier;
debfonc
    afficher('Entrer un nombre !');
    lire(nombre);
    retour nombre;
finfonc;

procédure calculPuissance(message : chaîne)
x, y : entier;
debproc
    afficher(message);
    x = saisieNombre();
    y = saisieNombre();
    afficher(x + ' ^ ' + y + ' = ' + puissance(x,y));
finproc;
fonction puissance(a : entier, b : entier) : entier
resultat, i : entier;
debfonc
    resultat := 1;
    i := 1;
    tantque i <= b faire
        resultat := resultat * a;
        i := i + 1;
    finfaire;
    retour resultat;
finfonc;

calculPuissance('Calcul de x ^ y : ');

Exercice

Les vecteurs

  • Liste de présence => Vecteur de chaînes de caractère
  • Les employés d'une entreprise => Vecteur d'un type structuré employe
  • Les livres d'une bibliothèque => Vecteur d'un type structuré livre
  • ...

Représentation graphique

  • Appolinaire Guillaume
  • Aragon Louis
  • ...
  • Eluard Paul
  • Auteur : Appolinaire Guillaume
  • Titre : Calligrammes
  • Publié en : avril 1918
  • Editeur : Mercure de France
  • Auteur : Aragon Louis
  • Titre : Les Beaux Quartiers
  • Publié en : octobre 1936
  • Editeur : Denoël
...
  • Auteur : Eluard Paul
  • Titre : Capitale de la douleur
  • Publié en : septembre 1936
  • Editeur : Denoël

Vocabulaire

  • Ensemble des éléments : Cela correspond à l'ensemble des cases du vecteur.
  • Taille : Cela correspond au nombre d'éléments du vecteur.
  • Ensemble des indices : Cela correspond à l'ensemble des numéros des cases du vecteur (parfois de 1 à taille, mais généralement de 0 à taille - 1). L'indice le plus petit est appelé borne inférieure, le plus grand borne supérieure.
  • Parcours : Lorsqu'on effectue un traitement sur chaque élément d'un vecteur, du premier au dernier.
  • Accès direct : Lorsqu'on veut obtenir la valeur située à un indice donné.
  • Tri : Permet de trier les éléments du tableau selon un critère particulier.
  • Recherche : Lorsqu'on veut rechercher une valeur dans un tableau.
  • Sous-vecteur : Cela représente un sous-ensemble d'un vecteur.

Déclaration et initialisation d'un vecteur

v : entier[];
a : chaine[];
t : booleen[];

v := entier[5];
v := entier[3];

Accès direct

v : entier[];
nb, taille : entier;
v := entier[5];

nb := v[0];
v[4] := 12;
nb := v[4];
taille := longueur(v);
nb := v[5];

Parcours séquentiel d'un vecteur

v : entier[];
...
i : entier;
i := 0;
tantque i < longueur(v) faire
    faireQuelqueChoseSur(v[i]);
    i := i + 1;
finfaire;
v : entier[];
...
i : entier;
pour i := 0 à longueur(v) - 1 faire
    faireQuelqueChoseSur(v[i]);
finfaire;

Recherches dans un vecteur

  • Recherche séquentielle dans un vecteur non trié : Puisque le vecteur n'est pas trié, nous sommes obligés de parcourir tous les éléments du vecteur jusqu'à la fin si l'élément n'est pas trouvé dans le vecteur, ou jusqu'à ce qu'on rencontre cet élément.
  • Recherche séquentielle dans un tableau trié : Grâce au tri, on peut s'arrêter de chercher si l'élément recherché est supérieur à l'élément lu puisque tous les éléments suivants du vecteur seront supérieurs.
  • Recherche dichotomique dans un tableau trié : Cet algorithme partitionne le vecteur sur lequel on travaille en 3. Un sous-vecteur contenant les indices 1 à m - 1, un sous-vecteur d'un seul élément d'indice m et un autre sous-vecteur contenant les indices m + 1 à n. On regarde si l'élément recherché est situé à l'indice m, si ce n'est pas le cas, on réitère la recherche sur le premier sous-vecteur si l'élément recherché est inférieur à l'élément d'indice m, ou sur le dernier sous-vecteur si l'élément recherché est supérieur à l'indice m.

Tri d'un vecteur

  • Tri par remplacement : Cet algorithme sélectionne le minimum du vecteur d'origine à chaque itération, le ranger dans un nouveau vecteur que l'on construit et le remplace par une valeur maximum dans le vecteur d'origine pour qu'il ne soit plus récupéré.
  • Tri par permutation : Cet algorithme permet d'éviter la construction d'un nouveau vecteur en considérant que le vecteur est séparé en deux sous-vecteurs, le sous-vecteur contenant i éléments dont les éléments ont été triés, et les n - 1 éléments qui restent à trier. A chaque itération, on permute le ième élément avec le minimum du deuxième sous-vecteur.
  • Tri par bulle : Cet algorithme parcourt le sous-vecteur des éléments non triés de droite à gauche, et à chaque fois que deux éléments consécutifs ne sont pas dans l'ordre, on les permute, ce qui permet d'avoir en fin de parcours le plus petit élément du sous-vecteur placé en bonne position. De plus, l'ordre général du sous-vecteur a été amélioré du fait des permutations successives.

Vecteurs à plusieurs dimensions

1 2 3
4 5 6
7 8 9

Parcours séquentiel d'un vecteur à deux dimensions

v : entier[][];
...
i,j : entier;
i := 0;
tantque i < longueur(v) faire
    j := 0;
    tantque j < longueur(v[i]) faire
        faireQuelqueChoseSur(v[i][j]);
        j := j + 1;
    finfaire;
    i := i + 1;
finfaire;
v : entier[][];
...
i; j : entier;
pour i := 0 à longueur(v) - 1 faire
    pour j := 0 à longueur(v[i]) - 1 faire
        faireQuelqueChoseSur(v[i][j]);
    finfaire
finfaire;

Insertions

  • Méthode séquentielle dans un vecteur non trié : On utilisera un algorithme de recherche séquentielle afin de trouver un indice dans le vecteur où il y a une valeur indéfini. Le cas échéant, on place alors l'élément à l'indice.
  • Méthode séquentielle dans un vecteur trié : On utilisera un algorithme de recherche séquentielle dans un vecteur trié afin de trouver l'indice auquel l'élément devrait être placé. Il faut ensuite décalé les éléments supérieurs.
  • Méthode dichotomique dans un vecteur trié : Idem que la méthode précédente sauf qu'on utilise une recherche dichotomique pour trouver l'indice.

Suppressions

  • Méthode séquentielle dans un vecteur non trié : On utilisera un algorithme de recherche séquentielle afin de trouver l'indice de l'élément recherché. S'il existe, on affecte l'élément à la valeur indéfini.
  • Méthode séquentielle dans un vecteur trié : On utilisera un algorithme de recherche séquentielle dans un vecteur trié afin de trouver l'indice de l'élément dans le vecteur. S'il existe on décale les éléments supérieurs vers la gauche
  • Méthode dichotomique dans un vecteur trié : Idem que la méthode précédente sauf qu'on utilise une recherche dichotomique pour trouver l'indice.