|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6404
|
Quote:
while(!feof(in)){ v= fgetc(in); if(PHuff[v]==NULL) {PHuff[v]=new Huffman(v,1,NULL,NULL);} else {if(v>=0){PHuff[v]->frequenza++;}} } fclose(in); Tu dici che dovrei scrivere cosi? while((v=fgetc(in))>=0){PHuff[v]->frequenza++;} e basta? Quindi il controllo sullla fine del file mi viene direttamente da v quando vale -1. Pero' devo metterci anche il codice che mi fa puntare il puntatore nella posizione v ad un'oggetto di tipo Huffman,quello non posso toglierlo. Incremento la frequenza solo se ho giò incontrato quel simbolo |
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6404
|
Quote:
while(v= fgetc(in)>=0){ if(PHuff[v]==NULL) {PHuff[v]=new Huffman(v,1,NULL,NULL);} else {PHuff[v]->frequenza++;} } fclose(in); cout<<"3"; return PHuff; e funziona lo stesso, non so se in quell'altro modo andasse veramente, magari mi creava l'albero ma era tutto sbagliato |
|
|
|
|
|
|
#23 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6404
|
Quote:
No aspetta, questa cosa non mi torna. Io ho un'array di puntatori tutti inizializzati a NULL e siamo d'accordo. Se ho trovato un simbolo v nuovo nel file che sto leggendo devo inizializzare tale puntatore nella posizione v facendolo puntare ad un oggetto di tipo Huffman (v,1,NULL,NULL). Tale controllo devo mettercelo, ma allora lo creo se la frequenza di quel nodo è 0. In pratica: while(v=fgetc(in)>=0){ if(PHuff[v]->frequenza=0) {PHuff[v]=new Huffman(v,1,NULL,NULL);} else {PHuff[v]->frequenza++;} } fclose(in); va bene cosi'?il programma gira |
|
|
|
|
|
|
#25 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Se non vuoi questo comportamento devi cambiare la Codice:
for(unsigned pos=0; pos<256; ++pos) {
PHuff[pos] = new Huffman(pos, 0, NULL, NULL);
}
Codice:
for(unsigned pos=0; pos<256; ++pos) {
PHuff[pos] = NULL;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6404
|
Quote:
|
|
|
|
|
|
|
#27 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6404
|
Quote:
Ciao,scusa se ti ridisturbo, il programma gira,ma accade una ocsa stranissima.Ho preso un fileprova.txt in cui ci ho scritto : file di prova,vediamo se funziona Ebbene, per vedere se funzionava il tutto ho messo delle stampe a video dopo la funzione fgetc e con grande sorpresa ho notato che mi da sempre 1! Cioè v, vale sempre 1, infatti il programma giustamente scrive 34 volte, (il numero delle battiture nel file di esempio), nella posizione 1 dell'array di puntatori. Come mai? |
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6404
|
Ho risolto rispolveranto la funzione feof ma facendo un controllo dopo sul vaolre restituito da v;
while(!feof(in)){ v=fgetc(in); if(v>=0){ cout<<"\n"<<"questa è la v: "<<v; PHuff[v]->frequenza++; } } Adesso funziona ! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:53.



















