Bonjour tout le monde.
j'ai essayé de résoudre un exercice sur les tableaux représentés par une structure. je vous soumis l'exo et ma correction. merci de me dire ce que vous en pensez. Cet exo me trouble car je ne sais vraiment pas si ma solution est bonne ou complètement fausse. Merci pour votre aide.
Dans cet exercice, on nous propose de définir des fonctions permettant de compresser des tableaux et des fonctions permettant de manipuler ces tableaux.
La compression élimine le '0' (zéro) contnus dans un tableau afin d'économiser de l'espace mémoire.
Le Tableau compressé sera représenté par une structure nommée "creux" . elle contient trois informations :
une tableau d'indice ind et un tableau de valeurs réelles Val, et un entier nb.
Les règles pour créer un tableau compressé C à partir d'un tableau T sont les suivantes:
-- Pour le tableau d'indices, C.ind[p]=i si T[i] est le (p+1)ème élément de T différent de 0 (C.ind [0] étant le 1er élément de T différent de 0).
-- Pour le tableau de valeurs val, C.val[p] = T[i].
-- nb est le nombre d'élément non nuls du tableau T.
Exemple: soit le Tableau T = |0|1.6|0| 9|7|
La structure Creuse lui correspondant sera :
pour le tableau d 'indice C.ind = |1|3|4|.
Pour le tableau de Valeurs C.val = |1.6|9|7|.
Questions:
Q1) Déclarez le type struct creux.Les tableaux val et ind sont alloués dynamiquement .
Q2) Faites une fonction struct creux *new(int n). qui alloue dynamiquement une structure creuse où les tableaux ind et val seront de taille n.Cette fonction retourne un pointeur vers cette structure.
Q3) Faites une fonction struct creux *initialise(float T[N]) , qui, à partir d'un tableau T, crée dynamiquement la structure creuse correspondante et initialise celle ci à l'aide du tableau T. Cette fonction retourne un pointeur vers cette structure.
Mes Réponses: :
//*********************************************************
Code : C
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include <stdio.h> typedef struct creux { int *ind; float *val; // Q1 int nb; }Creux; Creux *new (int n)</couleur> //Q2 { Creux *C; C->ind= malloc(n* sizeof (int)); C->val= malloc(n* sizeof (float)); if(C==NULL) printf("ALLOCATION MEMOIRE ECHOUEE !"); return C; } Creux *Initialise (float T[taille], int taille) //Q3 { int i; Creux *C; C=new(taille); C.nb=0; For (i=0;i<taille;i++) { if(T[i]!=0){ C.nb++; // on incrémente le nombre de valeur non nulles C->(ind+i)=C.nb;// on range ici, dans le tableau inb, le num des indices des valeurs non nulles C->val=T[(ind+i)];//on rempli le tableau C.val des valeur non nulles de T[]. printf("les valeurs du tableau compressées sont: %d\n ",C->(val+i)); } }
Partager