jueves, 9 de junio de 2011

Pila En Ruby

Les dejo un pequeño programa en Ruby para el algoritmo de la Pila

#Clase para implementar el algoritmo de una pila en Ruby
#El algoritmo de una pila se basa en LIFO (Last in First Out o lo que es: El ultimo en entrar es el primero en salir)
#Acentos y otra la letra enie nos las acepta Ruby, o en mi caso marca error

class Pila

  def initialize      #Metodo para inicializar variables de tipo instancia
    @pos=0        #Una variable de tipo instancia se precede con un @
    @tam=0        #Variable Pos me ubicará el puntero de mi matriz y variable tam me indicara el tamanio de esta
  end  #Fin de initialize

 def mat            #Metodo para obtener el tamaño de la matriz
  print "Define tamanio de la matriz: "
  @tam=gets.chomp  
  @tam=@tam.to_i
  @matriz=Array.new(@tam)  #Creo la matriz con el tamaño obtenido
  menu        #Llamo al metodo menú
 end          #Fin del método mat

 def menu    #Metodo que muestra y llama a las opciones disponibles
   opc=1   
  while opc.to_i!=0   # Convertir el valor pedido por teclado a entero con la funcion .to_i  
   puts "*************"
   puts "*0 Salir    *"
   puts "*1 Insertar *"
   puts "*2 Liberar  *"
   puts "*3 Mostrar  *"
   puts "*************"
   print "Opcion: "
  STDIN.flush
  opc=gets.chomp
  opc=opc.to_i
   case opc
    when 1
       meter
    when 2
       sacar
    when 3
       mostrar
   end     #Fin del Case
  end    #Fin del ciclo while
 end     #Fin del metodo menu

 def meter
  if @pos < @tam
    print "Dame un valor numerico: "
    STDIN.flush
    val=gets.chomp
    @matriz[@pos.to_i]=val
    @pos += 1
  else
    print "=========>Error, la matriz esta llena\n"
  end    #Fin del if
 end    #fin del metodo meter
 
 def sacar
   if @matriz[0]==nil or @pos==0
    print "=========>Error: matriz vacia!!!! \n"
   else
     @pos -=1
     @matriz[@pos]=nil     #Adjunto valor nil o nulo
    print "Eliminado \n"
   end    #Fin del if
 end    #Fin del metodo sacar

 def mostrar
  for i in 0..(@matriz.length-1)
   print "Posicion #{i}---> "
   print @matriz[i]
   print "\n"
  end    #Fin del ciclo for
 end    #Fin del metodo mostrar
end    #Fin de la clase Pila

#Crearemos un objeto.
pil=Pila.new    #Con la palabra new, automaticamente llama al metodo initialize
pil.mat      #Llamamos al metodo mat