TP Tableaux et pointeurs

Programming, Math, etc. · lab

TP Tableaux et pointeurs

Exercice 1

Écrire une fonction void collapse\_array(int array[],int d) qui efface

toutes les occurrences du chiffre zéro dans le tableau array de dimension d et effectue

la compression des éléments qui restent. Les cases vides à la fin du tableau contiendront

la valeur zéro.

Exemple : collapse\_array([10,0,30,0], 4) \_ [10,30,0,0]

Exercice 2

Écrire une fonction void reverse\_array(int array[], int d) qui inverse

les éléments du tableau array de dimension d dans l'ordre inverse sans utiliser une

structure intermédiaire.

Exemple : reverse\_array([10,20,30,40], 4) \_ [40,30,20,10]

Exercice 3

Écrire une fonction void merge\_array(int arrayA[],int d1, int

arrayB[],int d2, int array\_res[]) qui prend comme arguments les

tableaux arrayA de dimension d1 et arrayB de dimension d2, triés par ordre

croissant, et remplit le tableau array\_res avec les éléments des tableaux arrayA et

arrayB. Le tableau résultat sera trié par ordre croissant.

Exercice 4

Écrire une fonction insert\_array(int array[], int d, int val) qui

prend en argument un tableau trié par ordre croissant array de dimension d, dont la

valeur de la dernière case n’est pas définie, et qui insère l'entier val de manière à ce que

le tableau demeure trié.

Allocation dynamique

Exercice 5

1. Écrire une fonction void print\_array(float \*array,int d) qui

affiche un tableau de réels de dimension d.

2. Écrire une fonction void print\_matrix(float \\matrix,int

l,int c) qui affiche une matrice d’entiers de dimension l×c.

Exercice 6

Publicité

1. Écrire une fonction int \*allocate\_array(int d,int n) qui alloue

dynamiquement un tableau d’entiers de dimension d. Les éléments du tableau

doivent être initialisés à la valeur n.

2. Écrire une fonction void free\_array(int \*array) qui libère un tableau

d’entiers.

Exercice 7

1. Écrire une fonction int \* allocate\_matrix(int l, int c, int

n) qui alloue dynamiquement une matrice de dimension l×c et qui initialise ses

éléments à la valeur n.

2. Écrire une fonction void free\_matrix(int \\matrix, int l) qui

libère la matrice matrix de l lignes.

Chaînes de caractères

Exercice 8

Écrire une fonction void exchange\_word(char \*array[], int i, int

j) qui permute un mot à la position i et un mot à la position j d’un tableau de mots.

Exercice 9

Écrire une fonction void exchange\_letter(char \*tab[], int i, int

j) qui permute la première lettre du mot à la position i avec celle du mot à la position j.

Exercice 10

Écrire une fonction char \search (char \m, char c) qui cherche l’existence

d’un caractère c dans un mot m et qui retourne un pointeur vers la première occurrence de

ce caractère. La fonction devra retourner NULL si le caractère recherché n’existe pas.

3

Exercice 11

On se donne la fonction MyGets (char \*chaine) suivante qui lit une chaîne de

caractères (espace compris):

void MyGets(char \*chaine)

{

char c;

while((c=getchar())!=’\n’)

Publicité

\*(chaine++) = c;

\*chaine = ’\0’;

}

1. Écrire une fonction int est\_lettre (char c) qui retourne 1 si c est

une lettre (majuscule ou minuscule) et 0 sinon.

2. Écrire une fonction int compte\_alphabet (char \*chaine) qui

calcule le nombre de lettres de l’alphabet (majuscules ou minuscules) que contient

la chaine.

3. Écrire une fonction que l’on appellera compte\_mot qui calcule le nombre de

mots (groupements de caractères séparés par un ou plusieurs espaces) que

contient une chaine de caractères.

4. Écrire un programme qui saisit une chaine de caractères, affiche le nombre de

caractères alphabétiques et le nombre de mots.

Structures

Exercice 12

Soit la structure suivante :

struct book {

char title[30];

int code;

float price;

};

On se propose de gérer une collection d’ouvrages en utilisant un tableau de livres.

1. Écrire une fonction struct book \*create\_collection(int n) qui

retourne une collection de n ouvrages en faisant appel à l’allocation dynamique

de mémoire pour la création de la collection. Les champs de type int doivent être

initialisés à 0 et les champs de type chaîne de caractères doivent être initialisés à

une chaîne vide.

4

2. Tester la fonction create\_collection(int n) dans un programme

principal.

Publicité

3. Écrire une fonction void print\_collection(struct book

\*collection, int n), qui affiche la collection de n livres.

4. Écrire une fonction void exchange\_book(struct book

\*collection, int i, int j) qui permute un ouvrage à la position i et

un ouvrage à la position j.

Listes chaînées

Exercice 13

Soit la structure de liste chaînée d’entiers suivante :

typedef struct list {

int n ;

struct list \*suivant ; } int\_list;

1. Écrire une fonction int\_list \*create\_list(void) qui permet la

création d’une liste vide et qui retourne un pointeur NULL pour représenter la

liste résultat.

2. Écrire la fonction int empty\_list(int\_list \*l) qui teste si une liste

donnée est vide.

3. Écrire une fonction void print\_list(int\_list \*l) qui permet

d’afficher les éléments d'une liste donnée.

4. Écrire une fonction int\_list \insert\_elem(int\_list \l, int

val) qui insère l’entier val en tête de liste.

5. Écrire une int\_list \delete\_elem(int\_list \l) qui supprime

l’élément se trouvant au début d’une liste l et retourne le reste de la liste. À noter

que la liste initiale doit contenir au moins un élément.

6. Écrire une fonction void free(int\_list \*l) qui libère l’espace mémoire

occupé par une liste l.

7. Écrire une fonction int\_list \delete\_val(int\_list \l,int val)

qui enlève la première occurrence de val dans la liste l.