Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 23h45   #1
salem1992
 
Inscription : janvier 2013
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2013
Messages : 2
Points : -3
Points : -3
Par défaut Arbre de huffman

parmi les technique de compression on trouve le codage de huffman ,on souhaite impémenter ce codage mais avec un arbre donné par l'utilisateur .
Au debut du programme;l'arbre est vide,l'utilisateur peu lui ajouter par la suie des caractere avec leur code en respectant la régle de huffman exigeant qu'aucun code n'est préfixe d'un autre

les questions sont:
ecrire en langage c,un programme permettant à son utilisateur de:
1.ajouter un code d'un caractere à l'arbre
2.supprimer un caractere de l'arbre
3.afficher la liste de tous caractere avec leurs code
4.décoder une chaine binaire donnée
5.coder une chaine de caractére donnée
enfin;Je vous souhaite à aider
salem1992 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 06h28   #2
Neckara
Rédacteur
 
Avatar de Neckara
 
Homme Denis
Étudiant
Inscription : décembre 2011
Messages : 2 620
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 2 620
Points : 7 271
Points : 7 271
Envoyer un message via MSN à Neckara Envoyer un message via Skype™ à Neckara
Bonjour,

Personne ne fera l’exercice à ta place.
Si tu veux qu'on t'aide, il faut nous poser des questions ou nous dire où tu bloques, nous montrer ce que tu as déjà fait, etc.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon.

Chaîne Youtube : Vidéos

Ma page DVP : http://neckara.developpez.com/
Neckara est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/01/2013, 11h41   #3
salem1992
 
Inscription : janvier 2013
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2013
Messages : 2
Points : -3
Points : -3
Code :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
#include<stdio.h>
    #include<stdlib.h>
    //************************ LA STRUCTURE DE L'ABRE ******************************
    typedef struct TNoeud{
    char val;
    struct TNoeud *FG;
    struct TNoeud *FD;
    }TNoeud;
    //********************* Fonnction creation une Noeud ***************************
    TNoeud* creeNoeud (char val)
    {
    TNoeud *q=(TNoeud*)malloc(sizeof(TNoeud));
    q -> val = val;
    q -> FG = NULL;
    q -> FD = NULL;
    return q;
    }
    //******************************************************************************
    TNoeud* Inserer (TNoeud *Racine,char val,char *Branche )
    {
    TNoeud *Noeud;
    int i=0;
    if (Racine==NULL) {
    Racine = creeNoeud(' ');
    }
    Noeud=Racine;
    while (i<strlen(Branche))
    {
    if(Branche[i]==' ')
    {
    if(Noeud->FG!=NULL )
    {
    Noeud=Noeud->FG;
    }
    else
    {
    Noeud->FG=creeNoeud(' ');
    Noeud=Noeud->FG;
    }
    }
    else
    {
    if(Noeud->FD!=NULL )
    {
    Noeud=Noeud->FD;
    }
    else
    {
    Noeud->FD=creeNoeud(' ');
    Noeud=Noeud->FD;
    }
    }
    i++;
    }
    Noeud->val=val;
    return Racine;
    }
 
    //******************** FONCTION RECHERCHER PAR VALEUR **************************
    TNoeud* RechVal (TNoeud *Racine,char val)
    {
    TNoeud *q = NULL;
    if(Racine==NULL)
    {
    return NULL;
    }
    else
    {
    //****************** si trouvé la valeur souhaitée *****************************
    if(val == Racine->val)
    {
    return Racine;
    }
    else
    {
    q =RechVal(Racine->FG, val);
    if(q == NULL)
    {
    q = RechVal(Racine->FD, val);
    }
    return q;
    }
    }
    }
    //******************** FONCTION RECHERCHER PAR ADRESSE *************************
    TNoeud* RechAdr (TNoeud *Racine,TNoeud *Noeud)
    {
    TNoeud *q = NULL;
    if(Racine==NULL)
    {
    return NULL;
    }
    else
    {
    //***************** si trouvé la adresse souhaitée *****************************
    if(Noeud== Racine->FG||Noeud== Racine->FD)
    {
    return Racine;
    }
    else
    {
    q =RechAdr(Racine->FG,Noeud);
    if(q == NULL)
    {
    q = RechAdr(Racine->FD,Noeud);
    }
    return q;
    }
    }
    }
    //***************************** PROCEDURE SUPPRIMER ****************************
    void Supprimer (TNoeud *Racine, char val )
    {
    TNoeud *q,*p;
    p=RechVal(Racine,val);
    q=RechAdr(Racine,p);
    if ( q->FG == p)
    {
    q->FG=NULL;
    }
    else
    {
    q->FD=NULL;
    }
    //***************************** Liberer le noeud *******************************
    free(p);
    while (q->FG==NULL && q->FD==NULL)
    { p=q;
    q=RechAdr(Racine,q);
    free(p);
    }
    }
    //*********************** FONCTION CODER UN CARACTAIRE *************************
    char *CBranche(TNoeud *Racine,char val)
    {
    TNoeud *q,*p;
    char chn[100];
    int i=0;
    p=RechVal(Racine,val);
    q=RechAdr(Racine,p);
 
    while (q!=Racine)
    {
    p=q;
    if ( q->FG == p)
    {
    chn[i]='0';
    }
    else
    {
    chn[i]='1';
    }
    q=RechAdr(Racine,p);
    i++;
    }
    chn[i]='\0';
    return ;
    }
    //********************** PROCEDURE DECODER UN SUITE BINAIRE ********************
    void Decoder (TNoeud *Racine ,char *code)
    {
    TNoeud *q;
    int i=0;
    if( Racine == NULL )
    {
    printf("\n* VOUS NE POUVEZ PAS RECHERCHER L\'ARBRE VIDE !! *");
    printf("\n****************************************************\n");
    return;
    }
    while(code[i]!='\0' ||(q->FG=NULL && q->FD==NULL))
    {
    if(code[i]='0')
    {
    q=Racine->FG;
    }
    else
    {
    q=Racine->FD;
    }
    i++;
    }
    if(q->FG==NULL && q->FD==NULL)
    {
    printf("%c",q->val);
    }
    }
    //******************************************************************************
    void AffListe (TNoeud *Racine)
    {
    TNoeud *q=Racine;
    if (Racine ==NULL)
    {
    return ;
    }
    else
    {
    if(Racine->val!=' ')
    {
    printf("%c : ",Racine->val);
    //coder(q,Racine->val);
    printf("\n");
    }
    else
    {
    AffListe(Racine->FG);
    AffListe(Racine->FD);
    }
    }
 
    }
    //******************************************************************************
    int main()
    {
    TNoeud *Racine = NULL;
    TNoeud *Noeud=NULL;
    char chn[10], val;
    int i,tst,choix,q;
    do
    {
    do
    {
    system("cls");
    printf("***********************************************************\n");
    printf("TAPPEZ LE CODE BINAIRE :");
    i=0;
    scanf("%s",chn);
    while(chn[i]=='0'||chn[i]=='1')
    {
    i++;
    }
 
    }while(i!=strlen(chn));
    printf("TAPPEZ LA VALEUR DE CARACTAIRE :");
    getchar();
    scanf("%c",&val);
    printf("***********************************************************\n");
    printf("POUR CREE UN NOVEAU TAPPEZ [1] :");
    scanf("%d",&tst);
    }while(q==tst);
    do{
    system("cls");
    printf("**********************************************************\n");
    printf("*\t\t CODAGE DE HUFFMAN *\n");
    printf("**********************************************************\n");
    printf("**********************************************************\n");
    printf("*[1]-AJOUTER UN CODE D’UN CARACTERE A L/’ARBRE *\n");
    printf("*[2]-SUPPRIMER UN CARACTERE DE L’ARBRE *\n");
    printf("*[3]-AFFICHER LA LISTE *\n");
    printf("*[4]-DECODER UNE CHAINE BINAIRE *\n");
    printf("*[5]-CODER UNE CHAINE DE CARACTERES *\n");
    printf("*[6]-CODER UNE CHAINE DE CARACTERES DONNEE *\n");
    printf("**********************************************************\n");
    printf("\t ENTREZ VOTRE CHOIX : ");scanf("%d",&choix);
    printf("**********************************************************\n");
    switch (choix)
    {
    case 1: Inserer;
    printf(" ");
    break;
    case 2: Supprimer;
    printf(" ");
    getch();
    break;
    case 3:printf("ccccccccc");
    break;
    case 4:printf("ddddddddd");
    break;
    case 5:printf("eeeeeeeee");
    break;
    }
    if(choix <6)
    {
    printf("\n**********************************************************\n");
    printf("\tPOUR CONTINUER TAPEZ [1] : ");scanf("%d",&q);
    printf("**********************************************************\n");
    if(q!=1)
    {
    choix=6;
    }
    }
 
    }while(choix<6);
 
    return 0;
    }



voilà mà essai plz help me
salem1992 est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 19/01/2013, 15h36   #4
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 437
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 437
Points : 12 977
Points : 12 977
1- Ton code est illisible à cause d'une indentation déplorable. Tu réduis à presque rien tes chances d'obtenir de l'aide.

2- De plus, pour citer Neckara :
Citation:
Si tu veux qu'on t'aide, il faut nous poser des questions ou nous dire où tu bloques,
__________________
Publication : Concepts en C

Mon avatar : Glenn Gould

--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h47.


 
 
 
 
Partenaires

Hébergement Web