Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Nén dữ liệu bằng phương pháp tách vần trên VC++?

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    3

    Mặc định Nén dữ liệu bằng phương pháp tách vần trên VC++?

    Bác nào có code đề tài này thì cho em xin nha. Hoặc hướng dẫn em một chút em xin cảm ơn

  2. #2
    Ngày gia nhập
    02 2009
    Bài viết
    75

    Trích dẫn Nguyên bản được gửi bởi thanggay Xem bài viết
    Bác nào có code đề tài này thì cho em xin nha. Hoặc hướng dẫn em một chút em xin cảm ơn
    ChàoThắng Gay
    Nói chung ý tưởng chung vẫn là tìm những byte trùng lặp rồi gom lại mã hóa sao cho gọn hơn ,có 1 câu ví von khá hay như thế này :nếu bạn có 2 chiếc tất trắng và 2 chiếc tất đen thay bằng nói tôi có 1 chiếc tất trắng 1 chiếc tất đen ,
    một chiếc tất trắng nữa, một chiếc tất đen nữa thì ta nói tôi có 2 chiếc tất trắng và 2 chiếc tất đen. EG : AAAABBSSCC-->4A2B2S2C
    Nếu là theo phưong pháp RLE thì bạn có thể làm như sau
    -Mở file dọc,mở file ghi
    -EnCode uyệt file dọc từ đầu đến cuối dếm số kí tự trùng nhau mã hóa count+kí tự ghi vào file ghi.
    -Decode :Nếu mã hóa như trên ta sẽ thu được cấu truct encoded dạng (int.char)* vậy sẽ có tất cả filesize/2 block unit encoded .Duyệt các block này
    dọc int count và ghi char vào file decode.
    Tất cả chỉ có vậy nếu làm chắc bạn chi mất 1 buổi chiều là xong
    PS :Mỗi phương pháp mã hóa chỉ tối ưu trong các trường hợp nhất định
    cách này hay dùng để nén ảnh hoặc film .Nếu bạn mà nén file dã được nén bởi các phương pháp khác hoặc có ít mã trùng lặp thì file sẽ phình lên trương hợp tồi tệ nhất là gấp đôi
    ---Have fun! &Good luck ! -----------------
    Đã được chỉnh sửa lần cuối bởi DarkWizard : 16-05-2009 lúc 11:27 AM.

    chán code, ghét máy tính rồi

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi DarkWizard Xem bài viết
    ChàoThắng Gay
    Nói chung ý tưởng chung vẫn là tìm những byte trùng lặp rồi gom lại mã hóa sao cho gọn hơn ,có 1 câu ví von khá hay như thế này :nếu bạn có 2 chiếc tất trắng và 2 chiếc tất đen thay bằng nói tôi có 1 chiếc tất trắng 1 chiếc tất đen ,
    một chiếc tất trắng nữa, một chiếc tất đen nữa thì ta nói tôi có 2 chiếc tất trắng và 2 chiếc tất đen. EG : AAAABBSSCC-->4A2B2S2C
    Nếu là theo phưong pháp RLE thì bạn có thể làm như sau
    -Mở file dọc,mở file ghi
    -EnCode uyệt file dọc từ đầu đến cuối dếm số kí tự trùng nhau mã hóa count+kí tự ghi vào file ghi.
    -Decode :Nếu mã hóa như trên ta sẽ thu được cấu truct encoded dạng (int.char)* vậy sẽ có tất cả filesize/2 block unit encoded .Duyệt các block này
    dọc int count và ghi char vào file decode.
    Tất cả chỉ có vậy nếu làm chắc bạn chi mất 1 buổi chiều là xong
    PS :Mỗi phương pháp mã hóa chỉ tối ưu trong các trường hợp nhất định
    cách này hay dùng để nén ảnh hoặc film .Nếu bạn mà nén file dã được nén bởi các phương pháp khác hoặc có ít mã trùng lặp thì file sẽ phình lên trương hợp tồi tệ nhất là gấp đôi
    ---Have fun! &Good luck ! -----------------
    Đầu tiên em xin cảm ơn anh DarkWizard nhưng mà nick của em là Thằng gày chứ ko phải " Gay đâu ah" nhưng cũng không sao vì nói chung là cũng dễ hiểu nhầm. Tiếp đó là em muốn hỏi anh cách để chương trình duyệt qua file đọc sau đó đếm và mã hóa các vần.

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

    Compress
    Code:
    char* Cv_int_char(int num,int &len)
    {
    	char* temp=new char[5];                  //khai bao 5 chu so(kieu (int) <33000).
    	while(num != 0)
    	{
    		temp[len++]= num % 10 + '0';      //chuyen sang kieu char.
    		num = num / 10;
    	}
    	return temp;
    }
    
    char* Compress(char* s)
    {
       int count = 0, len, i = 0, j = 0;
       char* out = new char[5];
    
       while (s[i])
       {
    	  count++;
    	  if( s[i] != s[i+1])               //2 ki tu khac nhau.
    	  {
    		out[j++] = s[i];
    		if(count >1)               //them so vao.
    		{
    			len = 0;
    			char* temp = Cv_int_char(count, len);
    			for(int k = 0; k <len; k++)
    				out[j++] = temp[len-k-1];
    		}
    		count = 0;
    	  }
    	  i++;
       }
       out[j]='\0';
       return out;
    }
    bạn thêm bớt vào theo nhu cầu của bạn.

  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi Tranduchung Xem bài viết
    Compress
    Code:
    char* Cv_int_char(int num,int &len)
    {
    	char* temp=new char[5];                  //khai bao 5 chu so(kieu (int) <33000).
    	while(num != 0)
    	{
    		temp[len++]= num % 10 + '0';      //chuyen sang kieu char.
    		num = num / 10;
    	}
    	return temp;
    }
    
    char* Compress(char* s)
    {
       int count = 0, len, i = 0, j = 0;
       char* out = new char[5];
    
       while (s[i])
       {
    	  count++;
    	  if( s[i] != s[i+1])               //2 ki tu khac nhau.
    	  {
    		out[j++] = s[i];
    		if(count >1)               //them so vao.
    		{
    			len = 0;
    			char* temp = Cv_int_char(count, len);
    			for(int k = 0; k <len; k++)
    				out[j++] = temp[len-k-1];
    		}
    		count = 0;
    	  }
    	  i++;
       }
       out[j]='\0';
       return out;
    }
    bạn thêm bớt vào theo nhu cầu của bạn.
    thanks anh nhé em sẽ nghiên cứu xem thế nào

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

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Trả lời: 30
    Bài viết cuối: 15-02-2012, 07:03 PM
  3. Lập trình Socket trên C++ có thể giao tiếp chương trình Java trên Server được ko các
    Gửi bởi jacobkruse trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-11-2010, 11:10 PM
  4. Source code build trên Ubuntu có chạy được Trên Linux Kernel không ?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 0
    Bài viết cuối: 03-11-2010, 09:22 AM
  5. Lưu dữ liệu để trống trên một cell của datagirdview trên csdl Access như thế nào?
    Gửi bởi hvcuongit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-05-2009, 04:21 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