Title: Algorithmes et structures de donnes 5me cours
1Algorithmes et structures de données5ème cours
- Patrick Reuter
- http//www.labri.fr/preuter
2Ingrédients dalgorithmes
- Affectation (ex. mois 6, jours1 31)
- Condition/Comparaison (ex. mois lt 12)
- Appel de fonction (ex. writeln(mois))
- Structure de contrôle
- Branchements conditionnels (multiples) (si ..
Alors .. Sinon) - Boucles (tant que..faire, pour.. faire)
- Bloc dinstructions (begin .. end)
3Motivation
Structure de données - tableau à 2 dimensions
4Déclaration de variables
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 ..
- 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
5Déclaration de variables
- var compteur integer
- var diviseur single
- var c char
- var precision double
- var nom string
- var masculin boolean
- var jours array1..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
6Déclaration de variables
- var compteur integer
- var diviseur single
- var c byte
- var precision double
- var nom string
- var masculin boolean
- var jours array1..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
7Déclaration de variables
- Types prédéfinis
- integer, boolean, single,
- Types que lon peut définir soi-même
-
- type t_nombre_entier integer
- var i t_nombre_entier
- pas vraiment dintérêt ...
- au lieu de
- var i integer
8Déclaration de variables
- Types prédéfinis
- Integer, boolean, single,
- Types que lon peut définir soi-même
- type t_tableau array1..12 of byte
- var jours t_tableau
- au lieu de
- var jours array1..12 of byte
9Déclaration de variables
- Type tableau
- type t_tableau array1..MAX of integer
- var factoriel t_tableau
- Factoriel1 1
- Factoriel2 2
- Factoriel3 6
- Factoriel4 24
- Factoriel5 120
- Factoriel6 720
10Déclaration de variables
- Type tableau
- type t_tableau array1..MAX of integer
- var factoriel t_tableau
- var i, produit integer
- produit 1
- POUR i de 1 à MAX faire
- produit iproduit
- factorieli Produit
- FIN POUR
11Organisation de la mémoire
- type t_tableau array1..MAX of integer
- var factoriel t_tableau
0
536.870.911
536.870.910
...
n!
factorieln (20004n-1)
...
0
factoriel2 2004
2
0
0
0
factoriel1 2000
1
? factorielindex (20004index-4)
12- Type tableau à 2 dimensions
- var a array1..lignes of array1..colonnes of
real - Ou bien
- var a array1..lignes, 1..colonnes of real
- Ou bien
- type t_ligne array1..colonnes of real
- var a array1..lignes of t_ligne
- Ou bien
- type t_ligne array1..colonnes of real
- type t_tableau2 array1..lignes of t_ligne
- var a t_tableau2
13Déclaration de variables
- Type tableau à 2 dimensions
- type t_ligne array1..colonnes of real
- type t_tableau2 array1..lignes of t_ligne
- var a t_tableau2
- Affectation
- a11 0
- a12 0
- ..
- a1colonnes 0
- a21 0
- a22 0
- ..
- ..
- alignescolonnes 0
14Déclaration de variables
- Type tableau à 2 dimensions
- type t_ligne array1..colonnes of real
- type t_tableau2 array1..lignes of t_ligne
- var a t_tableau2
- var i,j integer
- POUR i de 1 à n FAIRE
- POUR j de 1 à n FAIRE
- aij 0
- FIN POUR
- FIN POUR
- ²
15Déclaration de variables
- Type tableau à 2 dimensions
- type t_ligne array1..lignes of real
- type t_tableau2 array1..colonnes of t_ligne
- var a t_tableau2
- var i,j integer
- POUR i de 1 à n FAIRE
- POUR j de 1 à n FAIRE
- aij 0
- FIN POUR
- FIN POUR
- Complexité ?
- Remplir une matrice identité ?
16Déclaration de variables
- Type tableau à 2 dimensions n lignes
colonnes - type t_ligne array1..n of real
- type t_tableau2 array1..n of t_ligne
- var a t_tableau2
- var i,j integer
17Déclaration de variables
- Type tableau à 2 dimensions n lignes
colonnes - type t_ligne array1..n of real
- type t_tableau2 array1..n of t_ligne
- var a t_tableau2
- var i,j integer
- POUR i de 1 à n FAIRE
- POUR j de 1 à n FAIRE
- SI ij ALORS
- aij 1
- SINON
- aij 0
- FIN POUR
- FIN POUR
18Organisation de la mémoire
- type t_ligne array1..3 of byte
- type t_tableau2 array1..3 of t_ligne
- var a t_tableau2
536.870.911
536.870.910
...
a33 2008
...
...
a22 2004
Occupe de la place successive dans la mémoire
a21 2003
a13 2002
a12 2001
a11 2000
...
0
- aij (2000(3(i-1)) j - 1 )
19Organisation de la mémoire
- type t_ligne array1..colonnes of byte
- type t_tableau2 array1..lignes of t_ligne
- var a t_tableau2
? aij (2000j((colonnes-1)i) -1)
20Organisation de la mémoire
- type t_ligne array0..colonnes-1 of byte
- type t_tableau2 array0..lignes-1 of t_ligne
- var a t_tableau2
? aij (2000j((colonnes)i) )
21Déclaration de variables
- Des nombres entiers sont souvent utilisés quand
un choix parmi un petit nombre dalternatives est
souhaité. - Nombre entiers
- Type de base byte, integer
- var jour integer
- jour 1 signifie par exemple lundi
-
- jour 3 signifie par exemple mercredi
22Dé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
23Déclaration de variables
- Les 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)
24Organisation de la mémoire
536.870.911
536.870.910
...
1.000
...
5
4
3
2
1
0
jour
25Déclaration de variables
- type t_carte (7,8,9,10,vallee,dame,roi,as)
- var ma_meilleure_carte t_carte
- var cartes array1..8 of t_carte
- ma_meilleur_carte roi
- cartes1 10
- cartes2 dame
- cartes3 7
- ...
- cartes8 9
26Motivation
Structure de données - tableau à 2 dimensions
type t_ligne array1..8 of byte
27Motivation
Structure de données - tableau à 2 dimensions
type t_ligne array1..8 of byte type t_damier
array1..8 of t_ligne
28Motivation
Structure de données - tableau à 2 dimensions
type t_ligne array1..8 of byte type t_damier
array1..8 of t_ligne var damier t_damier
29Motivation
Imaginons la convention suivante - 0 pour un
champs vide - 1 pour un champs blanc - 2 pour
un champs noir type t_ligne array1..8 of
byte type t_damier array1..8 of t_ligne var
damier t_damier Pour initialiser un damier
vide
30Motivation
Imaginons la convention suivante - 0 pour un
champs vide - 1 pour un champs blanc - 2 pour
un champs noir type t_ligne array1..8 of
byte type t_damier array1..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 damierij
0 FIN POUR FIN POUR
31Motivation
Structure de données - tableau à 2 dimensions
type t_ligne array1..8 of byte type t_damier
array1..8 of t_ligne var damier t_damier
32Motivation
Structure de données - tableau à 2 dimensions
type t_champ (vide, blanc, noir) pour le jeu
de dames
33Motivation
Structure de données - tableau à 2 dimensions
type t_champ (vide, blanc, noir) type t_ligne
array1..8 of t_champ type t_damier
array1..8 of t_ligne var damier t_damier
34Motivation
type t_champ (vide, blanc, noir) type
t_ligne array1..8 of t_champ type t_damier
array1..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 damierij vide FIN
POUR FIN POUR