Title: Algorithmique et Structures de Donnes
1Algorithmique et Structures de Données
- Akkouche Samir
- E-mail samir.akkouche_at_liris.cnrs.fr
- http//www710.univ-lyon1.fr/sakkouch/Mias31
-
2Objectifs du cours
- Programmation avancée
- Structures de données dynamiques
- Programmation Orientée Objets (POO)
Langage C/C Environnement Unix
3Norme algorithmique
- Utilisation dun pseudo langage pour décrire les
algorithmes
- On utilisera la norme algorithmique vue en
première année
4Norme algorithmique
- Types primitifs entier, réel, booléen, caractère
- Déclaration de variables
- i entier,
- c caractère
- tab 1..45 de réels
- Affectation
- i ? 25 - - i reçoit la valeur 25
- c ? i - - la variable c prend la valeur i
- Comparaison
- a b - - le contenu de a est-il le même que
celui de b ?
5Norme algorithmique
- Types composés
- type Mot tableau 1..30 de réels
- type Date enregistrement
- jour entier
- mois entier
- annee entier
- fin Date
- Exemple
- nom Mot, // la variable nom est de
type Mot - nom1 ? s
-
6 7Actions de choix
- si condition alors - -si condition est vraie
alors - Actions
- finsi
delta,a,b,c reel x1,x2 reel delta ? bb
4ac si delta gt 0 alors x1 ? (-b
sqrt(delta))/2a x2 ? (-b - sqrt())/2a finsi
8Actions de choix
- si condition alors
- Actions1
- sinon
- Actions2
- finsi
delta,a,b,c reel x1,x2 reel delta ? bb
4ac si delta gt 0 alors x1 ? (-b
sqrt(delta))/2a x2 ? (-b -
sqrt(deta))/2a sinon Afficher(pas de
solution) finsi
9Actions de choix
cas x vaut 1 y ? 2 3
y ? 7 5 y ? 1 autre y ?0 fincas
cas expression vaut constante1
action1 constante2 action2 - - - - - - - -
- - - - - - - constanten actionn autre
action fincas
10Actions itératives
- Boucle pour boucle inconditionnelle
- pour i dans 1..n
- Actions
- FinPour
pour i dans 1..20 Afficher( ti) finPour
11Actions itératives
- Boucle tant que boucle conditionnelle
- tant que condition
- Actions
- fintantque
i ? 0 tant que i lt 10 i ? i 1
afficher(i) fintantque
Attention une instruction au moins doit
modifier la condition
12Actions itératives
- Boucle répéter boucle conditionnelle
- répéter
- Actions
- jusquà condition
répéter Actions tant que condition
i ? 0 répéter i ? i 1 afficher(i)
tantque ilt10
i ? 0 répéter i ? i 1 afficher(i)
jusquà igt10
13- Une fonction est une séquence dactions qui
produit une valeur de retour à partir de
paramètres dentrée.
type fonction nom (liste_de paramètres)
séquence dactions finnom
reel fonction moyenne (E x réel, y réel)
c réel c ? (xy)/2 retourne c finmoyenne
14- x,y,mréel
- - - - - - - -
- m ? moyenne(x,y)
15Chaîne de production dun programme
16 Programme C/C
Quest-ce quun programme?
- Un programme C/C est un ensemble de fonctions.
- Une fonction et une seule porte le nom
- main() Point dentrée dans le programme
float minimum(float a, float b) /
/ float maximum(float a, float
b) // void main()
float u,v ----------------------- x
minimum(u,v) y maximum(u,v)
17 Programme C/C
Quest-ce que le prototype dune fonction?
- Prototype dune fonction est caractérisé par
- Le nom de la fonction
- Le nombre de paramètres
- Le type des paramètres
- Le type de la valeur de retour
- Le prototype sexprime sous forme de déclaration
dun - en-tête (header)
float minimum(float , float ) float
maximum(float , float )
18 Programme C/C
Quest-ce quun fichier den-tête ou fichier
header ?
- fichier contenant les prototypes des fonctions
dun programme - Lusage veut que lextension soit .h
minmax.h
float minimum(float , float ) float
maximum(float , float )
- Exemples ltstdio.hgt, ltstring.hgt,
19Quest-ce que le passage par valeur? Quest-ce
que le passage par référence?
float minimum(float a, float b) if(altb)
return a else return b void main()
float x,y,u,v scanf(f f ,u,v) x
minimum(u,v)
//a et b sont des paramètres formels
Passage par valeur
minimum
a
b
main()
x
y
u
v
Mémoire
//u et v sont les paramètres réels
20 il ny a pas création de variables locales a et
b
Se caractérise par la présence dun entre le
type et le nom de la variable
float minimum(float a, float b) if(altb)
return a else return b void main()
float x,y,u,v scanf(f f ,u,v) x
minimum(u,v)
minimum
main()
x
y
u
v
Mémoire
21Chaîne de production dun programme
Quest-ce quune chaîne de production?
- Ecrire un ensemble dinstructions dans un langage
de haut niveau - C, C, Fortran, Pascal, ADA, Scheme
- Programme source
- Traduire en langage machine Exécutable
?
Exécutable
Programme source
22Chaîne de production dun programme
f1.c
f2.c
f3.c
fn.c
- Compilation
- Edition des liens
Exécutable
Programme source 1 ou plusieurs fichiers
Remarque un seul de ces fichiers contient la
fonction main()
23Compilation
Quest-ce quune compilation?
- Vérification syntaxique
- Production dun fichier binaire
f1.c
f2.c
f3.c
fn.c
f1.o
f2.o
f3.o
fn.o
Compilateur
Programme source 1 ou plusieurs fichiers
Fichiers objets
Remarque On peut compiler séparément chacun des
fichiers
24minmax.h
principal.c
float minimum(float , float ) float
maximum(float , float )
include ltstdio.hgt include minmax.h void
main() float x,y,u,u scanf(f f
,u,v) x minimum(u,v) y
maximum(u,v) printf(le min vaut f , x)
minmax.c
float minimum(float a, float b) if(altb)
return a else return b /
/ float maximum(float a, float b)
if(agtb) return a else return b
25Quest-ce quune édition des liens?
minmax.o
exécutable
principal.o
machin
librairies
26Structures dynamiques
- Problème La mémoire dun ordinateur est limitée
en taille. - Ne réserver de la mémoire quen cas de nécessité.
- Libérer cette mémoire une fois le traitement
terminé. - Cette place libérée est ainsi disponible pour une
autre utilisation dans le même programme.
27Structures dynamiques
Tant quil y a un fichier en attente Récupérer
le contenu du fichier Effectuer le traitement
Afficher les résultats Fin
Traitement
Résultats
Fichier 1
Fichier 2
Fichier 3
Fichier n
28Structures dynamiques
- réel fonction P()
- I entier
- existe Booléen
- T tableau1..25 de reels
- finP
TAS
existe
I
PILE (Stack)
Zone de données de P
T1..25
Mémoire
29Structures dynamiques
- Pour manipuler des structures dynamiques il faut
utiliser des variables de type pointeurs
Quest-ce quun pointeur ?
30Notion de pointeur
- Un pointeur est une variable qui contient une
valeur. - Cette valeur est interprétée comme étant
ladresse dun autre objet. - Ce nest pas la valeur du pointeur qui nous
intéresse, ce sont les informations contenues
dans lobjet sur lequel il pointe - Exemple
- X entier X?122 Toto Ref
entier Toto ? X - X case N 22005 Toto Ref entier
Toto ? X
122
?
22005
125
31Point sur la norme
- Déclaration dun pointeur Y Ref reel
- Ladresse dun objet X X (adresse de
X) - Accès à lobjet pointé Y
- Exemple Y ? 12.64
-
- Y
- case N 31500
31500
12.64
32Allocation-libération
TAS
- Déclaration Y Ref TYPE (ex Y Ref entier )
-
-
PILE (Stack)
Y
?
- Allocation Y ? reserve TYPE
-
-
Mémoire
Si TYPE est un tableau de 4 éléments Alors Il
y a réservation de 4 éléments dans le tas.
Ladresse du premier élément est renvoyée dans
le pointeur Y
TAS
12000
PILE (Stack)
Y
12000
Mémoire
33Traduction en C/C
- Déclaration dun pointeur sur un type donné
- toto Ref entier ? int toto
- toto est un pointeur sur un entier (zone
représentant un entier) - Interprétation
- toto est une variable statique dont le contenu
représente une adresse
- x Ref Type ? Type x
- x est un pointeur sur un Type (zone représentant
un Type)
34Traduction en C/C
- Exemple Définition dun type utilisateur Boite
- struct Boite
-
- int taillenom
- int tailleadresse
- char nom50
- char adresse150
-
- x Ref Boite ? Boite x
- x NULL ? x ne pointe sur aucune Boite
35Traduction en C/C
- Allocation dune Boite référencée(pointée) par x
- x ? reserve Boite ? x new Boite
- Rappel struct Boite
-
- int taillenom // 2 octets
- int tailleadresse // 2 octets
- char nom50 // 50 octets
- char adresse150 // 150 octets
-
- ? il y a réservation de 204 octets contigus dans
le TAS
36Traduction en C/C
- Allocation dune Boite référencée(pointée) par x
- x ? reserve Boite ? x new Boite
- 2 actions - Réservation dans le TAS de 204
octets - - Stockage dans la variable x de ladresse
du premier octet
204 octets
13120
TAS
PILE (Stack)
13120
x
37Traduction en C/C
- Accès à linformation x représente lobjet
pointé par x - (x).taillenom 12
- (x).tailleadresse 20
- strcpy( (x).nom, machin bidul)
- strcpy( (x).adrese, 24 rue de limpasse)
- Autre syntaxe plus simple
- x -gttaillenom 12 // x flèche taillenom
- x -gttailleadresse 20 // x flèche
tailleadresse - etc
38Traduction en C/C
- Libération
- libère x ? delete x
-
- La place allouée dans le TAS est maintenant
considérée comme disponible -
- Attention x contient toujours ladresse 13120
-
39Un exemple dutilisation
- Allocation dynamique des chaînes de caractères
- Déclaration de la chaîne char nom
-
- Quand la taille N de la chaîne est connue à
lavance alors - nom new charN1 // réservation de N1
caractères -
- nom est maintenant considéré comme un tableau de
taille N1 - Le dernier caractère est spécial \0
-
- Exemple N 12 nom new charN1
- strcpy(nom, machin bidul)
-
40Un exemple dutilisation
- struct Boite
-
- int taillenom // 2 octets
- int tailleadresse // 2 octets
- char nom50 // 50 octets
- char adresse150 // 150 octets
-
- struct Boite
-
- char nom char
adresse -
41Un exemple dutilisation
- Boite a
- a.nom new charN11 //N1 taille connue
de nom - a.adresse new charN21 //N2 taille
connue de adresse
- Après utilisation on libère la place réservée
pour nom et adresse -
- delete a.nom delete a.adrese
- a.nom NULL a.adresse NULL