Professional Documents
Culture Documents
Structures de donnes
STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
STRUCTURES ET FONCTIONS C
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Plan de la leon
Structures Unions Fonctions
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
STRUCTURES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Dfinition
Type utilisateur Une pure abstraction struct article { int code; char design[25]; float prixUnit; int quantite; };
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Dfinition
Un nouveau type article
typedef struct _article { int code; char design[25]; float prixUnit; int quantite; } article;
article est quivalent struct _article article tv, *p;
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Dfinition
Variable
struct article tv ;
tv
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
tv . code =23798;
p
Prof. A. EL FAKER
23798
Structures de donnes
23798
Prof. A. EL FAKER
989.50
23798
copie
989.50
Structures de donnes
Structures de donnes
Unions
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Unions
Tous les membres sont implants la mme adresse union OV { char op ; float val ; } ov ;
ov
0
op
val 42
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Unions
Structure avec partie variante
struct U{ boolean isOp; union{ char op ; float val ; } opVal; }u;
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Accs
u.isOp = true; u.opVal.op =+
isOp true
opVal +
Structures de donnes
Unions
opVal est une union anonyme
Jamais utilise !! La masquer
#define OP (opVal.op) #define VAL (opVal.val) switch(u.isOp){ case true : u.OP =+; break; case false : u.VAL =2.5;}
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
isOp true
false
opVal +
24.5
Structures de donnes
Exercice
Dfinir un point dans le plan laide de ses deux reprsentations :
Polaire : (rho, theta) Cartsienne : (re, im) M
im
re
Dclarer le point
M(rho=PI/3, theta=2)
Prof. A. EL FAKER
Structures de donnes
Exercice
typedef enum {cartesien, polaire} nature; struct point{ nature represent; union { struct { float re, im; } CART struct { float rho, theta; } POL; } CartPol ; };
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Exercice
Le point M(rho=PI/3, theta=2)
#define RHO (CartPol.POL.rho) #define THETA (CartPol.POL.theta) struct point M;
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
FONCTIONS
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Dfinition
int f(int a, int b)
{ int x; x = a*b; return x; Prototype
Corps
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Dfinition
int f(int a, int b) f est une adresse
f ne peut tre dfinie lintrieur dune autre fonction
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Prototype
Dclarer un prototype sans corps?
Avertir le compilateur La fonction est dfinie dans un autre fichier ou plus loin dans le mme fichier
Structures de donnes
Prototype
Prototype complet int recherche(int tab[ ], int n, int x); Facilite la documentation pour le programmeur
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Type de retour
{ }
return spcifie la fois la fin de la fonction courante et attribue comme valeur cette fonction la valeur de l'expression exp
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Type de retour
void
int
Ne renvoie aucune valeur Par dfaut
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Type de retour
int []
Pas de tableau Pas de fonction Pas de structure
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Type de retour
int []
Retour de structure Mais peut tre un pointeur Toujours par adresse
Structures de donnes
Passage de paramtres
Pour permettre la modification d'un objet on doit passer son adresse et non une copie de sa valeur
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Passage de paramtres
Transmission par valeur void echange(int a, int b){ int c =a; a=b; b=c;} main(){ int n=10, m=20; echange(n,m); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
10 20 10 20
Structures de donnes
Passage de paramtres
Transmission par adresse void echange(int *a, int *b){ int c =*a; *a=*b; *b=*c;} 10 20 main(){ int n=10, m=20; 20 10 echange(&n,&m); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Passage de paramtres
Possible de lancer un programme en lui passant des paramtres
main(int argc, char *argv[ ]) {
// corps du programme
Structures de donnes
Passage de paramtres
#include <stdio.h> int main(int argc,char *argv[]) { int i; printf(" %d arguments passs main:\n\n", argc); for (i = 0; i < argc; i++) printf("argv[%d]: %s\n",i,argv[i]); return 0; }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Exemple
Structures de donnes
Passage de paramtres
Execution
C:> args premier "avec des espaces" 3 arguments passs main: argv[0]: C:\monRep\args.exe argv[1]: premier argv[2]: avec des espaces
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Passage de paramtres
Passage de structure
Structures de donnes
Passage de paramtres
Passage de fonctions en paramtre double sqr(double x) {return x*x;} void show( double (*f) () ) { for (int i=0 ; i< 10 ; i++) printf("%d %e \n",i,f((double) i)); } main(){ show(sqr); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Les macro-fonctions
#define MIN(a,b) (a<b)? a : b
Substitu par le prprocesseur lutilisation
int y=MIN(x,0);
int y=(x<0)? x : 0;
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Les macro-fonctions
Points forts Pratique Rapide Les mcanismes dappel et de retour de fonction ne sont pas mis en oeuvre
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
Les macro-fonctions
Points faibles
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI
Structures de donnes
STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI