Tìm Kiếm
  Ngày 09 Tháng 09 Năm 2010 , 03:19:43 Đăng Ký  Đăng Nhập
   


Đăng ký
Quên Password ?

   
 
  Diễn đàn chính  Công nghệ thông...  Windows  Thuật toán chuyển công thức toán học sang Ký pháp Ba Lan được mô phỏng bằng VB.NET
Trước Trước
 
Tiếp Theo Tiếp Theo
Bài Mới 07/01/2010 1:37 CH
Thành viên offline admin
152 bài
www.cdndalat.edu.vn
Thành viên Tích cực


Thuật toán chuyển công thức toán học sang Ký pháp Ba Lan được mô phỏng bằng VB.NET 
Thay Đổi Bởi admin  vào 09/01/2010 5:19:58 CH)

Theo nhu cầu của thành viên, tôi xin viết lại một Demo trên ngôn ngữ VB (sử dụng VB.NET 2005) để chuyển đổi một biểu thức toán học thành chuỗi theo ký pháp Ba Lan mà chúng ta đã biết.

Có lẽ đây là code đầu tiên mà các bạn được thấy với thuật toán này trên VB.NET, vì từ trước đến nay mọi người chỉ viết trên C++ thôi,  nó ngắn gọn hơn, dễ viết hơn, ... đơn giản vậy thôi.

Trong  bài viêt này, bạn sẽ thấy để giải quyết công việc đó trên VB cũng không có gì khó, tuy nhiên bạn sẽ cảm thấy hơi dài dòng một chút:

'Author: Pham Dinh Nam

'Adress: Dalat Vocational Training College - 01 Hoang Van Thu st - Dalat city

'Email: admin@cdndalat.edu.vn

'Website: http://cdndalat.edu.vn

'Mobile: 0988.131.130

 

  'Để đơn giản ta chỉ thực hiện các phép toán +,-,*,/

    Function LaToanTu(ByVal ch As Char) As Boolean

        Return ((ch = "+") Or (ch = "-") Or (ch = "*") Or (ch = "/"))

    End Function

 

    'Để đơn giản ta định nghĩa toán hạng là những ký hiệu ngoài 4 phép toán +,-,*,/

    Function LaToanHang(ByVal ch As Char) As Boolean

        Return ((ch <> "+") And (ch <> "-") And (ch <> "*") And (ch <> "/"))

    End Function

 

    Function UuTien(ByVal toanhang As Char) As Integer

        Select Case (toanhang)

            Case "+"

                Return 1

            Case "-"

                Return 2

            Case "/"

                Return 3

            Case "*"

                Return 4

                '............

        End Select

    End Function

 

    Function KetQua(ByVal chuoi As String) As String

        Dim iString As Integer = 1, iStack As Integer = 1, iResult As Integer = 0

        Dim Stack As String = " "   'Đặt 1 khoảng trắng (có độ dài 1 cho dễ lập trình)

        Dim Result As String = ""

 

        While iString <= Len(chuoi)

 

            If Mid(chuoi, iString, 1) = "(" Then            'Nếu gặp dấu (

                Stack = Stack & Mid(chuoi, iString, 1)      'thì nạp dấu ( vào Stack

                iStack = iStack + 1

            ElseIf LaToanHang(Mid(chuoi, iString, 1)) Then  'Nếu là toán hạng

                Result = Result & Mid(chuoi, iString, 1)    'thì đưa toán hạng vào chuỗi kết quả

                iResult = iResult + 1

 

            ElseIf LaToanTu(Mid(chuoi, iString, 1)) Then   'Nếu là toán tử

                'Trong khi toán tử ở đỉnh Stack  lớn hơn toán tử đang xét

                While LaToanTu(Mid(Stack, iStack, 1)) And UuTien(Mid(Stack, iStack, 1)) >= UuTien(Mid(chuoi, iString, 1))

                    iResult = iResult + 1

                    Result = Result & Mid(Stack, iStack, 1)

                    Stack = Stack.Remove(iStack - 1)

                    iStack = iStack - 1

                End While

                iStack = iStack + 1

                Stack = Stack & Mid(chuoi, iString, 1)  'Thêm toán tử đang xét Stack

 

            ElseIf Mid(chuoi, iString, 1) = ")" Then    'Nếu gặp dấu )

                While Mid(Stack, iStack, 1) <> "("  'Trong khi gặp dấu (

                    iResult = iResult + 1

                    Result = Result & Mid(Stack, iStack, 1) 'Lấy ra và đưa vào chuỗi Kết quả

                    Stack = Stack.Remove(iStack - 1)

                    iStack = iStack - 1

                End While

                Stack = Stack.Remove(iStack - 1)

                iStack = iStack - 1

            End If

            iString = iString + 1

        End While

 

        While iStack <> 1    'Nạp toàn bộ toán hạng (nếu còn) trong Stack ghi vào chuỗi kết quả

            iResult = iResult + 1

            Result = Result & Mid(Stack, iStack, 1)

            Stack = Stack.Remove(iStack - 1)

            iStack = iStack - 1

        End While

 

        Return Result

 

    End Function

 

Công việc còn lại là các bạn chỉ thực hiện việc gọi hàm KetQua, tôi có làm một demo trên VB.NET 2005, đăng nhập thành viên để download nhé!

 

 
 Đăng nhập để tải về file đính kèm
Bài Mới 09/01/2010 3:33 CH
Thành viên offline incon35
9 bài
Thành viên Dự bị


Re: Thuật toán chuyển công thức toán học sang Ký pháp Ba Lan được mô phỏng bằng VB.NET 

 

thanks admin có gì xin đa tạ sau


 
Bài Mới 29/04/2010 5:00 CH
Thành viên offline incon35
9 bài
Thành viên Dự bị


Re: Thuật toán chuyển công thức toán học sang Ký pháp Ba Lan được mô phỏng bằng VB.NET 

em đang làm đề tài liên quan đến quản lý thuê bao di động  cho em xin nhưng dữ liệu liên quan đến việc quản lý thuê bao trả trước và trả sau cần quản lý những gì
mong được sự giúp đỡ, thanks admin nhiều!!!

 
Trước Trước
 
Tiếp Theo Tiếp Theo
  Diễn đàn chính  Công nghệ thông...  Windows  Thuật toán chuyển công thức toán học sang Ký pháp Ba Lan được mô phỏng bằng VB.NET
   Thống kê thành viên
Thành Viên Thành Viên:
Mới Nhất Mới Nhất: lovexinh93
Hôm Nay Hôm Nay: 9
Hôm Qua Hôm Qua: 8
Số Thành Viên Toàn Bộ: 4561

Thành Viên Online Thành Viên Online:
Khách Khách: 2
Thành Viên Thành Viên: 0
Tổng Số Tổng Cộng: 2

Đang Online Đang Online:


Trường Cao đẳng Nghề Đà Lạt
Địa chỉ: 01 Hoàng Văn Thụ - Phường 4 - TP Đà Lạt - Lâm Đồng
ĐT: (063)3827063 Fax: (063)3836654 Email: admin@cdndalat.edu.vn