Tải bản đầy đủ - 0 (trang)
1 XÂY DỰNG CHƯƠNG TRÌNH THEO KÝ PHÁP BA LAN

1 XÂY DỰNG CHƯƠNG TRÌNH THEO KÝ PHÁP BA LAN

Tải bản đầy đủ - 0trang

weight = 1;

break;

case '*':

case '/':

weight = 2;

break;

default:break;

}

return weight;

}



Xây dựng hàm so sánh dấu 1 với dấu 2

int SoSanhDau(char op1, char op2)

{

int op1Weight = GetOperatorWeight(op1);

int op2Weight = GetOperatorWeight(op2);

if(op1Weight == op2Weight)

{

if(IsRightAssociative(op1)) return false;

else return true;

}

return op1Weight > op2Weight ? true: false;

}



Thuật toán chuyển đổi này được phát minh bởi vị giáo sư người Đức nổi tiếng

Edsger Dijkstra (cũng là tác giả của thuật tốn tìm đường đi ngắn nhất được đặt theo

tên ông và semaphore, một kỹ thuật để đồng bộ các tiến trình trong lập trình đa

nhiệm). Thuật tốn này cũng dựa theo cơ chế ngăn xếp. Ý tưởng chung của thuật toán

cũng là duyệt biểu thức từ trái sang phải:

- Nếu gặp một tốn hạng (con số hoặc biến) thì ghi nó vào chuỗi kết quả (chuỗi

kết quả là biểu thức trung tố).

9



- Nếu gặp dấu mở ngoặc, đưa nó vào stack.

- Nếu gặp một toán tử (gọi là o1 ), thực hiện hai bước sau:

o Chừng nào còn có một toán tử o2 ở đỉnh ngăn xếp VÀ độ ưu tiên của o1 nhỏ

hơn hay bằng độ ưu tiên của o2 thì lấy o2 ra khỏi ngăn xếp và ghi vào kết quả.

o Push o1 vào ngăn xếp

- Nếu gặp dấu đóng ngoặc thì cứ lấy các tốn tử trong ngăn xếp ra và ghi vào kết

quả cho đến khi lấy được dấu mở ngoặc ra khỏi ngăn xếp.

- Khi đã duyệt hết biểu thức trung tố, lần lượt lấy tất cả tốn hạng (nếu có) từ

ngăn xếp ra và ghi vào chuỗi kết quả.

string TrungToSangHauTo(string expression)

{

stack myStack;

string postfix = ""; // Initialize postfix as empty string.

cout <
<< setw(15) << "Postfix" << endl;

for(int i = 0;i< expression.length();i++) {

if(expression[i] == ' ' || expression[i] == ',') continue;

else if(KiemTraDau(expression[i]))

{

while(!myStack.empty()

&&

myStack.top()

SoSanhDau(myStack.top(), expression[i]))



!=



'('



&&



{

postfix+= myStack.top();

myStack.pop();

}

myStack.push(expression[i]);

}

Sinh viên thực hiện:Meunluang Thoy



Giáo viên hướng dẫn: Đồn Duy Bình



// Else if character is an operand

else if(KiemTraChuSo(expression[i]))

{

postfix +=expression[i];

}



else if (expression[i] == '(')

{

myStack.push(expression[i]);

}



else if(expression[i] == ')')

{

while(!myStack.empty() && myStack.top() != '(') {

postfix += myStack.top();

myStack.pop();

}

myStack.pop();

}

cout <
print_stack(myStack) << setw(15) << postfix << endl;

}



while(!myStack.empty()) {

postfix += myStack.top();

myStack.pop();

}



return postfix;

}



Hàm hiện thị tất cả trong một stack

11



string print_stack(stack c) {

string stack_ = "";

while (!c.empty()) {

stack_ += c.top();

c.pop();

}

reverse(stack_.begin(), stack_.end());

return stack_;

}



3.2



KẾT QUẢ DEMO



Sinh viên thực hiện:Meunluang Thoy



Giáo viên hướng dẫn: Đồn Duy Bình



KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN



Qua quá trình nghiên cứu và thực hiện đề tài, luận văn đã đạt được một số kết

quả như sau:

1. Về mặt lý thuyết

Đã tìm hiểu và nắm được stack , queue.

Hiểu được phương pháp đổi trung tố ra hậu tố sử dụng thuật toán ký tự Ba Lan.

2. Về mặt thực hành

Biết cách lên kế hoạch chi tiết để thực hiện một dự án hoàn thành đúng tiến độ.

Khả năng tự học, tự nghiên cứu tài liệu để xây dựng một ứng dụng trên Android

khi hiểu biết về nó khơng được nhiều.

Hiểu được các phần tổ chức dữ liệu trong android, cấu trúc file json.

3. Hướng phát triển

Tuy nhiên, với kiến thức có hạn, trong q trình làm luận văn còn nhiều thiếu

xót.Hy vọng trong thời gian tới có thể phát triển ứng dụng một cách tốt hơn, nhiều tính

năng mới hơn.



13



TÀI LIỆU THAM KHẢO



[1]



Kí pháp Ba Lan Wikipedia. [Online].

https://vi.wikipedia.org/wiki/K%C3%AD_ph%C3%A1p_Ba_Lan



[2]



Thảo luận hướng dẫn thuật toán Ba Lan. [Online].

https://trachanhso.net/thuat-toan-ky-phap-ba-lan



[3]



Xây dựng code từ thuật tốn. [Online].

https://daynhauhoc.com/t/giup-do-ky-phap-balan-dao-trung-to-hauto/7680



[4]



Giáo trình mơn học cấu trúc dữ liệu và thuật toán - Thầy ….



Sinh viên thực hiện:Meunluang Thoy



Giáo viên hướng dẫn: Đồn Duy Bình



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

1 XÂY DỰNG CHƯƠNG TRÌNH THEO KÝ PHÁP BA LAN

Tải bản đầy đủ ngay(0 tr)

×