Tableaux Uni-dimensionels Creux ! HELP SVP!
2 participants
Page 1 sur 1
Tableaux Uni-dimensionels Creux ! HELP SVP!
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. Cette exo me trouble car je ne sais vraiment pas si ma solution est bonne ou complètement fausse. Merci pour votre aide.
Dans cette 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 les '0' (zéro) continus 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 lz 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: :
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. Cette exo me trouble car je ne sais vraiment pas si ma solution est bonne ou complètement fausse. Merci pour votre aide.
Dans cette 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 les '0' (zéro) continus 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 lz 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:
#include <stdio.h>
typedef struct creux
{
int *ind;
float *val; // Q1
int nb;
}
Creux;
Creux *new (int n) //Q2
{
Creux *C;
if (C == NULL)
printf ("ALLOCATION MEMOIRE ECHOUEE !");
else
{
C->ind = malloc (n * sizeof (int));
C->val = malloc (n * sizeof (float));
}
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 valeures non nulles
C->val = T[(ind + i)]; //on rempli le tableau C.val des valeur non nulles de T[].
printf ("les valeures du tabeleau compressées sont: %d\n",
C->(val + i));
}
}
}
Dernière édition par -ed- le Mar 15 Juin 2010 - 14:02, édité 2 fois (Raison : Mise en forme du code)
zemzm- Messages : 3
Date d'inscription : 08/03/2010
Re: Tableaux Uni-dimensionels Creux ! HELP SVP!
<Étude en cours ...>
Il y a déjà pas mal d'erreurs dans le code ...
Manque <stdlib.h> pour malloc() ...
Ceci compile, mais je n'ai pas du tout l'impression que ça fasse ce que tu veux ...
Il y a déjà pas mal d'erreurs dans le code ...
- Code:
-------------- Build: Debug in hello ---------------
Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c: In function 'new':
C:\dev\hello\main.c:21: warning: implicit declaration of function 'malloc'
C:\dev\hello\main.c:21: warning: incompatible implicit declaration of built-in function 'malloc'
C:\dev\hello\main.c: At top level:
C:\dev\hello\main.c:29: error: 'taille' undeclared here (not in a function)
C:\dev\hello\main.c: In function 'Initialise':
C:\dev\hello\main.c:35: error: request for member 'nb' in something not a structure or union
C:\dev\hello\main.c:36: warning: implicit declaration of function 'For'
C:\dev\hello\main.c:36: error: expected ')' before ';' token
C:\dev\hello\main.c:39: error: expected ';' before '{' token
C:\dev\hello\main.c:29: warning: unused parameter 'T'
Process terminated with status 1 (0 minutes, 3 seconds)
4 errors, 4 warnings
Manque <stdlib.h> pour malloc() ...
Ceci compile, mais je n'ai pas du tout l'impression que ça fasse ce que tu veux ...
- Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int *ind;
float *val; /* Q1 */
int nb;
}
Creux;
Creux *create (int n) /* Q2 */
{
Creux *C = malloc (sizeof *C);
if (C == NULL)
{
printf ("ALLOCATION MEMOIRE ECHOUEE !");
}
else
{
C->ind = malloc (n * sizeof (int));
C->val = malloc (n * sizeof (float));
}
return C;
}
Creux *Initialise (float T[], int taille) /* Q3 */
{
int i;
Creux *C;
C = create (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 valeures non nulles */
C->val[i] = T[C->ind[i]]; /* on rempli le tableau C.val des valeur non nulles de T[]. */
printf ("les valeurs du tableau compressé sont : %d\n",
C->val[i]);
}
}
return C;
}
void display(Creux *c)
{
}
int main (void)
{
float T[] = {1,0,0,2,0,3,4,0,0,0,5,6,7};
Creux *c = Initialise (T, sizeof T / sizeof *T);
display(c);
return 0;
}
merci pour ta réponse .
bonsoir -ed,
je tiens a te remercie pour ta réponse. en effet ta solution marche bien. je l'ai arrangé un peu et cela donne.
*****************
j'ai compilé ce programme et et cela compile et cela donne bien le résultat attendu.
bonne soirée à toi.
je tiens a te remercie pour ta réponse. en effet ta solution marche bien. je l'ai arrangé un peu et cela donne.
- Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct creux
{
int *ind;
float *val;
int nb;
}Creux;
Creux *new_creux(int n)
{
Creux *C;
C= malloc(sizeof(Creux));
if(C==NULL)
{printf("//!\\ERREUR D'ALLOCATION DU CREUX //!\\ \n");}
else{
C->ind= malloc(n* sizeof (int));
C->val= malloc(n* sizeof (float));
}
if ((C->ind==NULL)||(C->val==NULL))
{printf("//!\\ERREUR D'ALLOCATION DES DEUX TABLEAUX IND ET VAL //!\\ \n");}
return C;
}
Creux *Initialise(float *T, int taille)
{
int i;
Creux *C;
C=new_creux(taille);
for (i=0;i < taille;i++)
{
if(T[i]!=0)
{
C->ind[i]=i;// on range ici, dans le tableau inb, le num des indices des valeures non nulles
C->val[i]=T[i];//on rempli le tableau C.val des valeur non nulles de T[].
C->nb+=1; // on incrémente le nombre de valeur non nulles
printf("les valeur du tableau creux : %f\n ",C->val[i]);
}
}
return C;
}
int main()
{
Creux *C1;
float tab[5]= {0,5,0,4,6};
int i;
int taille=5;
C1=new_creux(taille);
C1=Initialise(tab,taille);
printf("les valeures non nulles est de : %d\n ",C1->nb);
free(C1);
return 0;
}
*****************
j'ai compilé ce programme et et cela compile et cela donne bien le résultat attendu.
bonne soirée à toi.
zemzm- Messages : 3
Date d'inscription : 08/03/2010
Re: Tableaux Uni-dimensionels Creux ! HELP SVP!
Dans main(),
Comme déjà signalé, il manque des fonctions d'affichage pour prouver le bon fonctionnement.
- Code:
C1 = new_creux (taille);
Comme déjà signalé, il manque des fonctions d'affichage pour prouver le bon fonctionnement.
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum