Queue Stack Reverse Polish Notation Learn programming Visual Basic (VB.net)



Lesson:

Dynamic Memory Management


Exercise:

Queue Stack Reverse Polish Notation


Objetive:

Create a program that reads a Reverse Polish Notation expression from a text file, for example:

3 4 6 5 - + * 6 +
(Result 21)

Each item will be stored in a queue. Once the queue has all the items stored, you will need to transfer them from the queue to a stack using the Queue and Stack classes provided in Visual Basic (VB.net).

Finally, you will operate with the stack to get the correct result of the RPN expression and show it on the console.


Code:

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Collections
Namespace FileTextQueue
    Class Program
        Private Shared Sub Main(ByVal args As String())
            Console.Write("Introduce el nombre del archivo: ")
            Dim nombreFichero As String = Console.ReadLine()

            If Not File.Exists(nombreFichero) Then
                Console.Write("El archivo no existe")
                Return
            End If

            Try
                Dim depurando As Boolean = True
                Dim ficheroTexto As StreamReader
                ficheroTexto = File.OpenText(nombreFichero)
                Dim line As String = " "
                Dim micola As Queue = New Queue()

                Do
                    line = ficheroTexto.ReadLine()
                    If line IsNot Nothing Then micola.Enqueue(line)
                Loop While line IsNot Nothing

                ficheroTexto.Close()
                Dim miPila As Stack = New Stack()
                Dim numero1 As Integer = 0, numero2 As Integer = 0
                Dim cantidadCola As Integer = micola.Count
                Dim valorCola As String
                Dim valores_linea As String()

                For i As Integer = 0 To cantidadCola - 1
                    valorCola = CStr(micola.Dequeue())
                    valores_linea = valorCola.Split(" "c)

                    For c As Integer = 0 To valores_linea.Length - 1

                        Select Case valores_linea(c)
                            Case "+"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 + numero1)
                            Case "-"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 - numero1)
                            Case "*"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 * numero1)
                            Case "/"
                                numero1 = Convert.ToInt32(miPila.Pop())
                                numero2 = Convert.ToInt32(miPila.Pop())
                                miPila.Push(numero2 / numero1)
                            Case Else
                                miPila.Push(valores_linea(c))
                        End Select
                    Next

                    For j As Integer = 0 To miPila.Count - 1
                        Console.WriteLine(miPila.Pop())
                    Next
                Next

                If depurando Then Console.ReadLine()
            Catch e As Exception
                Console.WriteLine("Error, " & e.Message)
            End Try
        End Sub
    End Class
End Namespace



Juan A. Ripoll - Systems Tutorials and Programming Courses ©  All rights reserved.  Legal Conditions.