Aiuto programma c++!! E' urgente!!! Grazie a tutti..

di il
46 risposte

46 Risposte - Pagina 2

  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    #include<iostream>
    #include<fstream>
    #include<cstring>
    #include<vector>
    
    
    using namespace std;
    
    class NODO
    {
    private:
        unsigned char carattere;
        int freq;
        NODO *sx,*dx;
    
    public:
        //Costruttore di inizializzazione
        NODO(unsigned char val=0, int i=-1)
        {
            carattere=val;
            freq=i;
            sx=0;
            dx=0;
        }
    
        //Costruttore di copia
        NODO(NODO *n1)
        {
            carattere=n1->carattere;
            freq=n1->freq;
            sx=n1->sx;
            dx=n1->dx;
        }
    
    //Costruisce un nuovo nodo interno padre dei nodi n0 e n1 avendo come frequenza la somma delle frequenze dei due figli
        NODO(NODO *c0,NODO *c1)
        {
            carattere=0;
            freq=c0->freq + c1->freq;
            sx=c0;
            dx=c1;
        }
    
    //Metodo per la lettura dell'attributo privato carattere
        unsigned char getCarattere() { return carattere; }
    
    //Metodo che setta l'attributo privato carattere con un parametro accettato in ingresso
        void setCarattere(unsigned char c)
        {
            carattere=c;
        }
    
    //Metodo per la lettura dell'attributo privato freq con un parametro accettato in ingresso
        int getFreq() { return freq; }
    
    //Metodo che setta l'attributo privato freq con un parametro accettato in ingresso
        void setFreq(int f)
        {
            freq=f;
        }
    
    //Metodo che restituisce il nodo filgio di sinistra
        NODO *getsx() { return sx; }
    
    //Metodo che restituise il nodo figlio di destra
        NODO *getdx() { return dx; }
    
    //L'operatore di confronto viene utilizzato per ordinare la coda di priorità in base alle frequenze
        bool operator > ( const NODO &a ) const
        {
            return freq>a.freq;
        }
    
    //Distruttore
        ~NODO(){}
    };
    
    
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    #include<iostream>
    #include<fstream>
    #include<cstring>
    #include<vector>
    
    
    using namespace std;
    
    class NODO
    {
    private:
        unsigned char carattere;
        int freq;
        NODO *sx,*dx;
    
    public:
        //Costruttore di inizializzazione
        NODO(unsigned char val=0, int i=-1)
        {
            carattere=val;
            freq=i;
            sx=0;
            dx=0;
        }
    
        //Costruttore di copia
        NODO(NODO *n1)
        {
            carattere=n1->carattere;
            freq=n1->freq;
            sx=n1->sx;
            dx=n1->dx;
        }
    
    //Costruisce un nuovo nodo interno padre dei nodi n0 e n1 avendo come frequenza la somma delle frequenze dei due figli
        NODO(NODO *c0,NODO *c1)
        {
            carattere=0;
            freq=c0->freq + c1->freq;
            sx=c0;
            dx=c1;
        }
    
    //Metodo per la lettura dell'attributo privato carattere
        unsigned char getCarattere() { return carattere; }
    
    //Metodo che setta l'attributo privato carattere con un parametro accettato in ingresso
        void setCarattere(unsigned char c)
        {
            carattere=c;
        }
    
    //Metodo per la lettura dell'attributo privato freq con un parametro accettato in ingresso
        int getFreq() { return freq; }
    
    //Metodo che setta l'attributo privato freq con un parametro accettato in ingresso
        void setFreq(int f)
        {
            freq=f;
        }
    
    //Metodo che restituisce il nodo filgio di sinistra
        NODO *getsx() { return sx; }
    
    //Metodo che restituise il nodo figlio di destra
        NODO *getdx() { return dx; }
    
    //L'operatore di confronto viene utilizzato per ordinare la coda di priorità in base alle frequenze
        bool operator > ( const NODO &a ) const
        {
            return freq>a.freq;
        }
    
    //Distruttore
        ~NODO(){}
    };
    
    
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    mauro85 ha scritto:


    #include<queue>
    #include <windows.h>
    #include<new>
    class INFO
    {
    private:
        unsigned cod,len;
    
    public:
        //Costruttore di inizializzazione
        INFO ()
        {
            cod=0;
            len=0;
        }
        //Costruttore di copia
        INFO(unsigned c,unsigned l)
        {
            cod=c;
            len=l;
        }
    
    //Metodo per la lettura dell'attributo privato cod
        unsigned getCod() { return cod; }
    
    //Metodo per la lettura dell'attributo privato len
        unsigned getLen() { return len; }
    
    //Metodo che setta l'attributo privato cod con un parametro accettato in ingresso
        void setCod(unsigned code)
        {
            cod=code;
        }
    
    //Metodo che setta l'attributo privato len con un parametro accettato in ingresso
        void setLen(unsigned l)
        {
            len=l;
        }
    
    //Distruttore
        ~INFO(){}
    };
    
    
    

    #include<iostream>
    #include<fstream>
    #include<cstring>
    #include<vector>
    
    
    using namespace std;
    
    class NODO
    {
    private:
        unsigned char carattere;
        int freq;
        NODO *sx,*dx;
    
    public:
        //Costruttore di inizializzazione
        NODO(unsigned char val=0, int i=-1)
        {
            carattere=val;
            freq=i;
            sx=0;
            dx=0;
        }
    
        //Costruttore di copia
        NODO(NODO *n1)
        {
            carattere=n1->carattere;
            freq=n1->freq;
            sx=n1->sx;
            dx=n1->dx;
        }
    
    //Costruisce un nuovo nodo interno padre dei nodi n0 e n1 avendo come frequenza la somma delle frequenze dei due figli
        NODO(NODO *c0,NODO *c1)
        {
            carattere=0;
            freq=c0->freq + c1->freq;
            sx=c0;
            dx=c1;
        }
    
    //Metodo per la lettura dell'attributo privato carattere
        unsigned char getCarattere() { return carattere; }
    
    //Metodo che setta l'attributo privato carattere con un parametro accettato in ingresso
        void setCarattere(unsigned char c)
        {
            carattere=c;
        }
    
    //Metodo per la lettura dell'attributo privato freq con un parametro accettato in ingresso
        int getFreq() { return freq; }
    
    //Metodo che setta l'attributo privato freq con un parametro accettato in ingresso
        void setFreq(int f)
        {
            freq=f;
        }
    
    //Metodo che restituisce il nodo filgio di sinistra
        NODO *getsx() { return sx; }
    
    //Metodo che restituise il nodo figlio di destra
        NODO *getdx() { return dx; }
    
    //L'operatore di confronto viene utilizzato per ordinare la coda di priorità in base alle frequenze
        bool operator > ( const NODO &a ) const
        {
            return freq>a.freq;
        }
    
    //Distruttore
        ~NODO(){}
    };
    
    
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Sopra ho postato il codice di huffman,che non è in grado di comprimere file di piccole dimensioni.
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Hai un esempio di file piccolo con il quale riscontri l'errore?
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    #include<iostream>
    #include<fstream>
    #include<cstring>
    #include<vector>
    
    
    using namespace std;
    
    class NODO
    {
    private:
        unsigned char carattere;
        int freq;
        NODO *sx,*dx;
    
    public:
        //Costruttore di inizializzazione
        NODO(unsigned char val=0, int i=-1)
        {
            carattere=val;
            freq=i;
            sx=0;
            dx=0;
        }
    
        //Costruttore di copia
        NODO(NODO *n1)
        {
            carattere=n1->carattere;
            freq=n1->freq;
            sx=n1->sx;
            dx=n1->dx;
        }
    
    //Costruisce un nuovo nodo interno padre dei nodi n0 e n1 avendo come frequenza la somma delle frequenze dei due figli
        NODO(NODO *c0,NODO *c1)
        {
            carattere=0;
            freq=c0->freq + c1->freq;
            sx=c0;
            dx=c1;
        }
    
    //Metodo per la lettura dell'attributo privato carattere
        unsigned char getCarattere() { return carattere; }
    
    //Metodo che setta l'attributo privato carattere con un parametro accettato in ingresso
        void setCarattere(unsigned char c)
        {
            carattere=c;
        }
    
    //Metodo per la lettura dell'attributo privato freq con un parametro accettato in ingresso
        int getFreq() { return freq; }
    
    //Metodo che setta l'attributo privato freq con un parametro accettato in ingresso
        void setFreq(int f)
        {
            freq=f;
        }
    
    //Metodo che restituisce il nodo filgio di sinistra
        NODO *getsx() { return sx; }
    
    //Metodo che restituise il nodo figlio di destra
        NODO *getdx() { return dx; }
    
    //L'operatore di confronto viene utilizzato per ordinare la coda di priorità in base alle frequenze
        bool operator > ( const NODO &a ) const
        {
            return freq>a.freq;
        }
    
    //Distruttore
        ~NODO(){}
    };
    
    
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Ti scrivo il suo contenuto:

    Il professor amastra fa un salto di gioia se gli comprano un Data Glove.
    Speriamo che Babbo Nataler questy' anno sia buono.
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Ho provato con il testo la codifica e la decodifica e funziona.
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Hai visto quanti byte è il file compresso?
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Lo so che funziona,ma il file compresso risulta essere di dimensioni maggiori rispetto all' originale.
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    mauro85 ha scritto:


    Lo so che funziona,ma il file compresso risulta essere di dimensioni maggiori rispetto all' originale.
    Mi viene spontaneo chiedere: "chi ha scritto il programma?"
    Ovvio che per piccoli file non è sempre conveniente la compressione. La tabella di frequenza che registri nel
    tuo file huf può essere più grande del file di origine.

    "Il guadagno di spazio al termine della compressione è dovuto al fatto che gli elementi che si ripetono frequentemente sono identificati da un codice breve, che occupa meno spazio di quanto ne occuperebbe la loro codifica normale. Viceversa gli elementi rari nel file originale ricevono nel file compresso una codifica lunga, che può richiedere, per ciascuno di essi, uno spazio anche notevolmente maggiore di quello occupato nel file non compresso."
    From:http://www.diodati.org/scritti/2001/algoritmi/algor06.asp

    Hai ancora dei dubbi? Prova ad usare qualsiasi zipper su file piccoli (<200byte) e vedrai.
    Tanti Salutiiiiiii
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Ovviamente l'ho scritto io!Lo so ho provato a comprimere il file con winrar e il file compresso ha una dimensione maggiore rispetto all' originale.
    Quindi mi stai dicendo che è normale che sia così,cioè non devo apportare nessuna modifica al programma?
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    VERAMENTE UN CASINO! due problemi sullo stesso topic non possono essere risolti...
    chi ha ancora bisogno di aiuto lo invito gentilmente a creare un nuovo topic con il titolo consono all'argomento, non troppo generale...
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Codice di huffman
    Ho postato il codice che esegue la compressione secondo huffman,il problema è che non mi comprime file di piccole dimensioni.Scrivo sotto il contenuto del file di cui parlo:

    Il professor amastra fa un salto di gioia se gli comprano un Data Glove.
    Speriamo che Babbo Nataler questy' anno sia buono.

    Ho un altro problema, nella decodifica di questo file mi scrive il carattere di fine file ÿ.Come mai?
  • Re: Aiuto programma c++!! E' urgente!!! Grazie a tutti..

    Ufffff....man
    
    max@studio:~/tmp> cat test
    Il professor amastra fa un salto di gioia se gli comprano un Data Glove.
    Speriamo che Babbo Nataler questy' anno sia buono.
    
    max@studio:~/tmp> hexdump -C test.huf
    00000000  00 20 0a 00 00 00 03 20  00 00 00 14 27 00 00 00  |. ..... ....'...|
    00000010  01 2e 00 00 00 02 42 00  00 00 01 44 00 00 00 01  |......B....D....|
    00000020  47 00 00 00 01 49 00 00  00 01 4e 00 00 00 01 53  |G....I....N....S|
    00000030  00 00 00 01 61 00 00 00  0f 62 00 00 00 03 63 00  |....a....b....c.|
    00000040  00 00 02 64 00 00 00 01  65 00 00 00 07 66 00 00  |...d....e....f..|
    00000050  00 02 67 00 00 00 02 68  00 00 00 01 69 00 00 00  |..g....h....i...|
    00000060  06 6c 00 00 00 05 6d 00  00 00 03 6e 00 00 00 06  |.l....m....n....|
    00000070  6f 00 00 00 0c 70 00 00  00 03 71 00 00 00 01 72  |o....p....q....r|
    00000080  00 00 00 06 73 00 00 00  07 74 00 00 00 05 75 00  |....s....t....u.|
    00000090  00 00 04 76 00 00 00 01  79 00 00 00 01 ff 00 00  |...v....y.......|
    000000a0  00 01 00 00 02 28 b3 7d  f7 87 0b 10 3d 99 9c 77  |.....(.}....=..w|
    000000b0  cf 70 f5 53 43 bf 46 96  5a 72 04 f4 2e 9e e5 a9  |.p.SC.F.Zr......|
    000000c0  06 fb cd 06 aa 6e 77 d7  a4 5c 49 5b 4f 63 e5 f1  |.....nw..\I[Oc..|
    000000d0  33 0d 4d 15 d3 5f ff 8d  41 f5 dd 7d a6 55 63 b2  |3.M.._..A..}.Uc.|
    000000e0  b9 b3 44 1a 09 ef ea 10  5a 73 f2                 |..D.....Zs.|
    000000eb
    
    Verifica bene la tua variabile n_bit
    
    max@studio:~/tmp> ll test*
    -rw-r--r-- 1 max users 125  7 gen 23:47 test
    -rw-r--r-- 1 max users 235  7 gen 23:48 test.huf
    -rw-r--r-- 1 max users 125  7 gen 23:48 test.out
    max@studio:~/tmp>
    max@studio:~/tmp> diff test test.out
    max@studio:~/tmp>
    
    
    Ora sono uguali all'ultimo byte

    Sperando di chiudere questo topic,
    Max
Devi accedere o registrarti per scrivere nel forum
46 risposte