![Page 1: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/1.jpg)
Algorithmes et structures de données
5ème cours
Patrick Reuter
http://www.labri.fr/~preuter
![Page 2: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/2.jpg)
Ingrédients d’algorithmes
• Affectation (ex. mois := 6, jours[1] := 31)• Condition/Comparaison (ex. mois <= 12)• Appel de fonction (ex. writeln(mois))
• Structure de contrôle– Branchements conditionnels (multiples) (si .. Alors .. Sinon)
– Boucles (tant que..faire, pour.. faire)
• Bloc d’instructions (begin .. end)
![Page 3: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/3.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
![Page 4: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/4.jpg)
Déclaration de variables
Comme dans un livre de recettes
Ingrédients(pour 8-10 personnes) :
- 1 kg de couscous roulé - 1 kg de mouton - 1 poignée de pois chiches - 2 oignons secs - 3-4 tomates fraîches ou 1 cuillère.à soupe de concentré de tomate - 3-4 pommes de terre - 3-4 navets - 3-4 carottes - 3-4 courgettes - 1 tranche de courge - 4 cuillères à soupe d'huile - 1/2 cuillère à café de cannelle - 1 pincée de poivre noir - 1/2 cuillère à soupe de piment rouge doux ou de paprika - 1/2 cuillère à soupe de ras-el-hanout - 1 piment rouge sec - 100 g de beurre ou 3 cuillères à soupe d'huile - sel
Préparation :
La veille, mettez les pois chiches dans un bol d'eau.
Le jour même, roulez le couscous .Si vous utilisez du couscous roulé et séché, rincez-le à l'eau froide, égouttez-le et laissez-le gonfler pendant 30 mn.
Coupez la viande en morceaux.Pelez les oignons et coupez-en 1 en morceaux.
Lavez et passez les tomates à la moulinette.Mettez la viande dans une marmite et ajoutez les morceaux d'oignon, les tomates ou le concentré de tomate dilué dans 1 verre d'eau, l'huile, le poivre, le piment, la cannelle et du sel.
Faites revenir …..
![Page 5: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/5.jpg)
Déclaration de variables
var compteur : integer;
var diviseur : single;
var c : char;
var precision : double;
var nom : string;
var masculin : boolean;
var jours : array[1..12] of byte;
diviseur := 1.1; { Affectation }compteur : = 1;Nom := ‘Gerhard’;
Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractères
Tableau
![Page 6: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/6.jpg)
Déclaration de variables
var compteur : integer;
var diviseur : single;
var c : byte;
var precision : double;
var nom : string;
var masculin : boolean;
var jours : array[1..12] of byte;
diviseur := 1.1; { Affectation }compteur : = 1;Nom := ‘Gerhard’;
Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractères
Tableau
![Page 7: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/7.jpg)
Déclaration de variables
• Types prédéfinis– integer, boolean, single, …
• Types que l’on peut définir soi-même
type t_nombre_entier = integer;var i : t_nombre_entier;
{ pas vraiment d’intérêt ... }
au lieu de
var i : integer;
![Page 8: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/8.jpg)
Déclaration de variables
• Types prédéfinis– Integer, boolean, single, …
• Types que l’on peut définir soi-même
type t_tableau = array[1..12] of byte;
var jours : t_tableau;
au lieu de
var jours : array[1..12] of byte;
![Page 9: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/9.jpg)
Déclaration de variablesType tableau :
type t_tableau = array[1..MAX] of integer;var factoriel : t_tableau;
Factoriel[1] := 1;Factoriel[2] := 2;Factoriel[3] := 6; Factoriel[4] := 24;Factoriel[5] := 120;Factoriel[6] := 720;…
![Page 10: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/10.jpg)
Déclaration de variablesType tableau :
type t_tableau = array[1..MAX] of integer;var factoriel : t_tableau;var i, produit : integer;
produit := 1;POUR i de 1 à MAX faireproduit := i*produit;factoriel[i] := Produit;
FIN POUR
![Page 11: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/11.jpg)
Organisation de la mémoiretype t_tableau = array[1..MAX] of integer;
var factoriel : t_tableau;
0
factoriel[1] #2000
#536.870.910#536.870.911
...factoriel[n] #(2000+4*n-1)
...
factoriel[2] #2004
1
2
n!
factoriel[index] #(2000+4*index-4)
000
0
![Page 12: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/12.jpg)
Type tableau à 2 dimensions :
var a : array[1..lignes] of array[1..colonnes] of real;
Ou bien
var a : array[1..lignes, 1..colonnes] of real;
Ou bien
type t_ligne = array[1..colonnes] of real;var a : array[1..lignes] of t_ligne;
Ou bien
type t_ligne = array[1..colonnes] of real;type t_tableau2 = array[1..lignes] of t_ligne;var a : t_tableau2;
Ou bien
type t_tableau2 = array[1..lignes, 1..colonnes] of real;var a : t_tableau2;
Ou bien
type t_tableau2= array[1..lignes] of array[1..colonnes] of real;var a : t_tableau2;
![Page 13: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/13.jpg)
Type tableau à 2 dimensions
type t_ligne = array[1..colonnes] of real;type t_tableau2 = array[1..lignes] of t_ligne;var a : t_tableau2;
{ Affectation: }
a[1][1] := 0;a[1][2] := 0;..a[1][colonnes] := 0;a[2][1] := 0;a[2][2] := 0;....a[lignes][colonnes] := 0;
Déclaration de variables
![Page 14: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/14.jpg)
Type tableau à 2 dimensions :
type t_ligne = array[1..colonnes] of real;type t_tableau2 = array[1..lignes] of t_ligne;var a : t_tableau2;var i,j : integer;
POUR i de 1 à n FAIREPOUR j de 1 à n FAIRE
a[i][j] := 0;FIN POUR
FIN POUR
²
Déclaration de variables
![Page 15: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/15.jpg)
Type tableau à 2 dimensions :
type t_ligne = array[1..lignes] of real;type t_tableau2 = array[1..colonnes] of t_ligne;var a : t_tableau2;var i,j : integer;
POUR i de 1 à n FAIREPOUR j de 1 à n FAIRE
a[i][j] := 0;FIN POUR
FIN POUR
- Complexité ?- Remplir une matrice identité ?
Déclaration de variables
![Page 16: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/16.jpg)
Type tableau à 2 dimensions : n = lignes = colonnes
type t_ligne = array[1..n] of real;type t_tableau2 = array[1..n] of t_ligne;var a : t_tableau2;var i,j : integer;
Déclaration de variables
![Page 17: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/17.jpg)
Type tableau à 2 dimensions : n = lignes = colonnes
type t_ligne = array[1..n] of real;type t_tableau2 = array[1..n] of t_ligne;var a : t_tableau2;var i,j : integer;
POUR i de 1 à n FAIREPOUR j de 1 à n FAIRE
SI i=j ALORS a[i][j] := 1;
SINONa[i][j] := 0;
FIN POURFIN POUR
Déclaration de variables
![Page 18: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/18.jpg)
Organisation de la mémoiretype t_ligne = array[1..3] of byte;
type t_tableau2 = array[1..3] of t_ligne;
var a : t_tableau2;
#0
a[1][1] #2000
...
#536.870.910#536.870.911
...
...
Occupe de la place successivedans la mémoire
a[1][2] #2001a[1][3] #2002a[2][1] #2003a[2][2] #2004
...
a[3][3] #2008
a[i][j] #(2000+(3*(i-1))+ j - 1 )
![Page 19: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/19.jpg)
Organisation de la mémoiretype t_ligne = array[1..colonnes] of byte;
type t_tableau2 = array[1..lignes] of t_ligne;
var a : t_tableau2;
a[i][j] #(2000+j+((colonnes-1)*i) -1)
![Page 20: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/20.jpg)
Organisation de la mémoiretype t_ligne = array[0..colonnes-1] of byte;
type t_tableau2 = array[0..lignes-1] of t_ligne;
var a : t_tableau2;
a[i][j] #(2000+j+((colonnes)*i) )
![Page 21: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/21.jpg)
Déclaration de variables
Des nombres entiers sont souvent utilisés quand un choix parmi un petit nombre d’alternatives est souhaité.
Nombre entiers
Type de base : byte, integer;
var jour : integer;jour := 1; { signifie par exemple lundi }…jour := 3; { signifie par exemple mercredi }
![Page 22: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/22.jpg)
Déclaration de variables
Les types énumérés
type t_jourdesemaine =(lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche);
var jour : t_jourdesemaine;
jour := lundi;
…
jour := mercredi;
![Page 23: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/23.jpg)
Déclaration de variablesLes types énumérés
Autres exemples
type t_jourdesemaine =(lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche);
type t_couleur =(rouge, vert, bleu, gris);
type t_sexe =(masculin, feminin);
![Page 24: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/24.jpg)
Organisation de la mémoire
var jour : t_jourdesemaine;
#0#1#2#3#4#5
...
#536.870.910#536.870.911
#1.000
...
jour
![Page 25: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/25.jpg)
Déclaration de variables
type t_carte =(7,8,9,10,vallee,dame,roi,as);
var ma_meilleure_carte : t_carte;
var cartes : array[1..8] of t_carte;
ma_meilleur_carte := roi;
cartes[1] := 10;
cartes[2] := dame;
cartes[3] := 7;
...
cartes[8] := 9;
![Page 26: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/26.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
type t_ligne = array[1..8] of byte;
![Page 27: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/27.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
type t_ligne = array[1..8] of byte;type t_damier = array[1..8] of t_ligne;
![Page 28: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/28.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
type t_ligne = array[1..8] of byte;type t_damier = array[1..8] of t_ligne;var damier : t_damier;
![Page 29: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/29.jpg)
MotivationImaginons la convention suivante :
- 0 pour un champs vide- 1 pour un champs blanc- 2 pour un champs noir
type t_ligne = array[1..8] of byte;type t_damier = array[1..8] of t_ligne;var damier : t_damier;
Pour initialiser un damier vide :
![Page 30: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/30.jpg)
MotivationImaginons la convention suivante :
- 0 pour un champs vide- 1 pour un champs blanc- 2 pour un champs noir
type t_ligne = array[1..8] of byte;type t_damier = array[1..8] of t_ligne;var damier : t_damier;var i,j : integer;
Pour initialiser un damier vide :
POUR i = 1 à 8 faire POUR j = 1 à 8 faire damier[i][j] := 0; FIN POURFIN POUR
![Page 31: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/31.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
type t_ligne = array[1..8] of byte;type t_damier = array[1..8] of t_ligne;var damier : t_damier;
![Page 32: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/32.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
type t_champ =(vide, blanc, noir); {pour le jeu de dames}
![Page 33: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/33.jpg)
Motivation
Structure de données:
- tableau à 2 dimensions…
type t_champ =(vide, blanc, noir); type t_ligne = array[1..8] of t_champ;type t_damier = array[1..8] of t_ligne;var damier : t_damier;
![Page 34: Algorithmes et structures de données 5ème cours Patrick Reuter preuter](https://reader035.vdocuments.pub/reader035/viewer/2022062318/551d9d81497959293b8bab57/html5/thumbnails/34.jpg)
Motivation
type t_champ =(vide, blanc, noir); type t_ligne = array[1..8] of t_champ;type t_damier = array[1..8] of t_ligne;var damier : t_damier;var i,j : integer;
Pour initialiser un damier vide :
POUR i = 1 à 8 faire POUR j = 1 à 8 faire damier[i][j] := vide; FIN POURFIN POUR