Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Huffman help !!!

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    6

    Mặc định Huffman help !!!

    Mình chạy project này bằng VS 2005 nhưng bị lỗi mình chưa biết sửa như thế nào mong các bạn chỉ giúp.
    Đang làm bài tập lớn VC++ mã hóa và giải mã văn bản bằng Huffman.
    Attached Files Attached Files

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    cái này mở và chạy bằng VC6 là ok, đừng mở bằng VC2k5
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    6

    Àh ra vậy cảm ơn bạn. Nhưng mình muốn chạy bằng VS 2005 thì phải viết lại như thế nào?

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trong VC6, nếu bạn khai báo biến chạy khi bắt đầu vòng for thì khi ra ngoài mà bạn khai báo lại biến đó thì sẽ bị báo lỗi. Nhưng vc2k5 thì bạn phải khai báo lại biến mặc dù đã khai báo ở đầu vòng for.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    6

    Sao vẫn không được nhỉ? Bạn nói phải khai báo lại ngoài for đúng ko? không được. Bạn giúp mình sửa lỗi này được ko?
    Attached Files Attached Files

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Mặc định Huffman help !!!

    Debug thường người ta chia thành từng nhóm nhỏ để debug,cậu chắc chắn những phần nào rồi,có chắc phần xây dựng cây không...

  7. #7
    Ngày gia nhập
    11 2008
    Bài viết
    6

    Bạn yên tâm mình coi code này thấy về mặt logic chương trình thi chuẩn rồi nhưng có lẽ thay đổi môi trường chạy nên có thể cú pháp không thích hợp. Mình nghĩ là như thế ? nhưng không biết sửa như thế nào?
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi tst12346 : 02-03-2009 lúc 05:22 PM.

  8. #8
    Ngày gia nhập
    11 2008
    Bài viết
    73

    - Thêm int trước i ở mỗi vòng for.
    - Trong phần FileReader, bạn nên thêm điều kiện kiểm tra xem file dữ liệu có tồn tại không.

  9. #9
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Code:
    // Thinh.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "iostream"
    #include "string.h"
    #include "conio.h"
    using namespace std;
    
    typedef struct HufNode
    {
    	unsigned int sumfreq;
    	unsigned int node;
    	struct HufNode *parent,*left,*right;
    	 int freq;
    	 int freqTable[10];
    };
    class En_Decode
    {
    public:
    	int numnode;
    	int numnode2;
    	HufNode  tree[256];
       	HufNode *temptree[256];
    	HufNode *parrent;
    public:
    	En_Decode()
    	{
    		for(int i=0;i<256;i++)
    		{
    			tree[i].freq = 0;
    			tree[i].node = i;
    			tree[i].left = NULL;
    			tree[i].right = NULL;
    			tree[i].parent = NULL;
    		//	tree[i].sumfreq[i] = 0;
    		}
    	}
    		
        void MakeFreq(char *);
    	void SortNode(int);
    	void BuildHufTree();
    	void GenerateTable();
    	~En_Decode()
    	{
    	
    	}
    };
    void En_Decode::MakeFreq(char *stringin)
    {
    	int j = 0;
    	int i = 0;
    	char ch;
    	while(ch = stringin[j], ch!=stringin[strlen(stringin)])
    	//while((ch = stringin[j]) && (ch!=stringin[strlen(stringin)]))
    	{
    			tree[ch].freq ++;
    	}
       j=0;
       for( i = 0;i <256;i++)
    		if(tree[i].freq>0)
    		{
    			temptree[j] = &tree[i];
    			j++;
    		}
    		numnode =j+1;
      }
    void En_Decode::SortNode(int i)//Sap xep chon giam dan
    	{
    	    HufNode *temp2;
    		temp2 = new HufNode;
    		for( int j=0;j<i-1;j++)
    			for(int k=j+1;k<i;k++)
    				if(temptree[k]->freq > temptree[j]->freq)
    				{
    					temp2 = temptree[k];
    					temptree[k]=temptree[k-1];
    					temptree[k-1] = temp2;
    				}
    			delete temp2;
    	}
    void En_Decode::BuildHufTree()
    	{
    	    HufNode *buildtree[256];
    		for(int i =0;i<numnode;i++)
    			buildtree[i] = temptree[i];
    		int temp = numnode;//So node la so ki tu xuat hien trong file van ban.
    		while(temp != 0)
    		{
    			SortNode(temp);//Sap xep giam dan
    			parrent->freq = temptree[temp-1]->freq + temptree[temp-2]->freq;//Lay tong cua hai node co freq nho nhat, tuc la hai node o cuoi cung
                parrent->left = temptree[temp-2];// nhanh trai cua parent la node nho thu nhi
    			parrent->right = temptree[temp-1];// nhanh phai cua parent la node nho nhat
    			temptree[temp-2]->parent = parrent;//Gan Nut parent cua [temp - 2] la parrent
    			temptree[temp-1]->parent = parrent;//Gan Nut parent cua [temp - 1] la parrent
    			for(int i=0;i < temp-2;i++)
    			{
    				buildtree[i] = temptree[i];//Xay lai cay nhung giam di 2 node
    			}
    			buildtree[temp-2] = parrent;//phan tu cuoi la parrent
    			temp --;//giam temp di 1 phan tu vi bo di 2 lay duoc 1
    		}
    	}
    void En_Decode::GenerateTable()
    	{
    	    BuildHufTree();
    		unsigned int a[10];
    		int j=0;
    		for(int i=0;i<numnode;i++)
    		{
    			while(temptree[i]->parent !=NULL)
    			{
    				if(temptree[i]->parent->left == temptree[i]) a[j] = 0;// Node trai thi gan 0
    				else a[j] = 1;// Node phai thi gan 1
    				j++;
    			}
    			int k=0;
    			while(j!=-1)
    			{
    				temptree[k]->freqTable[k]=a[j];
    				j--;
    				k++;
    			}
    			temptree[i]->sumfreq = k;
    		}
    	}
    int main(int argc, char* argv[])
    {
    	En_Decode mahoa;
    	char * string;
    	string = new char[100];
    	cout<<"\nNhap vao 1 chuoi : ";
    	cin.ignore();
    	cin.getline(string,100);
    	mahoa.MakeFreq(string);
    	mahoa.BuildHufTree();
    	mahoa.GenerateTable();
    	int j,i;
    	//In ra ma Huffman
    	for(i =0;i<256;i++)
    	{
    		if(mahoa.tree[i].freq>0)
    		for(j =0;j<mahoa.tree[i].sumfreq;j++)
    		{
    		cout<<"  "<<char(i)<<"     "<<mahoa.tree[i].freqTable[j];
    		cout<<"\n";
    		}
    	}
    
    
    	delete string;
    	getch();
    	return 0;
    }
    cậu sửa lại thế này đi
    cái biến unsigned int sumfreq; của cậu không phải là mảng,không thể là sumfreq[i] ; được

  10. #10
    Ngày gia nhập
    11 2008
    Bài viết
    6

    Cảm ơn tất cả các bạn đã giúp đỡ.

Các đề tài tương tự

  1. Cách giải nén bằng thuật toán Huffman
    Gửi bởi tiensjvn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 27-09-2012, 07:11 PM
  2. tỉ lệ nén của thuật toán huffman tĩnh, tại sao còn lớn hơn cả khi chưa nén?
    Gửi bởi nhutlv01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 24-06-2012, 12:14 PM
  3. Thuật toán Huffman.
    Gửi bởi HUMG.ThongIT trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 24-11-2011, 09:07 PM
  4. Huffman code
    Gửi bởi sodoku trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 11-05-2010, 04:20 PM
  5. cây huffman
    Gửi bởi sa_dinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 02-12-2008, 09:28 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn