1. Trang chủ
  2. » Luận Văn - Báo Cáo

cài đặt thuật toán nén và giải nén dữ liệu RLE (run length code)

27 68 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 489,95 KB

Nội dung

BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 LỜI MỞ ĐẦU Lời đầu tiên, em xin gửi lời cảm ơn chân thành tới Thầy, Cô trường Đại học Vinh, đặc biệt Thầy Cô khoa Công nghệ thông tin – người trực tiếp giảng dạy, giúp đỡ em suốt năm tháng học tập trường, cảm ơn nhà trường khoa CNTT tạo điều kiện cho em thực tập sở để chuẩn bị tốt cho công việc học tập rèn luyện kỹ cần thiết trở thành người kỹ sư CNTT thực Sinh viên CNTT ngày phải không ngừng học hỏi, cập nhật biết ứng dụng kiến thức học vào thực tiễn sống Đợt thực tập sở bước để em sâu vào tìm hiểu lĩnh vực cơng nghệ thơng tin, sở kiến thức học năm học vừa qua Để hoàn thành đợt thực tập chuyên ngành này, cố gắng nỗ lực thân cịn có tận tình giúp đỡ giảng dạy thầy, cô giáo khoa CNTT Trường Đại học Vinh Em xin gửi lời cảm ơn chân thành đến thầy cô khoa Công nghệ thông tin, đặc biệt cô Trần Thị Kim Oanh nhiệt tình hướng dẫn em trình thực đề tài Vì thời gian trình độ cịn hạn chế nên chắn em khơng tránh khỏi thiếu sót Em mong nhận góp ý thầy bạn để để tài hoàn thiện Sinh viên thực Page LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 LỜI CẢM ƠN Trong thời đại công nghệ thông tin ngày nay, việc ứng dụng Công nghệ Thông tin vào sống ngành khoa học ngày trở nên quan trọng Trước Cơng nghệ Thơng tin chưa phát triển việc giải toán phức tạp kết đạt với độ xác thấp Những tốn địi hỏi phải có thuật tốn hợp lý, cấu trúc lưu trữ thích hợp đạt kết tối ưu Chính việc tìm hiểu phần quan trọng người lập trình Thêm vào kỹ thuật việc xử lý văn bản, xử lí tệp kỹ tối thiểu với người làm việc với máy tính Đợt thực tập sở bước sâu vào tìm hiểu, hội để chúng em tổng hợp lại tất mà học thời gian qua Chúng em xin chân thành cảm ơn hướng dẫn thầy giáo, cô giáo Khoa Công Nghệ Thông Tin – Trường Đại học Vinh Chúng em đặc biệt bày tỏ lòng biết ơn chân thành tới thầy giáo Lê Văn Thành, thầy tạo điều kiện giúp đỡ, hướng dẫn chúng em tận tình để chúng em hồn thành tốt đề tài thực tập sở Cuối cùng, chúng em xin chân thành cảm ơn kính chúc thầy giáo, cô giáo sức khoẻ hạnh phúc NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 MỤC LỤC LỜI MỞ ĐẦU LỜI CẢM ƠN Bài 1: .4 Tìm hiểu cài đặt thuật toán nén giải nén liệu RLE (Run Length Code) cho tệp liệu 1.2.1 Ý tường thuật toán: 1.2.2 Đánh giá 1.2.3 Thuật toán nén liệu 1.2.5 Thuật toán kiểm tra liệu 1.2.6 Thuật toán giải nén liệu 1.2.2 Sơ đồ khối mơ tả thuật tốn .7 1.3 Chương trình 1.4 Dữ liệu test kết tương ứng 11 1.4.1 Kết luận 11 1.4.2 Thông tin sả phẩm 11 1.4.3 Bộ Test .11 Bài : 14 2.1 Xác định toán 14 2.2 Phân tích tốn .14 2.2.1 Thơng tin ngơn ngữ lập trình .14 2.2.2 Xác định đầu vào, đầu toán .14 2.3.1 Thuật Toán Kiểm Tra Dữ Liệu 14 2.3.2 Xây dựng kiểu cấu trúc số phức,tạo danh sách LIFO gồm số thực 16 2.3.3 Thuật Toán Đọc Từ Tệp Vào Danh Sách LIFO : 17 2.3.4 Thuật tốn tìm vị trí 19 2.3.5 Chương trình 20 2.5 Dữ liệu test kết tương ứng 25 2.5.1 Bộ Test 25 KẾT LUẬN: 27 NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 NỘI DUNG Bài 1: 1.1 Xác định tốn Tìm hiểu cài đặt thuật tốn nén giải nén liệu RLE (Run Length Code) cho tệp liệu 1.2 Thuật Toán 1.2.1 Ý tường thuật tốn: Trong q trình thao tác với liệu, thường thấy lặp lặp lại liệu có tương đồng hay trùng lặp nhau, liên tiếp hay không liên tiếp Dễ thấy tập tin văn bản, hay tập tin đồ họa dạng bitmap Xét liệu đoạn văn sau: abcdef Thuật toán RLE để nén đoạn văn việc thay chuỗi kí tự lặp lại nhiều lần kí tự kèm theo sau số số lần kí tự lặp lại liên tục Nói cách khác, với chuỗi xuất kí tự ‘a’, kí tự ‘b’, kí tự ‘c’ kí tự ‘e’ kí tự “f” Kết thuật toán nén RLE đoạn văn là: a1b1c1d1f1 1.2.2 Đánh giá Ưu điểm : Đối với liệu có lặp lặp lại nhiều lần kí tự thuật tốn phù hợp Nó giảm đáng kể dung lượng liệu Nhược điểm: thuật toán dùng cho loại liệu tập tin văn bản, hay tập tin đồ họa bitmap… Còn loại tập tin khác chẳng hạn như: tập tin chương trình, tập tin sở liệu nhiều lúc không làm giảm dung lượng liệu mà lại làm cho liệu tăng lên tập tin thường gồm loạt chạy ngắn kí tự Ví dụ: Cho đoạn văn bản: abcd Sau nén RLE là: 1a1b1c1d1 1.2.3 Thuật toán nén liệu 1.2.2.1 Mơ tả thuật tốn NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 Bước : Khai báo xâu kết : String dest = null; Bước 2: Đọc ký tự xâu Trong chưa kết thúc xâu: - Kiểm tra ký tự có trùng với ký tự trước - Nếu trùng : tăng đếm lên đơn vị, tăng vị trí đọc ký tự lên đơn vị - Ngược lại : Ghép đếm ký tự đếm vào xâu “dest” dạng ký tự Khi kết thúc xâu : Chuyển sang bước Bước 3: Trả kết xâu “dest”, kết thúc 1.2.4 Đoạn chương trình char* RLE(char* original) { char* result = new char[100]; int i = 0, j = 0; while (original[i] != 0) { result[j] = original[i]; int count = 0, tick = i; while (original[i] == original[tick]) { count ++; tick ++; } int t = j; while (count != 0) { result[t+1] = (count % 10) + 48; count = count / 10; t++; } j = t+1; i = tick; } result[j] = 0; return result; } 1.2.5 Thuật toán kiểm tra liệu 1.2.5.1 Mơ tả thuật tốn - Kiểm tra ký tự bắt đầu chữ không hợp lệ - Kiểm tra ký tự kết thúc số không hợp lệ NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 - Kiểm tra ký tự chữ liên tục không hợp lệ 1.2.6 Thuật toán giải nén liệu 1.2.6.1 Mơ tả thuật tốn - Sử dụng vịng for duyệt ký tự chuỗi source - Nếu kí tự duyệt số tiếp tục duyệt đến gặp ký tự chữ - Sau lấy phần số phần ký tự 1.2.6.2 Đoạn chương trình char *EncoderRLE(char* original) { char* result = new char[100]; int n = strlen(original); if( n%2==1) return result = "E"; int num = 0,tick =0; for(int x = 1; xlink = f; f = p; } } return f; } 2.3.4 Thuật tốn tìm vị trí 2.3.4.1 Mơ tả thuật tốn: Bước 1: Khai báo số thực x (Complex x) mảng số thực f, biến chạy n để duyệt phần tử mảng Bước 2: - Trong chưa hết danh sách : Nếu phần thực phần tử p phần thực phần tử x, phần ảo phần ảo p phần ảo x return vị trí n -Ngược lại: Chuyển đến số thực danh sách LIFO tăng biến đếm n lên đơn vị - Quay lại bước - Ngược lại: Chuyển sang bước Bước 3: Trả giá trị -1 kết thúc chương trình Bước 4: Kết thúc 2.3.4.2 Đoạn chương trình: int Find_Complex(Complex *f, Complex x) { Complex *p; int n = 1; NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 18 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 p = f; while (p != NULL) { if ((p->img == x.img) && (p->real == x.real)) return n; else { p = p->link; n++; } } return -1; } 2.3.5 Chương trình 2.3.5.1 Mơ tả thuật tốn: Bước : Mở tệp Nếu tệp tồn : Chuyển sang bước Nếu tệp không tồn : Thông báo lỗi, chuyển sang bước Bước 2: Đọc tệp vào danh sách LIFO Nếu tệp có liệu : Chuyển sang bước Nếu tệp khơng có liệu : Thơng báo lỗi, chuyển sang bước Bước 3: Tìm kiếm số phức, thơng báo kết Bước : Đóng tệp Bước 5: Kết thúc chương trình 2.3.5.2 Đoạn chương trình: int main() { system("color 1f"); system("Title Tong cac so phuc"); FILE *fl; fl = fopen("input.txt", "rt"); if (!fl) NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 19 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 { printf("\n\aFile not found !"); _getch(); exit(1); } if (checkFile(fl)) { Complex *f = NULL; printf("\n Danh sach so thuc doc tu tep la :\n\n"); f = ReadFromFile(f, fl); printf("\n Danh sach so phuc doc tu tep la :\n\n"); Display(f); Complex x; printf("Nhap phan thuc va phan ao : "); scanf("%f%f", &x.real, &x.img); printf("VI tri xuat hien : %d", Find_Complex(f, x)); } else { printf("Error reading from file"); } fclose(fl); _getch(); return 0; } 2.4 Chương trình #include #include #include NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 20 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 struct Complex { float real, img; Complex *link; }; void Display(Complex *f) { Complex *p; p = f; while (p != NULL) { if (p->img>0) printf(" %9.2f + %3.2fi \n", p->real, p->img); else printf(" %9.2f - %3.2fi \n", p->real, p->img*-1); p = p->link; } } Complex *ReadFromFile(Complex *f, FILE *fl) { fseek(fl, 0, SEEK_SET); float x, y; Complex *p; while (!feof(fl)) { fscanf(fl, "%f %f", &x, &y); printf("%9.2f %5.2f \n", x, y); p = new(Complex); p->real = x; p->img = y; p->link = f; f = p; } NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 21 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 fclose(fl); return f; } int Find_Complex(Complex *f, Complex x) { Complex *p; int n = 1; p = f; while (p != NULL) { if ((p->img == x.img) && (p->real == x.real)) return n; else { p = p->link; n++; } } return -1; } bool checkFile(FILE *fl) { float x; int n = 0; while (!feof(fl)) { int isNumber = fscanf(fl, "%f", &x); if (isNumber == 0) return false; else n++; } NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 22 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 if (n % == 1) return false; else return true; } int main() { system("color 1f"); system("Title Tong cac so phuc"); FILE *fl; fl = fopen("input.txt", "rt"); if (!fl) { printf("\n\aFile not found !"); _getch(); exit(1); } if (checkFile(fl)) { Complex *f = NULL; printf("\n Danh sach so thuc doc tu tep la :\n\n"); f = ReadFromFile(f, fl); printf("\n Danh sach so phuc doc tu tep la :\n\n"); Display(f); Complex x; printf("Nhap phan thuc va phan ao : "); scanf("%f%f", &x.real, &x.img); printf("VI tri xuat hien : %d", Find_Complex(f, x)); } else { NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 23 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 printf("Error reading from file"); } fclose(fl); _getch(); return 0; } 2.5 Dữ liệu test kết tương ứng 2.5.1 Bộ Test NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 24 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 25 BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 051 KẾT LUẬN Công nghệ thông tin công cụ đắc lực, lĩnh vực có nhiều ứng dụng phục vụ cho nhiều ngành khác đời sống xã hội Qua q trình làm đề tài em có dịp củng cố, bổ sung kiến thức thu kinh nghiệm quý báu, phục vụ cho việc học tập làm việc sau kiến thức tìm kiếm thơng tin thơng dụng nay, nâng cao khả làm việc theo nhóm, nâng cao kiến thức ngơn ngữ lập trình C, cấu trúc liệu giải thuật cách tổ chức giải yêu cầu toán cụ thể… Tuy nhiên hạn chế trình độ, thời gian khơng nhiều nên kết đạt chưa đầy đủ có nhiều sai sót Rất mong đóng góp ý kiến thầy giáo bạn để đề tài em hoàn thiện Cuối chúng em xin chân thành cảm ơn ThS Lê Văn Thành giúp đỡ nhiệt tình cho em hoàn thiện đề tài NGUYỄN TIẾN DŨNG LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN Page 26 ... cài đặt thuật toán nén giải nén liệu RLE (Run Length Code) cho tệp liệu 1.2.1 Ý tường thuật toán: 1.2.2 Đánh giá 1.2.3 Thuật toán nén liệu 1.2.5 Thuật. .. tốn Tìm hiểu cài đặt thuật toán nén giải nén liệu RLE (Run Length Code) cho tệp liệu 1.2 Thuật Toán 1.2.1 Ý tường thuật toán: Trong trình thao tác với liệu, thường thấy lặp lặp lại liệu có tương... 1.2.5 Thuật toán kiểm tra liệu 1.2.6 Thuật toán giải nén liệu 1.2.2 Sơ đồ khối mô tả thuật toán .7 1.3 Chương trình 1.4 Dữ liệu test kết tương ứng

Ngày đăng: 29/08/2021, 19:57

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w