Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

In C++ read.cpp #include #include using namespace std; int main(int argc, char *argv[]){ unsigned char ch; ifstream in(argv[1],ios::in|ios::binary|ios::ate); size_t size = 0; // here size

In C++

image text in transcribed

read.cpp

#include #include using namespace std; int main(int argc, char *argv[]){ unsigned char ch; ifstream in(argv[1],ios::in|ios::binary|ios::ate); size_t size = 0; // here size = in.tellg() ; // get the length of the file cout

decode.cpp

#include #include using namespace std; struct treenode { unsigned char data; treenode *left, *right; };

int strchr(unsigned char s[], unsigned char c) { int i=0; while(s[i]!=c) i++; return i; }

treenode * treebuild(unsigned char pre[], unsigned char in[], int & pos, int size) { if (size==pos) return NULL; treenode *t = new treenode; t->data = pre[pos]; t->left = NULL; t->right = NULL; int loc = strchr(in, pre[pos++]); in[loc] = 0; if (loc > 0 && in[loc-1] != 0) t->left = treebuild(pre, in, pos, size); if (loc right = treebuild(pre,in,pos, size); return t; }

void parse(string c, treenode *t) { treenode *p = t; for(int pos=0; pos left : p->right; if (p->left == NULL) { cout data; p = t; } } }

int main(int argc, char* argv[]) { ifstream prefile(argv[1],ios::in|ios::binary|ios::ate), infile(argv[2],ios::in|ios::binary), codefile(argv[3]); size_t size = 0; // here size = prefile.tellg() ; // get the length of the file prefile.seekg(0, ios::beg); // set the pointer to the beginning unsigned char *pre = new unsigned char[size], *in = new unsigned char[size]; for (int i =0; i

decodebin.cpp

#include #include using namespace std; struct treenode { unsigned char data; treenode *left, *right; };

int strchr(unsigned char s[], unsigned char c) { int i=0; while(s[i]!=c) i++; return i; }

treenode * treebuild(unsigned char pre[], unsigned char in[], int & pos, int size) { if (size==pos) return NULL; treenode *t = new treenode; t->data = pre[pos]; t->left = NULL; t->right = NULL; int loc = strchr(in, pre[pos++]); in[loc] = 0; if (loc > 0 && in[loc-1] != 0) t->left = treebuild(pre, in, pos, size); if (loc right = treebuild(pre,in,pos, size); return t; }

void parse(string c, treenode *t,short count) { treenode *p = t; for(int pos=0; pos left : p->right; if (p->left == NULL) { cout data; p = t; if(--count == 0) return; } } }

int main(int argc, char* argv[]) { ifstream prefile(argv[1],ios::in|ios::binary|ios::ate), infile(argv[2],ios::in|ios::binary), codefile(argv[3],ios::in|ios::binary|ios::ate); size_t size = 0; // here size = prefile.tellg() ; // get the length of the file prefile.seekg(0, ios::beg); // set the pointer to the beginning unsigned char *pre = new unsigned char[size], *in = new unsigned char[size]; for (int i =0; i(&count),2); for (int i=0; i>=1; } } parse(code,tree,count); cout Example Suppose that the file "foo.txt" contains the following text: ALLALABAMAFOOTBALL Huffman Code Trees Then executing: encode foo.txt should produce output flles such as the folloing. Note that this is only an example of a correct output. The tree and codes produced by your program would likely be different You are to write a program that reads a plain text file, computes a Huffman code tree for that text file, and writes out the encoded version ofthe text .Your program should read the text from the file given as a command-line . You should compute the number of occurrences of each character in the file, . You should build a min-heap contatntngthese nodes argument. and each character Cand lts frequency) should be placed In a new tree node preorder contains the bytes (note that these arethe VALUES of the bytes in the flle to see this output, run readon your file): 133 132 076 065 131 130 066 079 129 128 084 07O 077 Build the Huffman Code Tree using the heap. As you create neintnal nodes, give them a unique character label, using values 128 and greater. Write the pre order traversal of the Huffman code tree to the file "preorder" and the in-order traversal to the fle "inorder". Writethe byte value for each node in the traversal. The internal nodes will have values greater than 127 and the leaves will have values less thn 128. Write unsigned char values using the put(int) method. inorder contains the bytes(see note above): 076 132 065 133 066 130 079 131 084 128 070 129 077 code.txt contains: 010000010001100011110111011011011100100010000 .Construct a table contatning the encoding for each character, storlng the encoding as a string. .Encode the original text, writing the encoded verston to "code.txt". This flle should be ASCII 'O, and . 1' characters (much easier to debug) 5 honus points) also create a true binary version of the encoded text, writing it to "code.bin". In the btnary file, use the first two bytes to indicate the number of characters in the text. Ifthe last character does not finish a hyte then pad the last byte with 0's. Requirenents: . You should build all the data structures that you use yourself. You must create a binary heap data structure that uses an array and implements insert andexct-in that run in OUg N) time. . The only include files allowed are iostream and fstream Your makefile should build the executable namned "encode . Zip all ofyour source code and makefile into a single zip file for submission You must use good object based organization, ie. use classes in an appropriate way

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Fundamentals Study Guide

Authors: Dr. Sergio Pisano

1st Edition

B09K1WW84J, 979-8985115307

More Books

Students also viewed these Databases questions

Question

9. Power and politics can be destructive forces in organizations.

Answered: 1 week ago