Calculating Entropy of a file and coding it using Hamming

Discussion in 'C' started by kordellas, Jun 19, 2009.

  1. kordellas

    kordellas New Member

    Joined:
    Jun 19, 2009
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Hello there!

    I am trying to solve a problem for a project i took and i am in the final part of it...(view below for my until now code)

    Well the aim is to calculate the entropy of a file and then to use Hamming to code it. I managed to make both parts based on what I learned from the class and read in the book. (Please if you are familiar with the object tell me if it is correct :) )

    So, my problem is that I am not able to merge those two parts below (you don't need to read the theory for it).. like finding the entropy and then continue for the coding of that file.

    Any help, advice, anything is appreciate.
    Thank you!

    Entropy Calculation

    Code:
    #include "BufferedNode.h"
    #include "Buffer.h"
    #include "Vector.h"
    #include <strstream>
    #include <math.h>
    
    #ifdef HAVE_VALUES_H
    #include <values.h>
    #endif
    
    #ifdef HAVE_FLOAT_H
    #include <float.h>
    #endif
    
    class Entropy;
    
    DECLARE_NODE(Entropy)
    /*Node
     *
     * @name Entropy
     * @category DSP:Misc
     * @description Calculates the entropy of a vector
     *
     * @input_name INPUT
     * @input_type Vector<float>
     * @input_description Input vector
     *
     * @output_name OUTPUT
     * @output_type Vector<float>
     * @output_description Entropy value (vector of 1)
     *
    END*/
    
    
    class Entropy : public BufferedNode {
       
       int inputID;
       int outputID;
    
    public:
       Entropy(string nodeName, ParameterSet params)
          : BufferedNode(nodeName, params)
    
       {
          inputID = addInput("INPUT");
          outputID = addOutput("OUTPUT");
       }
    
       void calculate(int output_id, int count, Buffer &out)
       {
          ObjectRef inputValue = getInput(inputID, count);
    
          const Vector<float> &in = object_cast<Vector<float> > (inputValue);
          int inputLength = in.size();
    
          Vector<float> &output = *Vector<float>::alloc(1);
          out[count] = &output;
    
          float s2=0;
          float entr=0;
          for (int i=0;i<inputLength;i++)
          {
             s2+=in[i]*in[i];
          }
          s2 = 1/s2;
    
          for (int i=0;i<inputLength;i++)
          {
    	 if (in[i] != 0)
    	    entr -= s2*in[i]*in[i] * log(s2*in[i]*in[i]);
          }
          //cout << entr << endl;
          output[0] = entr;
       }
    
    };
    
    Hamming Coding

    Code:
    #include<iostream.h>   
    #include<math.h>   
    void hanming()   
    {   
    int i,n,k=2;   
    int h[20];   
    for(i=0;i<20;i++)h[i]=0;   
    cout<<"bla bla"<<endl; cin="">>n;   
    while(pow(2,k)<n+k+1)k++; cout=""><<"bla bla"<<endl; for(i="1;i<=n+k;i++){" if(i!="1&&i!=2&&i!=4&&i!=8)cin">>h[i];   
    }   
    h[1]=(h[3]+h[5]+h[7]+h[9]+h[11]+h[13]+h[15])%2;   
    h[2]=(h[3]+h[6]+h[7]+h[10]+h[11]+h[14]+h[15])%2;   
    h[4]=(h[5]+h[6]+h[7]+h[12]+h[13]+h[14]+h[15])%2;   
    h[8]=(h[9]+h[10]+h[11]+h[12]+h[13]+h[14]+h[15])%2;   
    for(i=1;i<=n+k;i++)cout<<h[i]; jiaoyan(int="" a[],int="" n)="" {="" i,p1,p2,p4,p8,m;="" int="" h[20];="" for(i="0;i<n;i++)h
    
    [i+1]=a[i];" k="2;" p1="(h[1]+h[3])%2;" p2="(h[2]+h[3])%2;" m="2*p2+p1;" return="" m;="" }="" if(n="=3){">=5&&n<=7){   
    // k=3;   
    p1=(h[1]+h[3]+h[5]+h[7])%2;   
    p2=(h[2]+h[3]+h[6]+h[7])%2;   
    p4=(h[4]+h[5]+h[6]+h[7])%2;   
    m=4*p4+2*p2+p1;   
    return m;   
    }   
    if(n>=9&&n<=15){   
    //k=4;   
    p1=(h[1]+h[3]+h[5]+h[7]+h[9]+h[11]+h[13]+h[15])%2;   
    p2=(h[2]+h[3]+h[6]+h[7]+h[10]+h[11]+h[14]+h[15])%2;   
    p4=(h[4]+h[5]+h[6]+h[7]+h[12]+h[13]+h[14]+h[15])%2;   
    p8=(h[8]+h[9]+h[10]+h[11]+h[12]+h[13]+h[14]+h[15])%2;   
    m=8*p8+4*p4+2*p2+p1;   
    return m;   
    }   
    else{   
    cout<<"bla bla"<<endl; return="" -1;="" }="" ����="" void="" main()="" {="" hanming();="" coco;="" int="" i,n,m,h[20];="" 
    
    cout=""><<endl; cout=""><<"bla bla"<<endl; cin="">>n;   
    cout<<"bla bla"<<endl; for(i="0;i<n;i++)cin">>h[i];   
    m=jiaoyan(h,n);   
    if(m==0)cout<<"bla bla"<<endl; if(m!="0)cout<<"bla bla"<<m;" cout=""><<endl; cin="">>coco;   
    }   
     
    Last edited by a moderator: Jun 19, 2009
  2. SaswatPadhi

    SaswatPadhi ~ Б0ЯИ Τ0 С0δЭ ~

    Joined:
    May 5, 2009
    Messages:
    1,342
    Likes Received:
    55
    Trophy Points:
    0
    Occupation:
    STUDENT !
    Location:
    Orissa, INDIA
    Home Page:
    http://www.crackingforfun.blogspot.com
    Your hamming code looks like an IOCCC entry ! :rofl:
    And it's probably not copied properly. Look :

    Code:
    ;="" 
    .
    .
    
    Anyway, you can use extern to use functions from another file. So you can just call the hamming function after executing the entropy calculation.
     
  3. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    Where is the main function?

    I agree with Saswat - how can this be your code? You cannot possibly have written code like that if you haven't got a clue how to "merge" it or even to explain what you mean by that.

    Out of interest I tried Googling "hamming jiaoyan" and it seems you've been busy posting this on lots of different forums with exactly the same response at each: what are you talking about, and in each case you failed to clarify.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice