Title: Algorithmes et structures de donnes 4me cours
1Algorithmes et structures de données4ème cours
- Patrick Reuter
- maître de conférences
- http//www.labri.fr/preuter
2Ingrédients dalgorithmes
- Affectation (ex. mois 6)
- 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)
3Aujourdhui
- Types de base
- Type tableau
4Mémoire vive
Proc 64bit
2,93 GHz 2,93 Giga-Instructions par seconde
5Organisation de la mémoire
- Un octet peut prendre 28256 valeurs différentes,
entre 00000000 et 11111111. - 1 kilo-octet (ko ou Ko) 210 octets 1 024
octets - (et pas 1 000 octets comme on pourrait le
supposer), soit 2 à la puissance 10. - 1 méga-octet (Mo) 220 octets 1 024 ko
1 048 576 octets. - 1 giga-octet (Go) 230 octets 1 024 Mo
1 073 741 824 octets. - 1 téra-octet (To) 240 octets 1 024 Go
1 099 511 627 776 octets.
6Organisation de la mémoire
- Mémoire de 512 MegaOctets
536.870.911
536.870.910
...
1.000
...
5
4
3
2
1
0
adresse dans la mémoire vive
7Dé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
8Déclaration de variables
- var compteur integer
- var diviseur float
- var c char
- var precision double
- var nom string
- var masculin boolean
- diviseur 1.1
- compteur 1
- Nom Gerhard
Nombre entier
Nombre à virgule flottante
caractère
Nombre à virgule flottante avec double précision
Chaîne de caractères
VRAI/FAUX
9Types de base
- Type binaire
- Boolean (bool) 1 bit FALSE, TRUE (FAUX,
VRAI) - Nombre entiers
- Unsigned char (byte) 1 Octet 0 à 255
- Signed char (byte) 1 Octet -128 à 127
- Unsigned integer 4 Octets 0 à 4294967295
- Signed Integer 4 Octets -2147483648 à
2147483647 - Nombre à virgule flottante
- Real (Single, float) 4 Octets -3.410-38 à
3.41038 (7 décimales) - Double 8 Octets 1.8 10-308 à 1.8 10308 (15
décim) - Rappel 1 Octet 8 bits 28 possibilités
- 4 Octets 32 bits 232 possibilités
10Octet, byte (caractère)
- var c char (byte)
- valeurs de 0..255
- Quest-ce quon peut faire avec un octet ?
- ? Code ASCII
- (American Standard Code for Information
Interchange)
95 caractères imprimables
11Octet - Code ASCII
12Organisation de la mémoire
- Un octet peut prendre 28256 valeurs différentes,
entre 00000000 et 11111111. - Octets non- signés
- Par exemple
- 1 1 0 0 0 1 0 0
128 64 32 16 8 4 2 1
13Organisation de la mémoire
- Octet signé de -128 jusquà 127
- Valeurs négatives 1111 1111 -1 à 1000 0000
-128. - Valeurs positives 0000 0000 0 à 1111 1111
127 - Calculer les valeurs négatives
- Prendre le complément
- Ajouter 1
- Exemple - 65
- 01000001
- Complément 10111110
- Ajouter 1 10111111
14 0,001231 1,23110-3 -9866 -9,866103 1,45
1,45101
1,4
15 exposant e
signe s 1,-1
exposant e
0,001231 1,23110-3 -9866 -9,866103 1,45
1,45101
1,4
base b10
mantisse m (entier, sans la virgule)
16Nombre à virgule flottante
- var c real (single, double, real, ..)
- Approximations rationnelles de nombres réels.
- Les nombres à virgule flottante possèdent
- un signe s (dans -1, 1)
- une mantisse entière m (parfois appelée
significande) - un exposant e.
- s m be
- - Avec b la base de représentation (parfois 2,
10, 16, ou autre) - - En faisant varier e, on fait flotter la
virgule décimale.
17Nombre à virgule flottante
- Float, single, double, real, ..
- Approximations rationnelles de nombres réels.
- Les nombres à virgule flottante possèdent
- un signe s (dans -1, 1)
- une mantisse entière m (parfois appelée
significande) - un exposant e.
- s m be
- Avec b la base de représentation (parfois 2, 16,
ou autre) - signe exposant mantisse
- Simple précision (float, 32 bits) 1 bit 8
bits 23 bits - Double précision(double,64 bits) 1 bit 11
bits 52 bits - Simple précision (b2) (-1)S (1 M/223 )
2(E-127) - Double précision (b2) (-1)S (1 M/252 )
2(E-1023)
18Conversion dun nombre x
- Nombre x (-1)s m 2e (base b 2)
- signe s 0 pour positive, 1 pour négative
- Exposant e e log2 (x)
- Mantisse m m (x/2e 1) 223
19Conversion dun nombre x
- Rappel Nombre x (-1)s m 2e (base b
2) - signe s 0 pour positive, 1 pour négative
- Exposant e e log2 (x)
- Mantisse m m (x/2e 1) 223
- Exemple x 11,25
- Signe s positive -gt 0 binaire
- Exposant e log2 (11,25) 3,49 3 ?
127 130 -gt 10000010 binaire - Mantisse m (11,25/23 1) 223 3407872 )
01101000000000000000000 binaire - Solution 0 10000010 01101000000000000000000
pour chiffres négatifs
20Nombre à virgule flottante
- Float, single, double, real, ..
- Approximations rationnelles de nombres réels.
- Les nombres à virgule flottante possèdent
- un signe s (dans -1, 1)
- une mantisse entière m (parfois appelée
significande) - un exposant e.
- s m be
- Limitation
- précision limitée qui se traduit par des arrondis
qui peuvent s'accumuler de façon gênante.
21Organisation de la mémoire
- var lettre char ( 1 octet (byte)
)
536.870.911
536.870.910
...
1.000
...
5
4
3
2
1
0
22Organisation de la mémoire
- var lettre signed char
- lettre -65
536.870.911
536.870.910
...
1.000
...
5
lettre 4
191
3
2
1
0
23Organisation de la mémoire
- var lettre1,lettre2,lettre3,lettre4 char
- lettre1 60
- lettre2 80
- lettre3 50
- lettre4 30
...
1.000
...
lettre4 3
30
lettre3 2
50
lettre2 1
80
lettre1 0
60
24Organisation de la mémoire
...
1.000
...
5
4
nombre
nombre
nombre
nombre 0
25Organisation de la mémoire
- var nombre integer ( 4 byte (octets) )
- nombre 125
536.870.911
536.870.910
...
1.000
...
5
4
0
nombre
0
0
0
nombre
0
nombre
0
nombre 0
125
125
26Organisation de la mémoire
- var nombre integer ( 4 byte (octets) )
- nombre 260
536.870.911
536.870.910
...
1.000
...
5
4
0
nombre
0
0
0
nombre
1256 41
0
nombre
1
nombre 0
125
4
27Organisation de la mémoire
536.870.911
536.870.910
...
1.000
...
5
4
resultat
resultat
resultat
resultat 0
28Exercice
- Déclarer le nombre de jours dans chaque mois
- Ecrire un algorithme qui compte le nombre de mois
à 30 jours
29- var janvier byte
- var fevrier byte
- var mars byte
-
- var decembre byte
- var compteur integer
- janvier 31
- fevrier 28
- mars 31
- avril 30
-
- decembre 31
- compteur 0
- si janvier 30 alors
- compteur compteur 1
30Type tableaux (angl. ARRAY)
- Déclaration dune variable de type tableau
- Définition
- var nom_du_tableau ArrayMinDim..MaxDim of
type - Exemples
- var mot array0..10 of char
- var jours array1..12 of char
-
- structure de données la plus connue
- structure homogène, chaque élément est du même
type de base -
31Type tableaux (angl. ARRAY)
- Déclaration dune variable de type tableau
- var jours array1..12 of byte
- var mot array0..10 of char
- Affectation
- nom_du_tableauindex valeur
- Exemples
- jours1 31
- jours2 28
-
- jours12 31
-
- jours13 ----- Erreur !!!
- jours14 ----- Erreur !!!
32Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
33Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
34Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
35Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
36Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
37Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
38Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
39Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
40Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
41Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
42Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1
43Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1
0
44Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1
0 .
45Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1
0 .
46Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2
0 .
47Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2
0 .
48Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2
0 .
49Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3
0 .
50Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3
0 .
51Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3
0 .
52Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3 4
0 .
53Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3 4
0 1 .
54Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3 4
0 1 .
55Type tableaux (angl. ARRAY)
- Exemple dun algorithme sur les tableaux
- - compter le nombre de mois avec 30 jours
- Déclaration de variables
- var jours array1..12 of byte
- var i, nombre integer
- Affectation des variables
- jours1 31
- jours2 28
-
- jours12 31
- Initialisation
- i1
- nombre 0
- boucle
Jours1
Jours2
...
Jours12
i
nombre
31
28
31
1 2 3 4
0 1 .
56Organisation de la mémoire
- var jours array1..12 of byte 12
octets
536.870.911
536.870.910
...
jours12 2011
...
...
jours3 2002
jours2 2001
jours1 2000
...
0
57Organisation de la mémoire
536.870.911
536.870.910
...
jours12 2011
31
...
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
58Organisation de la mémoire
- var jours array1..12 of byte 12
octets
536.870.911
536.870.910
...
jours12 2011
31
...
Occupe de la place successive dans la mémoire
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
59Organisation de la mémoire
- var jours array1..12 of byte 12
octets
536.870.911
536.870.910
...
jours12 2011
31
...
Occupe de la place successive dans la mémoire
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
? joursindex (2000index-1)
60Organisation de la mémoire
- var jours array1..12 of byte 12
octets
536.870.911
536.870.910
...
jours12 2011
31
...
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
i 0
61Type tableaux (angl. ARRAY)
- structure de données la plus connue
- structure homogène, chaque élément est du même
type de base - occupe de la place successive dans la mémoire
- random access laccès aux différents
éléments se fait à coût égal est donc à un coût
constant -
62(No Transcript)