Bases de Programmation I Algorithmique

133
DUT Réseaux & Télécommunications 1 ère année IUT d’Aix-Marseille J. Seinturier Laboratoire des Sciences de l’Information et des Systèmes Umr CNRS 7296 Equipe Images & Modèles [email protected] http://www.seinturier.fr Bases de Programmation I Algorithmique

Transcript of Bases de Programmation I Algorithmique

Page 1: Bases de Programmation I Algorithmique

DUT Réseaux & Télécommunications 1ère annéeIUT d’Aix-Marseille

J. Seinturier

Laboratoire des Sciences de l’Information et des SystèmesUmr CNRS 7296

Equipe Images & Modèles

[email protected]://www.seinturier.fr

Bases de Programmation I

Algorithmique

Page 2: Bases de Programmation I Algorithmique

« Un programme informatique est une séquence d'instructionsqui spécifie étape par étape les opérations à effectuer pourobtenir un résultat.»

A. Michael Noll, Principles of modern communications technology, Artech House - 2001

Qu’est-ce qu’une instruction ?

Comment décrire un programme de manière universelle ?

Comment grouper des actions informelles en programme ?

1 / 74

Page 3: Bases de Programmation I Algorithmique

Pour faire du café, il faut placer une dosette dans une cafetière, y mettre del’eau, la faire chauffer puis se servir.

Les instructions sont elles claires?

Le programme est-il répétable ?

Comment placer la dosette dans une cafetière ?

Instructions simples

Pouvant être répétées, partagées

2 / 74

Page 4: Bases de Programmation I Algorithmique

« Un algorithme est une suite finie d'instructions simplespermettant de résoudre un problème donné en un temps fini.»

Le nombre d’instruction doit être limité et connu.

Chaque instruction doit être compréhensible et effectuablepar un humain ou une machine.

Un algorithme doit produire un résultat en temps voulu.

Mise en place d’un cadre standard pour écrire la suite d’instructions.

3 / 74

Page 5: Bases de Programmation I Algorithmique

Délimité par les mots réservés début et fin

algorithme nomdébutinstruction 1…instruction n

fin

Caractérisé par un nom

Exemple:

algorithme additiondébut

1 + 2fin

nom

Instruction 1

4 / 74

Page 6: Bases de Programmation I Algorithmique

Une seule instruction par ligne

Respect des mots réservés (algorithme, début, fin)

Respect de la casse (Algorithme ≠ algorithme)

Ecriture claire et indentation

Exemple:

algorithme nouvel_algodébutinstruction 1instruction 2

fin

Exemple:

algorithme nouvel algoDébutinstruction 1 instruction 2FIN

5 / 74

Page 7: Bases de Programmation I Algorithmique

Première nature d’un algorithme: faire des calculs

Instructions de base: opérations numériques binaires

Exemple:

algorithme opérationsdébut1 + 53 % 124 - 6

fin

Addition: +

Soustraction: -

Multiplication: ×

Division (quotient): /

Modulo (reste): %

Opérations pouvant être groupées en une instruction grâce aux parenthèses

((2 + 3) × 7) - 1

6 / 74

1 instruction

Page 8: Bases de Programmation I Algorithmique

Conserver des données entre plusieurs instructions

Donner des noms à des valeurs particulières

Nom (ou étiquette, comment identifier la variable)

Type (de quel type est la données stockée dans la variable)

Valeur (donnée elle même)

7 / 74

Page 9: Bases de Programmation I Algorithmique

Toutes les variables d’un algorithme doivent être déclarées dans une section données située au début de l’algorithme.

Syntaxe de déclaration de variable: nom: type

Exemple:

algorithme algo1données

résultat: entierarg1: entier

début…

fin

Deux variables entières déclarées

nom commence par une lettre et ne contient que lettres et chiffres.

type est un type prédéfini.

8 / 74

Page 10: Bases de Programmation I Algorithmique

Nombres:entier – Nombres entier relatifs (1, 2, 109 867, 0, -12, …)réel – Nombres réels relatifs (1.5, 3.6, …)

Logique:booléen – valeur de vérité (vrai, faux)

Textuelle:caractère – lettre, chiffre entourés de côtes (‘A‘, ‘2‘, …)

chaine – chaine de caractères entourés de guillemets ("Bonjour" , …)

9 / 74

Page 11: Bases de Programmation I Algorithmique

Affection d’une valeur à une variable nom ← valeur

Considéré comme une instruction de l’algorithme.

Une variable peut être utilisée comme une valeur normale.

Le résultat d’opération numérique peut être affecté.

Exemple:

algorithme additiondonnées

résultat: entierdébut

résultat ← 0résultat ← 1 + 2 résultat ← résultat + 5

fin

Affecte une valeurAffecte un résultatd’opération Incrémentation d’une variable

10 / 74

Page 12: Bases de Programmation I Algorithmique

Un algorithme est destiné à produire des données en sortie à partir de données passées en entrée.

Exemple:

Algorithme qui calcule la somme de deux nombres donnés par unutilisateur.

Par convention un algorithme peut avoir: Un nombre quelconque d’entrées; Une seule sortie.

Les entrées et la sortie d’un algorithme sont traitées comme des variables.

11 / 74

Page 13: Bases de Programmation I Algorithmique

Les variables d’entrées d’un algorithme doivent être déclarées dans la section entrées située au début de l’algorithme.La variable de sortie d’un algorithme doit être déclarée dans la section sortie située au début de l’algorithme.Par convention la section entrées précède la section sortie.

Exemple:

algorithme addition_paramentrées

a: entierb: entier

sortierésultat: entier

débutrésultat ← a + b

fin

12 / 74

Page 14: Bases de Programmation I Algorithmique

Il est possible de réaliser des entrées / sorties vers des variables dans un algorithme en utilisant des instructions spécifiques:

entrée: lire() – retourne une valeur demandée à l’utilisateur;

sortie: ecrire(nom) – écrit la variable identifiée par nom.

Exemple:

algorithme addition_iodonnées

a: réel b: réelrésultat: entier

débuta ← lire() b ← lire()résultat ← a + b ecrire(résultat)

fin

L’utilisateur entre la valeur de aL’utilisateur entre la valeur de b

Affichage du résultat

13 / 74

Page 15: Bases de Programmation I Algorithmique

Opérations ou calcul (+, -, ×, /, %)Peuvent être utilisées comme des valeurs;Peuvent être associées et imbriquées à l’aide de parenthèses ( et );

Ont les mêmes propriétés algébriques qu’en mathématiques.

Exemple:

algorithme moyennedonnées

a: réel b: réel

débuta ← lire() b ← lire()ecrire((a + b)/2)

finExpression composée utilisée comme valeur

14 / 74

Page 16: Bases de Programmation I Algorithmique

Un algorithme peut être lui-même une instruction

Il est appelé en utilisant son nom et ses variables d’entréeavec la syntaxe: nom(var1, var2, …, varn)

Chaque variable vari doit être remplacée par sa valeur dans l’ordre de déclaration des données de l’algorithme nom;

Si l’algorithme appelé possède une variable de sortie, alors il peut être utilisé comme une valeur et être affecté à une autre variable.

myvar: typemyvar ← nom(var1, var2, …, varn)

15 / 74

Page 17: Bases de Programmation I Algorithmique

algorithme addition_paramentrées

a: entierb: entier

sortierésultat: entier

débutrésultat ← a + b

fin

algorithme moyennedonnées

alpha: entier beta: entier m: réel

débutalpha ← lire() beta ← lire()m ← addition_param(alpha, beta)m ← m / 2ecrire(m)

fin

16 / 74

Page 18: Bases de Programmation I Algorithmique

algorithme addition_paramentrées

a: entierb: entier

sortierésultat: entier

débutrésultat ← a + b

fin

algorithme moyennedonnées

alpha: entier beta: entier m: réel

débutalpha ← lire() beta ← lire()m ← addition_param(alpha, beta)m ← m / 2ecrire(m)

fin

1. Appel de l’algorithme addition_paramcomme une instruction de moyenne.

16 / 74

Page 19: Bases de Programmation I Algorithmique

algorithme addition_paramentrées

a: entierb: entier

sortierésultat: entier

débutrésultat ← a + b

fin

algorithme moyennedonnées

alpha: entier beta: entier m: réel

débutalpha ← lire() beta ← lire()m ← addition_param(alpha, beta)m ← m / 2ecrire(m)

fin

2. Utilisation de la valeur de alpha comme entrée aet de la valeur de beta comme entrée b.

16 / 74

Page 20: Bases de Programmation I Algorithmique

algorithme addition_paramentrées

a: entierb: entier

sortierésultat: entier

débutrésultat ← a + b

fin

algorithme moyennedonnées

alpha: entier beta: entier m: réel

débutalpha ← lire() beta ← lire()m ← addition_param(alpha, beta)m ← m / 2ecrire(m)

fin3. La valeur de résultat est affectée à la

variable m à la fin de l’algorithme

16 / 74

Page 21: Bases de Programmation I Algorithmique

algorithme addition_paramentrées

a: entierb: entier

sortierésultat: entier

débutrésultat ← a + b

fin

algorithme moyennedonnées

alpha: entier beta: entier m: réel

débutalpha ← lire() beta ← lire()m ← addition_param(alpha, beta)m ← m / 2ecrire(résultat)

fin

1. Appel de l’algorithme addition_paramcomme une instruction de moyenne.

2. Utilisation de la valeur de alpha comme entrée aet de la valeur de beta comme entrée b.

3. La valeur de résultat est affectée à lavariable m à la fin de l’algorithme

16 / 74

Page 22: Bases de Programmation I Algorithmique

Lorsque l’on utilise un algorithme comme une fonction:Les types des entrées / sorties de l’algorithme fonction et de celui qui l’appelle doivent être compatibles;

On ne peut affecter un algorithme qui n’a pas de sortie à une variable;

Il faut passer le bon nombre de variables d’entrées à l’algorithme appelé;

algorithme affiche_chainesentrées

a: chaineb: chaine

débutecrire(a)ecrire(b)

fin

algorithme moyennedonnées

alpha: entier beta: entier m: réel

débutm ← affiche_chaines(alpha, beta, theta)ecrire(m)

fin Pas de sortie

Mauvais type

# variables

17 / 74

Page 23: Bases de Programmation I Algorithmique

Un algorithme est une suite linéaire d’instruction

Changer de comportement dans des cas particuliers ?

Exemple:

La valeur absolue |X| d’un nombre est X s’il est positif ou –X s’il est négatif (|2| = 2 mais |-2| = -1 × -2 = 2)

En langage naturel, utilisation de si alors … sinon …

Exemple:

Si X est positif alors |X| = X sinon |X| = -X.

18 / 74

Page 24: Bases de Programmation I Algorithmique

Définition d’un bloc conditionnel

si condition alorsinstruction1… instructionn

sinoninstruction1… instructionm

finsi

Mots réservés: si, alors, sinon, finsi

Le bloc sinon est optionnel

condition doit être une expression, une variable ou une fonctionde type booléen

si condition alorsinstruction1… instructionn

finsi

19 / 74

Page 25: Bases de Programmation I Algorithmique

Sur l’ensemble {vrai, faux}

Opérateurs binaires (ou, et) et unaire (non) permettant de réaliser des conditions complexes

Définis par des tables de vérité

2 valeurs possibles {vrai, faux}

Peuvent être obtenues depuis d’autre types à l’aide de fonctions booléennes.

Pour les nombres : <, ≤ , >, ≥ , =, ≠Pour les caractères et les chaines : =, ≠

20 / 74

Page 26: Bases de Programmation I Algorithmique

Conjonction logique, notée etTable de vérité

Si a et b sont deux variables booléennes alors a et b est vrai si etseulement si a est vrai et b est vrai.

Exemple:Soit a = 4 et b = 5, la condition a > 3 et b ≠ 2 à pour valeur vrai.La condition a ≠ 4 et b ≠ 2 a pour valeur faux

21 / 74

et vrai Faux

vrai vrai faux

faux faux faux

Page 27: Bases de Programmation I Algorithmique

Disjonction logique, notée ouTable de vérité

Si a et b sont deux variables booléennes alors a ou b est vrai si etseulement si l’une des deux variables au moins a pour valeur vrai.

Exemple:Soit a = 4 et b = 5, la condition a > 3 ou b ≠ 2 à pour valeur vrai.La condition a ≠ 4 et b ≠ 2 a pour valeur vrai.

22 / 74

ou vrai Faux

vrai vrai vrai

faux vrai faux

Page 28: Bases de Programmation I Algorithmique

Négation logique, notée nonTable de vérité

Si a est une variable booléenne alors non a vaut vrai si a vaut faux etnon a vaut faux si a vaut vrai.

Exemple:Soit a = 4 et b = 5, la condition non a > 3 à pour valeur faux.La condition non a ≠ 4 a pour valeur vrai.

23 / 74

vrai faux

non faux vrai

Page 29: Bases de Programmation I Algorithmique

Les opérations booléennes peuvent être utilisées comme des instructions.

Mots réservés et, ou, non

Instructions composables avec des parenthèses

Pouvant être affecté à une variable de type booléen

algorithme op_booldonnées

a: booléenb: booléenc: booléend: booléen

débutc ← non ((a ou b) et d)

fin

24 / 74

Page 30: Bases de Programmation I Algorithmique

Exemple

algorithme absentréesval: entier

sortieabsolue: entier

débutsi val ≥ 0 alorsabsolue ← val

sinonabsolue ← -1 × val

finsi fin

25 / 74

Page 31: Bases de Programmation I Algorithmique

Les expressions booléennes peuvent être composées en utilisant les opérateurs et, ou, non et les parenthèses

Exemple

algorithme dummyentréesval: entier

sortieres: booléen

débutres ← fauxsi non ((val ≥ 0) et (val ≠ 2)) ou (val < 0) alorsres ← vrai

finsifin

26 / 74

Page 32: Bases de Programmation I Algorithmique

Exécuter plusieurs fois des instructions sans avoir à les réécrire.

Répéter des instructions en fonction de certaines conditions,

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à un nombreentier n donné: n + (n – 1) + (n – 2) × + … + 1

Pour 5 on a 5 + 4 + 3 + 2 + 1 = 15

27 / 74

Page 33: Bases de Programmation I Algorithmique

Définition d’un bloc itératifMots réservés: tantque, faire, fintq

tantque condition faireinstruction1… instructionn

fintq

Le bloc itératif peut contenir des instructions ou d’autres blocs

condition est une expression ou une variable booléenne

Tant que condition est vraie, les instructions du bloc sontrépétées.

28 / 74

Page 34: Bases de Programmation I Algorithmique

Fonctionnement

tantque condition faireinstruction1… instructionn

fintq

1. Evaluation de condition.

2. Si condition est vraie, continuer, sinon, aller à 5.

3. Exécution de toutes les instructions contenues dans le bloc.

4. Retour à 1.

5. Continuer l’algorithme après le fintantque.

29 / 74

Page 35: Bases de Programmation I Algorithmique

Fonctionnement

tantque condition faireinstruction1… instructionn

fintq

1. Evaluation de condition.

2. Si condition est vraie, continuer, sinon, aller à 5.

3. Exécution de toutes les instructions contenues dans le bloc.

4. Retour à 1.

5. Continuer l’algorithme après le fintantque.

29 / 74

Page 36: Bases de Programmation I Algorithmique

Fonctionnement

tantque condition faireinstruction1… instructionn

fintq

1. Evaluation de condition.

2. Si condition est vraie, continuer, sinon, aller à 5.

3. Exécution de toutes les instructions contenues dans le bloc.

4. Retour à 1.

5. Continuer l’algorithme après le fintantque.

29 / 74

Page 37: Bases de Programmation I Algorithmique

Fonctionnement

tantque condition faireinstruction1… instructionn

fintq

1. Evaluation de condition.

2. Si condition est vraie, continuer, sinon, aller à 5.

3. Exécution de toutes les instructions contenues dans le bloc.

4. Retour à 1.

5. Continuer l’algorithme après le fintantque.

29 / 74

Page 38: Bases de Programmation I Algorithmique

Fonctionnement

tantque condition faireinstruction1… instructionn

fintq

1. Evaluation de condition.

2. Si condition est vraie, continuer, sinon, aller à 5.

3. Exécution de toutes les instructions contenues dans le bloc.

4. Retour à 1.

5. Continuer l’algorithme après le fintantque.

29 / 74

Page 39: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

30 / 74

Page 40: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortie:resultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

Valeur des variables:

n resultat n > 0

30 / 74

3 0 vrai

Page 41: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

3 0 vrai

3 3 vrai

Page 42: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

3 0 vrai

3 3 vrai

2 3 vrai

Page 43: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

3 0 vrai

3 3 vrai

2 3 vrai

Page 44: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

2 3 vrai

Page 45: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

2 3 vrai

2 5 vrai

Page 46: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

2 3 vrai

2 5 vrai

1 5 vrai

Page 47: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

2 3 vrai

2 5 vrai

1 5 vrai

Page 48: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortie:resultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

1 5 vrai

Page 49: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

1 5 vrai

1 6 vrai

Page 50: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

1 5 vrai

1 6 vrai

0 6 faux

Page 51: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

1 5 vrai

1 6 vrai

0 6 faux

Page 52: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

0 6 faux

Page 53: Bases de Programmation I Algorithmique

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

n resultat n > 0

30 / 74

0 6 faux

Page 54: Bases de Programmation I Algorithmique

Fin de l’algorithme avec n = 0 et résultat = 6.

Exemple:

Calculer la somme de tous les entiers inférieurs ou égaux à 3.

algorithme sommenentréesn: entier

sortieresultat: entier

débutresultat ← 0tantque n > 0 faire resultat ← resultat + n n ← n - 1

fintq fin

30 / 74

Page 55: Bases de Programmation I Algorithmique

Besoin de traiter des valeurs groupées

Utilisables avec les types de base

Utilisable comme des variables

Avoir plusieurs entrées / sorties de taille variables

Représentation de données Mathématiques (vecteurs, matrices, …)

Textuelles (chaines de caractères)

31 / 74

Page 56: Bases de Programmation I Algorithmique

DéclarationDans un bloc données, entrées ou sortie

nom: type[]

Ajout de deux crochets [] après le type

la variable nom est un tableau contenant des valeurs du type type

InitialisationDans un bloc d’instruction

nom ← type[X]

La variable nom est un tableau de X valeurs (0 ≤ X, X fini)

32 / 74

Page 57: Bases de Programmation I Algorithmique

Taille du tableauFonction taille: taille(nom)

Retourne un nombre entier représentant le nombre de valeurs contenue dans le tableau (c’est à dire le X utilisé pour l’initialisation)

Accès à une valeur du tableau

Chaque valeur indexée par un entier de 0 à taille - 1

Accès grâce aux crochets: tab[i]

Accède à la valeur à l’index i du tableau, 0 ≤ i < taille(tab)

Index de la 1iere valeur: 0, index de la dernière valeur: taille(tab) - 1

ATTENTION: Index de la iieme valeur: i - 1

33 / 74

Page 58: Bases de Programmation I Algorithmique

Récupération des valeurs à partir d’un index

Valeur directe: tab[i]

Affectation à une variable: myvar ← tab[i]

Affectation d’une valeur à un index

Valeur directe: tab[i] ← 12

Depuis une variable: tab[i] ← myvar

Valeur / variable doivent être du même type que les valeurs du tableau

Utilisation des valeurs du tableau = utilisation de variables

34 / 74

Page 59: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3]

t ← taille(tab) myvar ← tab[2]

fin

35 / 74

tab[0] ← 12tab[1] ← -5tab[3] ← 3

Page 60: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3]

Déclaration du tableau

t ← taille(tab) myvar ← tab[2]

fin

35 / 74

tab[0] ← 12tab[1] ← -5tab[3] ← 3

Page 61: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3]

Déclaration du tableau

Initialisation du tableau

t ← taille(tab) myvar ← tab[2]

fin

35 / 74

tab[0] ← 12tab[1] ← -5tab[3] ← 3

Page 62: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3]

Déclaration du tableau

Initialisation du tableauAffectation de la première valeur du tableau

t ← taille(tab) myvar ← tab[2]

fin

35 / 74

tab[0] ← 12tab[1] ← -5tab[3] ← 3

Page 63: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3] tab[0] ← 12tab[1] ← -5tab[3] ← 3t ← taille(tab) myvar ← tab[2]

fin

Déclaration du tableau

Initialisation du tableau Affectation de la première valeur du tableau

Affectation de la deuxième valeur du tableau

35 / 74

Page 64: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3] tab[0] ← 12tab[1] ← -5tab[3] ← 3t ← taille(tab) myvar ← tab[2]

fin

Déclaration du tableau

Initialisation du tableau Affectation de la première valeur du tableau

Affectation de la deuxième valeur du tableauAffectation de la troisième valeur du tableau

35 / 74

Page 65: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3] tab[0] ← 12tab[1] ← -5tab[3] ← 3t ← taille(tab) myvar ← tab[2]

fin

Déclaration du tableau

Initialisation du tableau Affectation de la première valeur du tableau

Affectation de la deuxième valeur du tableau Affectation de la troisième valeur du tableau

Récupération de la taille du tableau

35 / 74

Page 66: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3] tab[0] ← 12tab[1] ← -5tab[3] ← 3t ← taille(tab) myvar ← tab[2]

fin

Déclaration du tableau

Initialisation du tableau Affectation de la première valeur du tableau

Affectation de la deuxième valeur du tableau Affectation de la troisième valeur du tableau

Récupération de la taille du tableauRécupération de la troisième valeur du tableau

35 / 74

Page 67: Bases de Programmation I Algorithmique

Exemple:

Représenter un tableau de 3 valeurs entières [12, -5, 3]

algorithme tableaudonnéestab: entier[] t: entier myvar: réel

débuttab ← entier[3] tab[0] ← 12tab[1] ← -5tab[3] ← 3t ← taille(tab) myvar ← tab[2]

fin

Déclaration du tableau

Initialisation du tableau Affectation de la première valeur du tableau

Affectation de la deuxième valeur du tableau Affectation de la troisième valeur du tableau

Récupération de la taille du tableauRécupération de la troisième valeur du tableau

35 / 74

Page 68: Bases de Programmation I Algorithmique

Exemple:

Ecrire un algorithme qui calcule la valeur Δ d’un trinôme du second degré.

Rappel:Trinôme du second degré: ax² + bx + cΔ = b² - 4ac

Représentation:Tableau de trois valeurs t = [a, b, c]avec t[0] = a, t[1] = b, t[2] = c

Δ = b² - 4ac = t[1] × t[1] - 4 × t[0] × t[2]

36 / 74

Page 69: Bases de Programmation I Algorithmique

Exemple:

Ecrire un algorithme qui calcule la valeur Δ d’un trinôme du second degré.

algorithme deltaentrées

coefs: réel[]sortie

delta: réeldébut

si taille(coefs) = 3 alorsdelta ← coefs[1] × coefs[1] - 4 × coefs[0] × coefs[2]

sinonecrire(‘’Trinôme invalide’’)

finsi fin

37 / 74

Page 70: Bases de Programmation I Algorithmique

Utilisation de boucle tanque et d’un compteurParcours et affichage d’un tableau tab avec un compteur cpt

cpt ← 0tantque cpt < taille(tab) faireecrire(tab[cpt])cpt ← cpt + 1

fintq

Autant de passages dans le bloc tanque qu’il y a de valeurs dans letableau,

Réutilisable facilement pour des traitements plus lourds.

38 / 74

Page 71: Bases de Programmation I Algorithmique

Exemple: Ecrire un algorithme qui calcule et retourne la moyenne des notes d’une promotion. Les notes sont données sous-forme d’un tableau de nombre réels.

algorithme moyenneentrées

notes: réel[]sortie

moy: réeldonnées

cpt: entierdébut

cpt ← 0moy ← 0tanque cpt < taille(notes) faire

moy ← moy +notes[cpt] cpt ← cpt +1

fintqmoy ← moy / taille(notes)

fin

39 / 74

Page 72: Bases de Programmation I Algorithmique

Représenter des tableaux en deux dimensions:Matrices à n lignes et m colonnes (n × m)

Tables diverses (feuilles de calculs)

Représenter des tableaux en trois dimensions Ensembles de points ou de vecteurs dans un espace 3D

Ensemble de triplets quelconque de valeurs

Représenter des objets en 4 dimension ou plusObjets mathématiques complexes

Vecteurs de dimension > 3

40 / 74

Page 73: Bases de Programmation I Algorithmique

Matrice de dimension 2:

Matrice de dimension 3:

2 1 5 6 7 38 6 3 1 3 23 7 5 1 6 4

8 1 2 3

41 / 74

2 18 6 3 1 3 23 7 5 1 6 4

[ 5 3 7 2 ][ 8 4 6 1 ]

[ 9 1 5 2 ]

Page 74: Bases de Programmation I Algorithmique

Représenter des tableaux à n lignes et m colonnes (n × m)

… ]n - 1 [ vn,0 vn, m

Colonne 1

Chaque case du tableau est indicée par un couple (i, j) avec 0 ≤ i < net 0 ≤ j < m qui désignent respectivement un numéro de colonne etun numéro de ligne.

ATTENTION: par convention, les numéros de lignes / colonnes débutent à 0 !! La première colonne / ligne porte le numéro 0

42 / 74

0 1 … m - 1

0

[

[

… … … ]

]

Ligne 0v0,0 v0,1 … v0, m

vn,1

Page 75: Bases de Programmation I Algorithmique

43 / 74

Exemple: Tableau t à deux dimension de taille 3 × 4 (3 lignes et 4 colonnes)

1ière1ière2ième2ième3ième

ligne, 1ièreligne, 2ièmeligne, 2ièmeligne, 4ièmeligne, 4ième

colonnecolonnecolonnecolonnecolonne

0 1 2 3

0 [ 5 3 7 2 ]1 [ 8 4 6 1 ]2 [ 9 1 5 2 ]

t0,0 = 5 – ligne 0, colonne 0 –t0,1 = 3 – ligne 0, colonne 1 -t1,1 = 4 – ligne 1, colonne 1 –t1,3 = 1 – ligne 1, colonne 3 –t2,3 = 2 – ligne 2, colonne 3 –

Page 76: Bases de Programmation I Algorithmique

Dans un bloc données, entrées ou sortie

nom: type[]…[]

Ajout d’un couples crochets [] après le type pour chaque dimension

la variable nom est un tableau contenant des valeurs du type type

InitialisationDans un bloc d’instruction

nom ← type[dim1]…[dimn]

La variable nom est un tableau à n dimensions où chaquedimension contient dimi valeurs (0 ≤ dimi, dimi fini)

Déclaration

44 / 74

Page 77: Bases de Programmation I Algorithmique

Taille du tableauFonction dimension: dimension(nom, i)

Retourne un nombre entier représentant le nombre de valeurs pour la dimension i du tableau.

Accès à une valeur du tableau

Chaque dimension k indexée par un entier ik de 0 à dimension(nom, i) - 1

Accès grâce aux crochets: tab[i1]…[in]

45 / 74

Page 78: Bases de Programmation I Algorithmique

Dans un bloc données, entrées ou sortie

nom: type[][]

Ajout de deux couples crochets [][] pour les lignes et les colonnes

InitialisationDans un bloc d’instruction

nom ← type[nbLignes][nbColonnes]

La variable nom est un tableau à 2 dimensions ayant un nombrede lignes / colonnes égal à nbLignes / nbColonnes

Déclaration

46 / 74

Page 79: Bases de Programmation I Algorithmique

Taille du tableauNombre de lignes: dimension(nom, 0)

Accès à une valeur du tableau

Accès grâce aux crochets: tab[i][j]

Nombre de colonnes: dimension(nom, 1)

i de 0 à dimension(nom, 0) - 1

j de 0 à dimension(nom, 1) - 1

47 / 74

Page 80: Bases de Programmation I Algorithmique

Notion de tableau de tableaux

0 1 … m - 1

0

n - 1

[

[

[

v0,0 v0,1 v0, m… ]

]

]

… … … …vn,0 vn,1 vn, m…

Ligne 0

Ligne i

Ligne n - 1

Chaque ligne du tableau à 2 dimensions est un tableau à 1 dimension

Représentation à plat:

[ … … … … ], [ vn,0 vn,1 … vn, m[[

48 / 74

v0,0 v0,1 … v0, m

Ligne 0

], ]]Ligne i Ligne n - 1

Page 81: Bases de Programmation I Algorithmique

Exemple: Tableau t à deux dimension de taille 3 × 4 (3 lignes et 4 colonnes)

t = [ [5, 3, 7, 2], [8, 4, 6, 1], [9, 1, 5, 2] ]

t[0] = [5, 3, 7, 2]t[1] = [8, 4, 6, 1]t[2] = [9, 1, 5, 2]

t[0][0] = 5t[1][2] = 6t[2][3] = 2

49 / 74

0 1 2 3

0 [ 5 3 7 2 ]1 [ 8 4 6 1 ]2 [ 9 1 5 2 ]

Page 82: Bases de Programmation I Algorithmique

Exemple:

Créer un tableau nommé tab de dimensions 3 x 4 et contenant des valeursentières puis ensuite:- affecter la valeur 3 à la case sur trouvant sur la première ligne et la

deuxième colonne;- afficher la valeur de la case se trouvant sur la deuxième ligne et la

troisième colonne.

algorithme tableau2dentrées

50 / 74

tab: entier[][]début

tab ← entier[3][4]

Déclaration

Initialisation

tab[0][1] ← 3 Affectation

ecrire(tab[1][2])fin

Ecriture

Page 83: Bases de Programmation I Algorithmique

Utilisation de blocs tanque imbriqués et de compteursParcours et affichage d’un tableau tab avec un compteur cpt

cpt_1 ← 0tantque cpt_1 < dimension(tab, 1) faire…cpt_n ← 0tantque cpt_n < dimension(tab, n) faire traitement de la case tab[cpt_1]…[cpt_n] cpt_n ← cpt_n + 1

fintq…cpt_1 ← cpt_1 + 1

fintq

51 / 74

Page 84: Bases de Programmation I Algorithmique

Exemple: Ecrire un algorithme qui prend en entrée un tableau de réels de dimension 2 et qui affecte 0 à toutes ses cases.

algorithme affectetab2dentrées

tab: réel[][]données

cpt_1, cpt_2: entierdébut

cpt_1 ← 0tanque cpt_1 < dimension(tab, 0) faire

cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0 cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintqfin

52 / 74

Page 85: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

5 3 7 ]

]8 4 6

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

cpt_1 cpt_2

0 -

Page 86: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 1 2

0 [ 5 3 7 ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 0

Page 87: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

5 3 7 ]

]8 4 6

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

cpt_1 cpt_2

0 0

Page 88: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 1 2

0 [ 0 3 7 ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 0

Page 89: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 3 7

0 1 2

0 [ ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 1

Page 90: Bases de Programmation I Algorithmique

]

]8 4 6

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 3 7cpt_1 cpt_2

0 1

Page 91: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 7

0 1 2

0 [ ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 1

Page 92: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 7

0 1 2

0 [ ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 2

Page 93: Bases de Programmation I Algorithmique

]

]8 4 6

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 7cpt_1 cpt_2

0 2

Page 94: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 1 2

0 [ ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 2

Page 95: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 1 2

0 [ ]

1 [ 8 4 6 ]

cpt_1 cpt_2

0 3

Page 96: Bases de Programmation I Algorithmique

]

]8 4 6

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 0cpt_1 cpt_2

0 3

Page 97: Bases de Programmation I Algorithmique

]

]

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

8 4 6

cpt_1 cpt_2

1 3

Page 98: Bases de Programmation I Algorithmique

]

]

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 0

8 4 6

cpt_1 cpt_2

1 3

Page 99: Bases de Programmation I Algorithmique

]

]

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

8 4 6

cpt_1 cpt_2

1 0

Page 100: Bases de Programmation I Algorithmique

]

]

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 0

8 4 6

cpt_1 cpt_2

1 0

Page 101: Bases de Programmation I Algorithmique

]

]

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 4 6

cpt_1 cpt_2

1 0

Page 102: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

]

]

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 4 6

cpt_1 cpt_2

1 1

Page 103: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

]

]

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 0

0 4 6

cpt_1 cpt_2

1 1

Page 104: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

]

]

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 0 6

cpt_1 cpt_2

1 1

Page 105: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

]

]

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 0 6

cpt_1 cpt_2

1 2

Page 106: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

]

]

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 0

0 0 6

cpt_1 cpt_2

1 2

Page 107: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

]

]

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 0 0

0 0 0

cpt_1 cpt_2

1 2

Page 108: Bases de Programmation I Algorithmique

]

]

53 / 74

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

0 0 0

0 0 0

cpt_1 cpt_2

1 3

Page 109: Bases de Programmation I Algorithmique

]

]

53 / 74

0 1 2

0

1

[

[

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

dimension(tab, 0) = 2dimension(tab, 1) = 3

0 0 0

0 0 0

cpt_1 cpt_2

1 3

Page 110: Bases de Programmation I Algorithmique

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

0 1 2

0 [ 0 0 0 ]1 [ 0 0 0 ]

cpt_1 cpt_2

2 3

Page 111: Bases de Programmation I Algorithmique

0 1 2

0

1

[

[

0 0 00 0

]

]0

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

53 / 74

dimension(tab, 0) = 2dimension(tab, 1) = 3

cpt_1 cpt_2

2 3

Page 112: Bases de Programmation I Algorithmique

53 / 74

tanque cpt_1 < dimension(tab, 0)faire cpt_2 ← 0tanque cpt_2 < dimension(tab, 1) faire

tab[cpt_1][cpt_2] ← 0cpt_2 ← cpt_2 + 1

fintqcpt_1 ← cpt_1 + 1

fintq

0 1 2

0 [ 0 0 0 ]1 [ 0 0 0 ]

Page 113: Bases de Programmation I Algorithmique

Interfaçage avec le langage courant

Deux types associés:caractère: symbole atomique syntaxique quelconque (lettre, …)

entouré de côtes (‘’)

syntaxe: ‘A’, ‘3’, ‘@’

Gestion de données textuelles

chaine: ensemble de caractères (mots, …)entouré de guillemets (‘’ et ‘’)

syntaxe: ‘’Hello’’

54 / 74

Page 114: Bases de Programmation I Algorithmique

Types primitifs: caractère et chaine

Une chaine peut être vue et utilisée comme un tableau de caractères:

‘’Hello‘’ ←→ [‘H’, ‘e’, ‘l’, ‘l’, ‘o’]

Une variable de type chaine peut être affectée d’une autre chaine ou d’un caractère:ch: chaine

chaine ← ‘’Ma chaine’’

chaine ← ‘A’

55 / 74

Page 115: Bases de Programmation I Algorithmique

Accepte les fonction de tableaux:

Soit ch une chaine, la fonction taille(ch) retourne le nombrede caractères composant ch.

Opérateur de concaténation +

Permet d’ajouter une chaine de caractère à une autre.

Syntaxe: chaine_1 + chaine_2

Exemple: ‘’Bonjour’’ + ‘’ ‘’ + ‘’a tous’’ = ‘’Bonjour a tous’’

56 / 74

Page 116: Bases de Programmation I Algorithmique

Types de bases appropriés pour des algorithmes simplesCalcul numériques

Opérations simples sur les ensembles (tableaux)

Difficulté de représentation de structure plus complexes

Agrégations de données

Objets réels ou abstrait

Exemple: Ecrire un algorithme permettant de saisir une promotion de 20étudiants. Chaque étudiant est caractérisé par un nom, un prénom et unnuméro INE.

57 / 74

Page 117: Bases de Programmation I Algorithmique

Exemple: Ecrire un algorithme permettant de saisir une promotion de 20 étudiants. Chaque étudiant est caractérisé par un nom, un prénom et un numéro INE.

algorithme saisiedonnéesnoms: chaines[] prénoms: chaine[] ine: entier[] cpt: entier

débutnoms ← chaine[20] prénoms ← chaine[20] ine ← entier[20]cpt ← 0tanque cpt < 20 faire noms[cpt] ← lire() prénoms[cpt] ← lire() ine[cpt] ← lire()cpt ← cpt + 1

fintqfin

58 / 74

Page 118: Bases de Programmation I Algorithmique

Approche naïveDéclarations de tableaux différents

Chaque colonne i d’un tableau représente l’information relative à auième étudiant

noms[i] prénoms[i] ine[i]

Etudiant i

Permet de résoudre le problème

Ne représente pas les notions réelles (une entité étudiant)

Appartenance des données à une étudiant définieimplicitement (grâce à un index commun)

59 / 74

Page 119: Bases de Programmation I Algorithmique

Un type complexe (ou structure) est un type composé de plusieurs valeurs de types différents pouvant être eux même primitifs ou complexes. Chaque valeur composant un type complexe est appelée champ.

Syntaxe algorithmique:

Type nomdonnéeschamp1: type1…champn: typen

fintype

Nom du type

Champs composant le type

60 / 74

Page 120: Bases de Programmation I Algorithmique

Exemple: Ecrire un type complexe nommé Etudiant qui permet de représenter un étudiant grâce à son nom (chaine), son prénom (chaine) et son INE (entier).

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier

fintype

Nom du type

champ 1champ 2champ 3

Le type complexe est nommée Etudiant

Il comporte 3 champs

61 / 74

Page 121: Bases de Programmation I Algorithmique

3 étapes:Définition du type (hors de l’algorithme)Type NomTypedonnéeschamp1: type1…

fintype

Déclaration dans la section données de l’algorithme

NomVar: NomType

Instanciation dans le corps de l’algorithme (mot clé nouveau)

NomVar ← nouveau NomType

62 / 74

Page 122: Bases de Programmation I Algorithmique

Exemple: Ecrire un type complexe nommé Etudiant qui permet de représenter un étudiant grâce à son nom (chaine), son prénom (chaine) et son INE (entier).

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier

fintype

Définition

algorithme monAlgodonnées

et: Etudiantdébut

Algorithme utilisant le type complexe

Déclaration

et ← nouveau Etudiant Instanciation, la variable est prête à êtrefin utilisée

63 / 74

Page 123: Bases de Programmation I Algorithmique

Accès aux données:Opérateur de déréférencement . (point)

nomVar: NomTypeType NomTypedonnéeschampi: typei…

fintype nomvar.champi

Le couple nomvar.champi est considéré comme une variable detype typei

Le déréférencement ne peut être appliquée à une variable qui n’apas été instanciée (nouveau)

64 / 74

Page 124: Bases de Programmation I Algorithmique

Exemple: Ecrire un type complexe nommé Etudiant qui permet de représenter un étudiant grâce à son nom (chaine), son prénom (chaine) et son INE (entier).

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier

fintype

algorithme monAlgodonnées

et: Etudiantdébut

et ← nouveau Etudiant

65 / 74

et.nom ← ‘’Bulot’’ ecrire(et.nom) et.ine ← et.ine + 1

fin

Affecte « Bulot » au champ nom de la variable etEcrit « Bulot »Utilisation des champs comme variable

Page 125: Bases de Programmation I Algorithmique

Exemple: Ecrire un algorithme permettant de saisir une promotion de 20 étudiants. Chaque étudiant est caractérisé par un nom, un prénom et un numéro INE.

algorithme saisiedonnéespromo: Etudiant[] cpt: entier

débutpromo ← Etudiant[20] cpt ← 0tanque cpt < 20 faire promo[cpt] ← nouveau Etudiant promo[cpt].nom ← lire() promo[cpt].prénom ← lire() promo[cpt].ine ← lire()cpt ← cpt + 1

fintq fin

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier

fintype

66 / 74

Page 126: Bases de Programmation I Algorithmique

Il n’est pas possible d’utiliser un type complexe avec les fonctionslire() et écrire().

La lecture / écriture doit se faire champ par champ:

type Etudiantdonnées

nom: chaineprénom: chaineine: entier

fintype

algorithme faux données

et: Etudiantdébut

et ← lire() ecrire(et)

fin

algorithme correct données

et: Etudiantdébut

et ← nouveauEtudiant et.nom ← lire() et.prénom ← lire() et.ine ← lire()

finL’affectation d’une variable de type complexe vers une autre variable du même type est possible.

67 / 74

Page 127: Bases de Programmation I Algorithmique

Une variable de type complexe qui ne contient aucune donnée estappelée null (mot réservé)

Peut être utilisé comme affectation à une variable afin d’effaces les données qu’elle contient

ATTENTION: Une variable de type complexe valant null ne peut être déréférencée (.)

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier

fintype

algorithme videdonnées

et: Etudiantdébut

et ← null fin

algorithme pbdonnées

et: Etudiantdébut

et ← nullecrire(et.prénom)

fin

68 / 74

Page 128: Bases de Programmation I Algorithmique

La valeur null peut être utilisée pour tester l’existence d’une variable de type complexe

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier

fintype

algorithme testentrées

et: Etudiantdébut

si et ≠ null alors ecrire(et.nom)

finsifin

Très utile pour tester des entrées avant déréférencement:

algorithme test2entrées

et: Etudiantdébut

si et = null alors ecrire(‘’ERREUR’’)

finsifin

69 / 74

Page 129: Bases de Programmation I Algorithmique

Un type complexe peut contenir des champs qui sont eux-mêmes detype complexes:

Type NomTypedonnéeschamp1: type1…

fintype

Type NomType2donnéeschampa: typeachampb: NomType

fintype

Permet de modulariser les types

Utilisation du déréférencement en cascade:

var: NomType2

var.champb.champ1 Champ du type NomType

70 / 74

Page 130: Bases de Programmation I Algorithmique

Exemple: Ecrire un type complexe nommé Date qui permet de représenter une date grâce à son jour (entier), son mois (entier) et son année (entier).

type Datedonnées

jour: entiermois: entierannée: entier

fintype

Le type complexe est nommée Date

Il comporte 3 champs

71 / 74

Page 131: Bases de Programmation I Algorithmique

Exemple: Modifier le type Etudiant en lui ajoutant un date de naissance (typecomplexe Date).

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier naissance: Date

fintype

Le type complexe est nommée Etudiant.

Il comporte 4 champs.

Le champ naissance est lui-même du type complexe Date.

72 / 74

Page 132: Bases de Programmation I Algorithmique

Exemple: Ecrire un algorithme permettant de saisir une promotion de 20 étudiants. Chaqueétudiant est caractérisé par un nom, un prénom et un numéro INE et sa date de naissance.

algorithme saisiedonnéespromo: Etudiant[] cpt: entier

débutpromo ← Etudiant[20] cpt ← 0tanque cpt < 20 faire promo[cpt] ← nouveau Etudiant promo[cpt].nom ← lire() promo[cpt].prénom ← lire() promo[cpt].ine ← lire()

promo[cpt].naissance ← nouveau Date promo[cpt].naissance.jour ← lire() promo[cpt].naissance.mois ← lire() promo[cpt].naissance.année ← lire()

cpt ← cpt + 1fintq

fin

type Etudiantdonnées

nom: chaine prénom: chaineine: entier naissance: Date

fintype

type Datedonnées

jour: entiermois: entierannée: entier

fintype

73 / 74

Page 133: Bases de Programmation I Algorithmique

Un type complexe peut contenir un champ de ce même type, il s’agit alors d’un type récursif

Exemple: Modifier le type Etudiant en lui ajoutant un binôme qui est lui aussi un étudiant.

type Etudiantdonnées

nom: chaine prénom: chaine ine: entier naissance: Date binôme: Etudiant

fintype

L’utilisation de récursivité dans un type complexe ne change en rien son comportement ou son utilisation.

74 / 74