• Aucun résultat trouvé

Travaux Dirig´es de programmation n

N/A
N/A
Protected

Academic year: 2022

Partager "Travaux Dirig´es de programmation n"

Copied!
4
0
0

Texte intégral

(1)

Travaux Dirig´ es de programmation n

o

3

Cours de Programmation C

—L2.1—

x

Exercice 1. Utilisation de void *

1. Expliquer ce que fait la fonction suivante : void A(void *a, size_t nbBytes) {

char *ca = (char *)a;

int i;

for(i=0; i<nbBytes; i++) { ca[i] = 0

} }

2. ´ Ecrire une fonction main qui utilise la fonction A sur un entier

3. ´ Ecrire une fonction main qui utilise la fonction A sur un tableau d’entiers.

4. En s’inspirant de la fonction A, ´ ecrire une fonction void Copie(void *a, void *b, size t n) qui copie les donn´ ees de *a vers *b sur n bytes.

x

Exercice 2. Ensemble non typ´ e

On souhaite cr´ eer une structure Ensemble pour repr´ esenter en machine des ensembles d’´ elements dont le type n’est pas connu ` a l’avance. Une structure Ensemble doit contenir une zone de m´ emoire allou´ ee pour recevoir les ´ el´ ements (le pointeur vers la zone sera de type char *), le nom du type d’´ el´ ement qu’elle contient (exemple : ”int”), un entier repr´ esentant sa capacit´ e maximum et un entier comptant le nombre d´ el´ ements qu’elle contient. Si en ajoutant un ´ el´ ement, on d´ epasse la capacit´ e de l’ensemble alors cette derni` ere doit ˆ etre augment´ ee.

Donner la structure ` a utiliser puis ´ ecrire les fonctions :

1. Ensemble * CreeEnsemble(int capacite, size t tailleElts, char *type) qui cr´ ee un ensemble vide de capacit´ e initiale capacite pour des ´ el´ ements de taille tailleElts bytes et de type type.

2. void LibereEnsemble(Ensemble *e)

3. int AugmenteCapacite(Ensemble *e) qui multiplie par deux la capacit´ e obtenue et retourne 1 en cas de succ` es et 0 en cas d’´ echec.

1

(2)

4. int AjouteElement(Ensemble *e, void *elt) qui ajoute une copie de l’´ el´ ement point´ e par elt et retourne 1 en cas de succ` es et 0 en cas d’´ echcec. On ne traitera pas le cas des doublons (un ensemble peut contenir plusieurs fois le mˆ eme ´ el´ ement).

Vous pouvez utiliser les fonctions du premier exercice.

5. int SupprimeElement(Ensemble *e, int i) qui supprime de l’ensemble l’´ el´ ement plac´ e en i` eme position.

6. void Concat(Ensemble *e1, Ensemble *e2) qui ajoute les ´ el´ ements de e2 ` a e1 seule- ment si les deux ensembles d´ eclarent contenir le mˆ eme type d’´ el´ elments.

x

Exercice 3.

A faire chez soi

Probl` eme d’´ egalit´ e

1. Copier le programme suivant, le compiler et le tester : typedef struct {

char lettre;

int n;

}essai;

int main(void) {

printf("taille reelle : %u\n",sizeof(essai));

printf("taille theorique : %u \n",sizeof(char)+sizeof(int));

return 0;

}

Quels r´ esultats obtenez-vous ? D’o` u vient la diff´ erence entre les deux valeurs ? 2. On a ´ ecrit la fonction suivante :

int Egal(void *a, void *b, size_t nbBytes) { char *ca = (char *)a;

char *cb =(char *)b;

int i;

for(i=0; i<nbBytes; i++) { if (ca[i]!=cb[i]) return 0;

}

return 1;

}

Expliquez ce que fait cette fonction.

3. ` A pr´ esent, on teste Egal avec la fonction main suivante : int main(void) {

int a=4,b=4;

2

(3)

essai e1,e2;

e1.lettre = ’a’;

e2.lettre = ’a’;

e1.n = 5;

e2.n = 5;

printf("%d\n", Egal(&a,&b, sizeof(int)));

printf("%d\n", Egal(&e1,&e2, sizeof(essai)));

return 1;

}

Copier et tester cette fonction, la fonction Egal retourne-t-elle le r´ esultat voulu ? Ex- pliquer le probl` eme qui se pose lorsque l’on teste des structures octet par octet.

x

Exercice 4. Matrices d’entiers

On souhaite travailler avec des matrices d’entiers. Deux structures sont propos´ ees :

typedef struct matrice1 { int lignes;

int cols;

int * nombres;

}Matrice1;

typedef struct matrice2 { int lignes;

int cols;

int ** nombres;

}Matrice2;

Dans Matrice1, les nombres sont repr´ esent´ e par un tableau simple de taille lignes

×

cols. Dans Matrice2, les nombres sont repr´ esent´ es par un double tableau. Pour chacun des deux types, ´ ecrire les fonctions :

1. Matrice * CreeMatrice(int lignes, int cols) qui cr´ ee une matrice o` u toutes les valeurs sont initialis´ ees ` a z´ ero.

2. void LibereMatrice(Matrice *m)

3. int Get(Matrice *m, int l, int c) qui retourne la valeur ligne l, colonne c de la matrice *m.

4. void Change(Matrice *m, int l, int c, int val) qui modifie la valeur ligne l, colonne c.

5. Expliquer pourquoi la premi` ere instruction ci-dessous est correcte et pas la deuxi` eme :

3

(4)

int tableau[] = { 1 , 5 , 45 , 3 , 9 };

int identite[][] = { { 1 , 0 , 0 } , { 0 , 1 , 0 } , { 0 , 0 , 1 } };

Comment corriger ?

6. Pourquoi est-il obligatoire de sp´ ecifier la taille de la deuxi` eme dimension d’un tableau statique lors du passage en argument dans une fonction ?

4

Références

Documents relatifs

Si les prairies maigres qui relient entre eux les divers noyaux de landes possèdent une valeur botanique moindre, elles sont d’une grande importance pour l’avifaune patrimoniale du

L’élément majeur du site est la présence, au sein du cortège banal de l’avifaune commune des paysages agropastoraux, d’une petite population nicheuse de Bruant ortolan, un oiseau

L’Astragale de Montpellier est, comme l’indique son nom, une espèce répandue sur le pourtour méditerranéen d’où elle gagne, via la vallée de la Garonne, la

Elle est accompagnée par un cortège de plantes propres aux pelouses calcicoles arides, parmi lesquelles figurent plusieurs espèces à répartition très localisée au niveau régional

En lisière des fourrés secs et de la chênaie pubescente, quelques pieds de l’élégante Marguerite en corymbe peuvent être également observés : il s’agit ici d’une

C’est là que se cantonnent en effet deux plantes typiques des dunes littorales où elles trouvent à profusion les sables plus ou moins meubles qui constituent leur biotope électif :

Sur le plan botanique, un des intérêts du site réside dans le caractère sud-ouest atlantique très marqué de sa flore dont plusieurs éléments, répandus dans le sud-ouest de

L’élément floristique le plus précieux du site est la présence d’une importante station de Sabline des chaumes, une espèce endémique du territoire français et bénéficiant