1. Trang chủ
  2. » Công Nghệ Thông Tin

Đồ án chuyển đổi trung tố hậu tố

21 818 12

Đ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 21
Dung lượng 290,5 KB
File đính kèm trung to hau to.rar (93 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 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ÊNNGUYỄ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

HÀ NỘI, NĂM 2016

Trang 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?.

Trang 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)

Trang 5

LỜI CẢM ƠN

Trước tiên, em xin gửi lời biết ơn sâu sắc nhất tới cô Nguyễn Thị Thu Thủy,người đã tận tình chỉ bảo, định hướng cho em trong suốt quá trình thực tập, đồngthời giúp em tiếp cận với phương pháp tư duy và nghiên cứu khoa học mới

Em xin gửi lời cảm ơn chân thành tới tất cả các thầy giáo cô giáo trong khoaCông nghệ thông tin cùng các thầy, cô trong khoa cơ bản trường đại học CôngNghiệp Việt Hung Đã tận tình dạy dỗ, động viên và giúp đỡ em trong suốt quá trìnhhọc tập, nghiên cứu

Xin gửi lời cảm ơn chân thành nhất tới gia đình, bạn bè đã hết lòng tin tưởng,động viên và đóng góp những ý kiến quý báu cho em trong suốt quá trình thực hiện

đề tài này

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ềuNgô Thị Tươi

Trang 6

MỤC LỤC

NHẬT KÝ THỰC HIỆN ĐỀ TÀI 4

MỞ ĐẦU 7

CHƯƠNG I GIỚI THIỆU VỀ CẤU TRÚC NGĂN XẾP STACK 9

1.1 Định nghĩa Stack 9

1.2 Biểu diễn 9

1.3 Các thao tác trên stack dựa vào mảng 9

1.3.1 Kiểm tra tính rỗng của stack 10

1.3.2 Kiểm tra tính đầy của stack 10

1.3.3 Đưa dữ liệu vào stack 10

1.3.4 Lấy dữ liệu ra 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ố và tiền tố 12

2.3 Tính giá trị của 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

Trang 7

MỞ ĐẦU

I Đặt vấn đề

Trước khi máy tính được sử dụng rộng rãi các nhà kế toán thường phải tínhbằng tay hoặc bằng các bảng tính trên giấy Dù có giỏi và kinh nghiệm đến mấy, khảnăng sai sót vẫn có thể xảy ra, chưa kể thời gian tính toán là rất lâu Trong khi ngàynay họ có thể tính toán nhờ một chương trình bảng tính rất dễ sử dụng, rất chính xác

và tiết kiệm được rất nhiều thời gian

Với sự phát triển mạnh mẽ trong lĩnh vực khoa học công nghệ, máy tính ngàycàng đi sâu hơn vào đời sống văn hóa, xã hội của con người, đã và đang mang lạinhiều lợi ích trong nhiều lĩnh vực của cuộc sống Nó đang dần trở thành một thànhphần quan trọng không thể tách rời của xã hội thông tin hiện đại Ưu điểm của máytính là khả năng tính toán nhanh đạt được độ chính xác cao Tuy nhiên, máy tính cónhững giới hạn của nó, cho dù nó có những chức năng tân tiến đến đâu, nó cũng chỉ

là cỗ máy, làm theo những chỉ dẫn được đặt ra sẵn từ phía con người chứ không thểlinh hoạt thay đổi được Các biểu thức số học vốn đã quen thuộc thân thiện vớingười sử dụng nhưng lại hoàn toàn xa lạ đối với máy tính Vấn đề được đặt ra là làmthế nào để máy tính có thể hiểu được các phép tính để trả lại kết quả phục vụ ngườidùng

Hiện nay có nhiều phương pháp quy ước định nghĩa, đồ án này trình bày mộtphương pháp tiếp cận cho việc xây dựng một cách tính toán trên máy tính dựa trên

ký pháp Ba lan (Polish notation)

Đồ án gồm 4 chương với nội dung như sau:

Chương I : Giới thiêu về cấu trúc ngăn xếp stack

Giới thiệu tổng quan về kiểu dữ liệu stack

Chương II : Tổng quan về ký pháp Ba lan

Giới thiệu tổng quan về ký pháp Ba lan, cách biểu diễn biểu thức số học theo

Trang 8

Do còn hạn chế về mặt kiến thức và thời gian, đồ án không tránh khỏi nhữngthiếu sót Vì vậy em mong nhận được những ý kiến đóng góp của các thầy cô giáo

và các bạn sinh viên để em có thể nâng cao kiến thức của mình hơn nhằm phục vụcho những nghiên cứu sau này

Trang 9

CHƯƠNG I GIỚI THIỆU VỀ CẤU TRÚC NGĂN XẾP STACK

Nội dung chương này sẽ trình bày kiểu cấu trúc dữ 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, các hàm kiểm tra ngăn xếp trống, ngăn xếp đầy dữ liệu, hàm lấy giá trị, hàm thêm phần tử vào ngăn xếp, lấy dữ liệu ra khỏi ngăn xếp.

1.1 Định nghĩa Stack

Stack là tập hợp các node thông tin được tổ chức liên tục hoặc rời rạc nhau trong bộ nhớ và thực hiện theo cơ 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:

tục nhau trong bộ nhớ (Mảng)

rạc nhau trong bộ 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 node[MAX]; //Dữ liệu lưu trữ trong stack gồm MAX phần tử

} Stack;

1.3 Các thao tác trên stack dựa vào mảng

Các thao tác xây dựng trên stack theo cơ chế Last-In-First-Out bao gồm:

liệu ra khỏi ngăn xếp thì nó chỉ được thực hiện khi và chỉ khi ngăn xếp khôngrỗng

Kiểm tra tính đầy của ngăn xếp (Full(stack s)) Khi ta muốn đưa dữ

liệu vào ngăn xếp thì nó chỉ được thực hiện khi và chỉ khi ngăn xếp chưa tràn

Đưa dữ liệu vào ngăn xếp (Push(stack s, item x)) Thao tác này chỉ

được thực hiện khi và chỉ khi ngăn xếp chưa tràn

thực hiện khi và chỉ khi ngăn xếp không rỗng

Trang 10

1.3.1 Kiểm tra tính rỗng của stack

Tất cả các thao tác trên stack chỉ được thực hiện tại vị trí con trỏ top Vì vậy

ta qui ước tại vị trí top = -1 stack ở trạng thái rỗng Thao tác được thực hiện nhưsau:

int Empty( stack *s ) { //s là con trỏ đến stack

if ( stack ->top == -1 ) // Nếu top =-1

return (1); //Hàm trả lại giá trị đúng

return(0); //Hàm trả lại giá trị sai

}

1.3.2 Kiểm tra tính đầy của stack

Khi ta muốn lấy dữ liệu ra khỏi ngăn xếp thì ngăn xếp phải chưa tràn Vì biểudiễn dựa vào mảng, do đó tại vị trí top = MAX -1 thì stack ở trạng thái đầy Thao tácđược thực hiện như sau:

int Full( stack *s ) { //s là con trỏ đến stack

if ( stack ->top == MAX-1 ) // Nếu top = MAX -1

return (1); //Hàm trả lại giá trị đúng return(0); //Hàm trả lại giá trị sai

}

1.3.3 Đưa dữ liệu vào stack

Khi muốn đưa dữ liệu vào ngăn xếp thì 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 sẽ được thực hiện Nếu ngăn xếp

đã đầy, thao tác không được thực hiện Thao tác được thực hiện như sau:

void Push( stack *s, int x ) { //x là node cần thêm vào stack

s ->top = (s ->top) +1; //Tăng con trỏ top lên 1 đơn vị

s->Node[s ->top] = x; //Lưu trữ x tại vị trí top

}

else <thông báo tràn stack>;

}

1.3.4 Lấy dữ liệu ra khỏi stack

Khi muốn lấy dữ liệu ra khỏi ngăn xếp thì ta phải kiểm tra ngăn xếp có rỗnghay không? Nếu ngăn xếp không rỗng, thao tác sẽ được thực hiện Nếu ngăn xếprỗng, thao tác không được thực hiện Thao tác được thực hiện như sau:

int Pop( stack *s ) { //s là con trỏ đến stack

if ( !Empty (s)) { // Nếu stack không rỗng

x =s->Node[s ->top]; //x là nội dung node bị lấy ra

s ->top = (s ->top) -1; //giảm con trỏ top 1 đơn vị

return (x); //Trả lại x là node bị loại bỏ

Trang 12

CHƯƠNG II TỔNG QUAN VỀ KÝ PHÁP BA LAN

Chương này sẽ giới thiệu tổng quan về các vấn đề biểu thức số học và ký pháp

Ba lan, biểu thức dạng tiền tố và hậu tố, cách tính giá trị biểu thức hậu tố chuyển đổi giữa biểu thức trung tố và hậu tố.

2.1 Biểu thức số học thông thường

Trong các biểu thức số học với phép toán hai ngôi, như phép cộng, phép trừ,phép nhân, phép chia, phép lũy thừa,… các toán tử bao giờ cũng được đặt ở giữa cáctoán hạng

Với cách biểu diễn này, việc sử dụng các cặp dấu ngoặc để phân việ các toánhạng (cũng là để phân biệt thứ tự thực hiện các phép toán) là cần thiết

Ví dụ:

a (A+B)*C

b A+(B*C)

Là hoàn toàn khác nhau cho các kết quả khác nhau

Trong trường hớp không muốn dùng dấu ngoặc thì phải theo qui ước về thứ tự

ưu tiên thực hiện các phép toán, nghĩa là theo thứ tự (độ ưu tiên giảm dần):

2.2 Biểu thức dạng hậu tố và tiền tố

Với ký pháp hậu tố thì toán tử sẽ được đặt sau toán hạng một và toán hạng hai

2.3 Tính giá trị của biểu thức hậu tố

Việc tính toán giá trị của một biểu thức hậu tố, khi đã biết giá trị của các biếnđược định nghĩa như sau:

Trang 13

Đọc giá trị hậu tố từ trái qua phải:

lượt được lấy ra và tác động toán tử X vào giữa giá trị lấy ra sau với giátrị lấy ra trước và bảo lưu kết quả lại

Quá trình trên sẽ được tiếp tục cho tới khi kết thúc biểu thức Giá trị cuốicùng sẽ được bảo lưu chính là giá trị của biểu thức

Thuật toán tính toán giá trị biểu thức hậu tố

Bước 1 (Khởi tạo):

stack = ;

Bước 2 (Lặp) :

For each xP do 2.1 Nếu x là toán hạng:

Push( stack, x);

2.2 Nếu x { +, -, *, /,^ } a) TH2 = Pop(stack, x);

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 1 (Khởi tạo): stack = ; Out = ;

Trang 14

y = get(stack);

a) Nếu priority(x)priority(y): Push(stack, x); b) Nếu priority(x)<priority(y):

y = Po(stack); yOut; Push(stack, x);

c) Nếu stack = : Push(stack, x);

Kiểm nghiệm thuật toán: P = (a+b*c) (− a/b+c)

xP Bước Stack Out

Trang 16

-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

Chương 3 trình bày quy trình các bước để xây dựng lên biểu thức hậu tố và các bước tính giá trị biểu thức trên ngôn ngữ C/C++.

3.1 Cài đặt

- Hàm này trả về độ ưu tiên của các toán tử

• toán tử mũ ^ có độ ưu tiên cao nhất trả về giá trị 2

• toán tử *, / có độ ưu tiên thấp hơn toán tử mũ trả về gia trị 1

• toán tử +, - có độ ưu tiên thấp nhất trả về giá trị 0

- Hàm chuyển đổi biểu thức số học thông thường sang biểu thức hậu tố

• Giá trị trả về là biểu thức hậu tố

void Biendoi(string& str, string& hauto){ // chuyen bthuc trung to sang hau to

Trang 17

}if(s.top() == '(' ) s.pop();

}else{

while( !s.empty() && uT(c) <= uT(s.top())){

hauto=hauto+s.top();s.pop();

}s.push(c);

}}

}}

s.pop();

}

cout<<hauto;

}

Trang 18

Hàm này tính giá trị biểu thức hậu tố

• Giá trị trả về là kết quả của biểu thức

void Tinh( string str, stack<int> st ){ // Tinh gia tri bieu thuc hau to

int s = str.size();

for( int i= 0; i< s; i++ ){

if( str.at(i) -'0' >= 0 && str.at(i) - '0' <= 9 ) st.push( str.at(i) - '0' );else if( str.at(i) != ' ' && st.top() != st.empty() ){

int a, b;

b = st.top(); st.pop();

a = st.top(); st.pop();

if( str.at(i) == '+' ) st.push( a + b );

if( str.at(i) == '-' ) st.push( a - b );

if( str.at(i) == '*' ) st.push( a * b );

if( str.at(i) == '/' ) st.push( a / b );

if( str.at(i) == '^' ) st.push( pow( a, b ) );

if( str.at(i) == '%' ) st.push( a % b );

}} if( !st.empty() ) cout<< st.top()<<"\n";

else cout<< (" 1212");

}

Trang 19

3.2 Demo chương trình

Trang 20

KẾT LUẬNKẾT QUẢ ĐẠT ĐƯỢC

Đồ án đã trình bày các bước xây dựng một biểu thức hậu tố từ một biểu thứcthông thường và cách tính giá trị biểu thức dựa theo ký pháp Ba lan Dựa trên cơ sở

lý thuyết về ký pháp Ba lan kiểu dữ liệu ngăn xếp đồ án đã đạt được những kết quảnhất định Nội dung chi tiết các phần mà đồ án đã làm được như sau:

hàm trong ngôn ngữ C/C++ theo dạng mạng

thường sang biểu thức hậu tố và cách tính toán biểu thức hậu tố với cácphép toán thông thường như +,-,*,/,^

HƯỚNG NGHIÊN CỨU TRONG TƯƠNG LAI

Dựa trên ý tưởng và những điều chưa thực hiện được trong hiện tại, em đề raphương hướng nghiên cứu và phát triển trong tương lai như sau:

trình mới chỉ thực hiện trên các biểu thức số học đơn giản theo kiển int,các toán hạng cơ bản, chương trình có thể tính toán các biểu thức hàm đặcbiệt như logarit, sin,cos,tan,… tính toán dữ liệu theo kiểu float,double…

Trang 21

TÀI LIỆU THAM KHẢO

Tiếng Việt

tâm In tranh Tuyên truyền cổ động – Mai Dịch

Trình Đại học Sư phạm Hà Nội.

Các website

1 https://vi.wikipedia.org/wiki/Kí _pháp_Ba_Lan

2 http://congdongcviet.com/

3 http://vietjack.com/

Ngày đăng: 29/03/2017, 01:54

TỪ KHÓA LIÊN QUAN

w