Skip to content

Instantly share code, notes, and snippets.

@geocodinglife
Created April 9, 2017 21:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geocodinglife/22446a5c34c201eec0499b8af8801313 to your computer and use it in GitHub Desktop.
Save geocodinglife/22446a5c34c201eec0499b8af8801313 to your computer and use it in GitHub Desktop.
#pending to comberted to more objec oriented.......
class Bus
attr_reader :asientos
def initialize
@asientos = (1..40).to_a
end
def rellenar_aleatorio
cant_pasajeros = rand * 25 + 5
for i in 1..cant_pasajeros
pos = rand * 40
loop do
ins = @asientos[pos].inspect
if ins.to_i != 0
@asientos[pos] = " *"
break
else
pos = rand * 40
redo
end
end
end
end
def ingresar_pasajero num
ins = @asientos[num - 1].inspect
if ins == " *"
return false
elsif ins.to_i != 0
@asientos[num - 1] = " *"
return true
end
end
def eliminar_pasajero num
ins = @asientos[num - 1].inspect
if ins["*"] == "*"
@asientos[num - 1] = num
return true
elsif ins.to_i > 0
return false
end
end
end
class Menu
attr_accessor :exit
def initialize
@exit = false
@bus = Bus.new
@bus.rellenar_aleatorio
end
def mostrar_menu
puts "-----[[FuryBuses]]-----"
puts "1) Ingresar un pasajero"
puts "2) Eliminar un pasajero"
puts "3) Mostrar asientos"
puts "4) Salir"
puts "Opción: "
end
def opcion
opt = gets.chomp.to_i.abs
case opt
when 1 then
ingresar_pasajero
when 2 then
eliminar_pasajero
when 3 then
mostrar_asientos
when 4 then
@exit = true
end
end
private
def ingresar_pasajero
print "Ingrese el número de asiento: "
num = gets.chomp.to_i.abs
if @bus.ingresar_pasajero num
puts "--- Pasajero ingresado ---"
else
puts "--- Pasajero no ingresdo ---"
end
end
def eliminar_pasajero
print "Ingrese el número de asiento: "
num = gets.chomp.to_i.abs
if @bus.eliminar_pasajero num
puts "--- Pasajero eliminado ---"
else
puts "--- Pasajero no eliminado ---"
end
end
def mostrar_asientos
puts "-----[[FuryBuses]]-----"
sum = 0
for i in 0...10
asiento1 = @bus.asientos[i+sum].class == Fixnum ? "%2d" % @bus.asientos[i+sum] : @bus.asientos[i+sum]
asiento2 = @bus.asientos[i+1+sum].class == Fixnum ? "%2d" % @bus.asientos[i+1+sum] : @bus.asientos[i+1+sum]
asiento3 = @bus.asientos[i+2+sum].class == Fixnum ? "%2d" % @bus.asientos[i+2+sum] : @bus.asientos[i+2+sum]
asiento4 = @bus.asientos[i+3+sum].class == Fixnum ? "%2d" % @bus.asientos[i+3+sum] : @bus.asientos[i+3+sum]
puts "[#{asiento1}] [#{asiento2}]| |[#{asiento3}] [#{asiento4}]"
sum += 3
end
end
end
menu = Menu.new
until menu.exit
menu.mostrar_menu
menu.opcion
end

el problema para solucionar lo encontre en este link http://www.solveet.com/exercises/Programa-de-pedido-de-asientos-en-un-bus/488/solution-2752

Programa de pedido de asientos en un bus

Crear un programa para pedido de asientos en buses, hay un máximo de 40 asientos. De 5 a 30 se rellenan de forma aleatoria y los demás se pueden rellenar de forma manual con un menú. Gracias al menú se puede crear pasajeros, eliminar pasajeros, mostrar asientos.

No se puede ingresar pasajeros en asientos ya ocupados y no se puede eliminar pasajeros en asientos no ocupados. Use clases y objetos.

@Rojo
Copy link

Rojo commented Apr 16, 2017

Ahora que he tenido tiempo de ver está solución, estás son las cosas que he notado:

  • Línea 5 @asientoss: Usar un array para representar los asientos puede no ser la mejor solución, ya que el número del asiento no se traduce directamente al su posición en el array. Yo utilizaría un hash empleando como llaves el número del asiento.

  • Línea 8 rellenar_aleatorio: Me parece que éste método debe ser extraido de Bus y colocarlo en Menu de forma que actue sobre Bus.

  • Líneas 31 y 42: La forma de representar si un asiento está ocupado o no, no es explicita. Yo utilizaría symbols.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment