You are on page 1of 38

n 5 Complments vue densemble Leon n.

1 Introduction etC : Structures et fonctions

Structures de donnes

STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

STRUCTURES ET FONCTIONS C

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Plan de la leon
Structures Unions Fonctions

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

STRUCTURES

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Dfinition
Variable

struct article tv ;

Espaces ajouts par des compilateurs


Optimiser le temps daccs mmoire code design prixUnit quantite

tv
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Accs aux champs


Accs par valeur Accs par adresse
p = & tv ; p -> prixUnit = 989.50;
code prixUnit tv
989.50

tv . code =23798;

p
Prof. A. EL FAKER

23798

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Manipulation des structures


Affectation
Recopier une structure dans une autre

article a; article copie; copie = a;

23798
Prof. A. EL FAKER

989.50

23798

copie

989.50

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Initialisation des structures


Au moment de leur dfinition, l'aide d'une liste de valeurs entre accolades

struct date { int jour, mois, an; } aujourdhui = {8,7,2004};


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Unions

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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 +

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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;

M.RHO = 3.1415/3; M.THETA = 2.0;

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

FONCTIONS

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

int recherche(int [ ], int, int);


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Type de retour
{ }

int x = a*b; return x;

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Type de retour
void
int
Ne renvoie aucune valeur Par dfaut

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Type de retour
int []
Retour de structure Mais peut tre un pointeur Toujours par adresse

article * saisie(void) { article a; scanf(%s,a.design); return (&a); }


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Passage de paramtres
Possible de lancer un programme en lui passant des paramtres
main(int argc, char *argv[ ]) {
// corps du programme

Le SE considre le programme comme une fonction main()


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Passage de paramtres
Passage de structure

Gnralement par adresse float prixTotalHT(article *p,int q) { return (p->prixUnit * q); }


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

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

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

Les macro-fonctions
Points faibles

Mise au point et maintenance difficiles

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

n 5 Complments vue densemble Leon n. 1 Introduction etC : Structures et fonctions

Structures de donnes

STRUCTURES DE DONNES
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

You might also like