NHẬT KÝ THỰC HIỆN ĐỀ TÀI 3 MỤC LỤC 5 MỞ ĐẦU 6 CHƯƠNG I GIỚI THIỆU VỀ CẤU TRÚC NGĂN XẾP STACK 7 1.1 Định nghĩa Stack 7 1.2 Biểu diễn 7 1.3 Các thao tác trên stack dựa vào mảng 7 1.3.1 Kiểm tra tính rỗng của stack 8 1.3.2 Kiểm tra tính đầy của stack 8 1.3.3 Đưa dữ liệu vào stack 8 1.3.4 Lấy dữ liệu ra khỏi stack 8 CHƯƠNG II TỔNG QUAN VỀ KÝ PHÁP BA LAN 10 2.1 Biểu thức số học thông thường 10 2.2 Biểu thức dạng hậu tố và tiền tố 10 2.3 Tính giá trị của biểu thức hậu tố 10 2.4 Chuyển đổi từ biểu thức trung tố sang dạng hậu tố. 11 CHƯƠNG III XÂY DỰNG MÔ HÌNH TÍNH TOÁN THEO KÍ PHÁP BA LAN SỬ DỤNG CẤU TRÚC STACK 14 3.1 Cài đặt 14 3.2 Demo chương trình 18 KẾT LUẬN 19 TÀI LIỆU THAM KHẢO 20
-1- TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP VIỆT – HUNG KHOA: Điện-Điện Tử-Công Nghệ Thông Tin TÊN SINH VIÊN NGUYỄN XUÂN THIỀU NGÔ THỊ TƯƠI TÊN ĐỀ TÀI TÌM HIỂU KỸ THUẬT BẢO MẬT THÔNG TIN BẰNG PHƯƠNG PHÁP GIẤU TIN TRONG ẢNH THỰC TẬP TỐT NGHIỆP CHUYÊN NGÀNH: Công Nghệ Thông Tin HÀ NỘI, NĂM 2016 -2- NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM (Của giảng viên hướng dẫn) ……………………………………………… ……………………………………………………………………………………… …………… …………………………………………………………… …………………………………………………………… …………………………………………………………… ……………… ……………………………………………………………………………………… …………………………………… …………………………………………………………… ……………………………………………………………………………………… ……………… …………………………………………………………… ……………………………………………………………………………………… …………………………………………………… …………………………………………………………… ……………………………………………………………………………………… ……………… …………………………………………………………… ……………………………………………………………………………………… …………………………………………………… …………………………………………………………… ……………………………………………………………………………………… ……………… …………………………………………………………… ……………………………………………………………………………………… …………………………………………………… …………………………………………………………… ……………………………………………………………………………………… ……………… …………………………………………………………… ……………………………………………………………………………………… …………………………………………………… …………………………………………………… Điểm: …………………….………(bằng chữ: … …………… ….) Đồng ý/Không đồng ý cho sinh viên bảo vệ trước hội đồng chấm đồ án tốt nghiệp? -3- Hà Nội, ngày tháng năm 2017 CÁN BỘ - GIẢNG VIÊN HƯỚNG DẪN (ký, họ tên) -4- NHẬT KÝ THỰC HIỆN ĐỀ TÀI Thời gian Công việc Nhận đề tài ngày 1 1 2 Tạo tài liệu Chỉnh sửa tài liệu Ghi -5- LỜI CẢM ƠN Trước tiên, em xin gửi lời biết ơn sâu sắc tới cô Nguyễn Thị Thu Thủy, người tận tình bảo, định hướng cho em suốt trình thực tập, đồng thời giúp em tiếp cận với phương pháp tư nghiên cứu khoa học Em xin gửi lời cảm ơn chân thành tới tất thầy giáo cô giáo khoa Công nghệ thông tin thầy, cô khoa trường đại học Công Nghiệp Việt Hung Đã tận tình dạy dỗ, động viên giúp đỡ em suốt trình học tập, nghiên cứu Xin gửi lời cảm ơn chân thành tới gia đình, bạn bè hết lòng tin tưởng, động viên đóng góp ý kiến quý báu cho em suốt trình thực đề tài Xin chân thành cảm ơn! Hà Nội, Ngày tháng năm 2017 Sinh viên thực hiện: Nguyễn Xuân Thiều Ngô Thị Tươi -6- MỤC LỤC NHẬT KÝ THỰC HIỆN ĐỀ TÀI MỞ ĐẦU CHƯƠNG I GIỚI THIỆU VỀ CẤU TRÚC NGĂN XẾP STACK 1.1 Định nghĩa Stack .9 1.2 Biểu diễn 1.3 Các thao tác stack dựa vào mảng 1.3.1 Kiểm tra tính rỗng stack 10 1.3.2 Kiểm tra tính đầy stack .10 1.3.3 Đưa liệu vào stack 10 1.3.4 Lấy liệu khỏi stack 10 CHƯƠNG II TỔNG QUAN VỀ KÝ PHÁP BA LAN 12 2.1 Biểu thức số học thông thường .12 2.2 Biểu thức dạng hậu tố tiền tố .12 2.3 Tính giá trị biểu thức hậu tố .12 2.4 Chuyển đổi từ biểu thức trung tố sang dạng hậu tố .13 CHƯƠNG III XÂY DỰNG MÔ HÌNH TÍNH TOÁN THEO KÍ PHÁP BA LAN SỬ DỤNG CẤU TRÚC STACK 16 3.1 Cài đặt .16 3.2 Demo chương trình 19 KẾT LUẬN .20 TÀI LIỆU THAM KHẢO 21 -7- MỞ ĐẦU I Đặt vấn đề Trước máy tính sử dụng rộng rãi nhà kế toán thường phải tính tay bảng tính giấy Dù có giỏi kinh nghiệm đến mấy, khả sai sót xảy ra, chưa kể thời gian tính toán lâu Trong ngày họ tính toán nhờ chương trình bảng tính dễ sử dụng, xác tiết kiệm nhiều thời gian Với phát triển mạnh mẽ lĩnh vực khoa học công nghệ, máy tính ngày sâu vào đời sống văn hóa, xã hội người, mang lại nhiều lợi ích nhiều lĩnh vực sống Nó dần trở thành thành phần quan trọng tách rời xã hội thông tin đại Ưu điểm máy tính khả tính toán nhanh đạt độ xác cao Tuy nhiên, máy tính có giới hạn nó, cho dù có chức tân tiến đến đâu, cỗ máy, làm theo dẫn đặt sẵn từ phía người linh hoạt thay đổi Các biểu thức số học vốn quen thuộc thân thiện với người sử dụng lại hoàn toàn xa lạ máy tính Vấn đề đặt làm để máy tính hiểu phép tính để trả lại kết phục vụ người dùng Hiện có nhiều phương pháp quy ước định nghĩa, đồ án trình bày phương pháp tiếp cận cho việc xây dựng cách tính toán máy tính dựa ký pháp Ba lan (Polish notation) Đồ án gồm chương với nội dung sau: • Chương I : Giới thiêu cấu trúc ngăn xếp stack Giới thiệu tổng quan kiểu liệu stack • Chương II : Tổng quan ký pháp Ba lan Giới thiệu tổng quan ký pháp Ba lan, cách biểu diễn biểu thức số học theo kí pháp hậu tố, tiền tố • Chương III : Xây dựng mô hình tính toán theo kí pháp Ba lan sử dụng cấu trúc stack Nội dung chương tập trung trình bày việc xây dựng biểu thức hậu tố, cách tính biểu thức hậu tố • Chương IV : Kết Luận Tổng kết lại toàn vấn đề thực đồ án Dựa kết thu để từ nêu hướng nghiên cứu phát triển tương lai nhằm cải thiện hiệu phương pháp nghiên cứu -8- Do hạn chế mặt kiến thức thời gian, đồ án không tránh khỏi thiếu sót Vì em mong nhận ý kiến đóng góp thầy cô giáo bạn sinh viên để em nâng cao kiến thức nhằm phục vụ cho nghiên cứu sau -9- CHƯƠNG I GIỚI THIỆU VỀ CẤU TRÚC NGĂN XẾP STACK Nội dung chương trình bày kiểu cấu trúc liệu ngăn xếp - stack, cách xây dựng ngăn xếp theo kiểu mảng bao gồm cấu trúc ngăn xếp, hàm kiểm tra ngăn xếp trống, ngăn xếp đầy liệu, hàm lấy giá trị, hàm thêm phần tử vào ngăn xếp, lấy liệu khỏi ngăn xếp 1.1 Định nghĩa Stack Stack tập hợp node thông tin tổ chức liên tục rời rạc nhớ thực theo chế FILO (First – In – Last – Out ) 1.2 Biểu diễn Có hai phương pháp biểu diễn ngăn xếp: • Biểu diễn liên tục: phần tử liệu ngăn xếp lưu trữ liên tục nhớ (Mảng) • Biểu diễn rời rạc: phần tử liệu ngăn xếp lưu trữ rời rạc nhớ (Danh sách liên kết) Ví dụ Biểu diễn ngăn xếp dựa vào mảng typedef struct { int top; int node[MAX]; } Stack; //Đỉnh đầu stack nơi diễn thao tác //Dữ liệu lưu trữ stack gồm MAX phần tử 1.3 Các thao tác stack dựa vào mảng Các thao tác xây dựng stack theo chế Last-In-First-Out bao gồm: • Kiểm tra tích rỗng stack (Empty(stack s)) Khi ta muốn lấy liệu khỏi ngăn xếp thực ngăn xếp không rỗng • Kiểm tra tính đầy ngăn xếp (Full(stack s)) Khi ta muốn đưa liệu vào ngăn xếp thực ngăn xếp chưa tràn • Đưa liệu vào ngăn xếp (Push(stack s, item x)) Thao tác thực ngăn xếp chưa tràn • Đưa liệu vào ngăn xếp (Pop(stack s)) Thao tác thực ngăn xếp không rỗng - 10 - 1.3.1 Kiểm tra tính rỗng stack Tất thao tác stack thực vị trí trỏ top Vì ta qui ước vị trí top = -1 stack trạng thái rỗng Thao tác thực sau: int Empty( stack *s ) { //s trỏ đến stack if ( stack ->top == -1 ) // Nếu top =-1 return (1); //Hàm trả lại giá trị return(0); //Hàm trả lại giá trị sai } 1.3.2 Kiểm tra tính đầy stack Khi ta muốn lấy liệu khỏi ngăn xếp ngăn xếp phải chưa tràn Vì biểu diễn dựa vào mảng, vị trí top = MAX -1 stack trạng thái đầy Thao tác thực sau: int Full( stack *s ) { //s trỏ đến stack if ( stack ->top == MAX-1 ) // Nếu top = MAX -1 return (1); //Hàm trả lại giá trị return(0); //Hàm trả lại giá trị sai } 1.3.3 Đưa liệu vào stack Khi muốn đưa liệu vào ngăn xếp ta phải kiểm tra ngăn xếp có đầy (tràn) hay không? Nếu ngăn xếp chưa đầy, thao tác thực Nếu ngăn xếp đầy, thao tác không thực Thao tác thực sau: void Push( stack *s, int x ) { if ( !Full (s)){ s ->top = (s ->top) +1; s->Node[s ->top] = x; } else ; } //x node cần thêm vào stack // Nếu stack chưa tràn //Tăng trỏ top lên đơn vị //Lưu trữ x vị trí top 1.3.4 Lấy liệu khỏi stack Khi muốn lấy liệu khỏi ngăn xếp ta phải kiểm tra ngăn xếp có rỗng hay không? Nếu ngăn xếp không rỗng, thao tác thực Nếu ngăn xếp rỗng, thao tác không thực Thao tác thực sau: int Pop( stack *s ) { //s trỏ đến stack if ( !Empty (s)) { // Nếu stack không rỗng x =s->Node[s ->top]; //x nội dung node bị lấy s ->top = (s ->top) -1; //giảm trỏ top đơn vị return (x); //Trả lại x node bị loại bỏ - 11 - } else { ; return (∞); } } - 12 - CHƯƠNG II TỔNG QUAN VỀ KÝ PHÁP BA LAN Chương giới thiệu tổng quan vấn đề biểu thức số học ký pháp Ba lan, biểu thức dạng tiền tố hậu tố, cách tính giá trị biểu thức hậu tố chuyển đổi biểu thức trung tố hậu tố 2.1 Biểu thức số học thông thường Trong biểu thức số học với phép toán hai ngôi, phép cộng, phép trừ, phép nhân, phép chia, phép lũy thừa,… toán tử đặt toán hạng Với cách biểu diễn này, việc sử dụng cặp dấu ngoặc để phân việ toán hạng (cũng để phân biệt thứ tự thực phép toán) cần thiết Ví dụ: a (A+B)*C b A+(B*C) Là hoàn toàn khác cho kết khác Trong trường hớp không muốn dùng dấu ngoặc phải theo qui ước thứ tự ưu tiên thực phép toán, nghĩa theo thứ tự (độ ưu tiên giảm dần): - Phép lũy thừa - Phép nhân, phép chia - Phéo cộng, phép trừ Đối với các phép toán có thứ tự ưu tiên thực từ trái qua phải Ví dụ: Với biểu thức A+B*C-A^F Thứ tự thực là: A^F B*C A+(B*C) (A+(B*C))-(A^F) 2.2 Biểu thức dạng hậu tố tiền tố Với ký pháp hậu tố toán tử đặt sau toán hạng toán hạng hai • • • • • a+b⇔ab+ a-b⇔aba*b⇔ab* a/b⇔ab/ (P) ⇔ P 2.3 Tính giá trị biểu thức hậu tố Việc tính toán giá trị biểu thức hậu tố, biết giá trị biến định nghĩa sau: - 13 - Đọc giá trị hậu tố từ trái qua phải: Nếu ký tự đọc X toán hạng bảo lưu giá trị Nếu ký tự đọc X toán tử giá trị vừa bảo lưu lấy tác động toán tử X vào giá trị lấy sau với giá trị lấy trước bảo lưu kết lại Quá trình tiếp tục kết thúc biểu thức Giá trị cuối bảo lưu giá trị biểu thức Thuật toán tính toán giá trị biểu thức hậu tố Bước (Khởi tạo): stack = ∅; Bước (Lặp) : For each x∈P 2.1 Nếu x toán hạng: Push( stack, x); 2.2 Nếu x ∈ { +, -, *, /,^ } a) TH2 = Pop(stack, x); b) TH1 = Pop(stack, x); c) KQ = TH1 ⊗ TH2; d) Push (stack, KQ); EndFor; Bước 3(Trả lại kết quả): Return(Pop(stack)) Ví dụ: P = * + / + - Kết quả: P=7 2.4 Chuyển đổi từ biểu thức trung tố sang dạng hậu tố Thuật toán chuyển đổi biểu thức trung tố P thành biểu thức hậu tố: Bước (Khởi tạo): stack = ∅; Out = ∅; Bước (Lặp) : For each x∈P 2.1 Nếu x =‘ (‘ : Push(stack, x); 2.2 Nếu x toán hạng: x⇒Out; 2.3 Nếu x ∈ { +, -, *, / } - 14 - y = get(stack); a) Nếu priority(x)≥priority(y): Push(stack, x); b) Nếu priority(x)= && c - '0'