bases de programmation i algorithmique
TRANSCRIPT
![Page 1: Bases de Programmation I Algorithmique](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/2.jpg)
« 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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/4.jpg)
« 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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/50.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/51.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/52.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/53.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/54.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/55.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/56.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/57.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/58.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/59.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/60.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/61.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/62.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/63.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/64.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/65.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/66.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/67.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/68.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/69.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/70.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/71.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/72.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/73.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/74.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/75.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/76.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/77.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/78.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/79.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/80.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/81.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/82.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/83.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/84.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/85.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/86.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/87.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/88.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/89.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/90.jpg)
]
]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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/91.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/92.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/93.jpg)
]
]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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/94.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/95.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/96.jpg)
]
]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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/97.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/98.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/99.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/100.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/101.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/102.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/103.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/104.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/105.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/106.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/107.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/108.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/109.jpg)
]
]
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/110.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/111.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/112.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/113.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/114.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/115.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/116.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/117.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/118.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/119.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/120.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/121.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/122.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/123.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/124.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/125.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/126.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/127.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/128.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/129.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/130.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/131.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/132.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062500/62af22aff613df0c950f2d46/html5/thumbnails/133.jpg)
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