Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TRABAJO FINAL
PRESENTADO POR:
JOSE MENDOZA SANCHEZ
JEAN CUADROS VASQUEZ
EDSON ARTURO QUISPE ORNAY
EFRAIN DUWAL PARRA QUISPE
DOCENTE:
LIMA PER
2017
DESARROLLO DE UN SIMULADOR DE PROPAGACION DE UN VIRUS
Este objeto tendr como funcin almacenar informacin de cada ciclo y tendr
informacin detallada como:
IdCiclo
Esta propiedad permitir almacenar el nmero del ciclo.
HabitacionesInfectadas
Esta propiedad almacenara la cantidad actual de habitaciones infectadas en
un determinado ciclo.
CantidadMuertosPorCiclo
Este indicador permitir almacenar la cantidad de muertos que existan en
un determinado ciclo.
PorcentajeInfeccion
Esta propiedad permitir almacenar la informacin la cual es el clculo de la
cantidad total de habitaciones infectadas entre el total de salas o habitaciones
que hay en el hospital.
MuertosTotalesEnElMomento
Esta propiedad permitir almacenar la cantidad de muertos totales que
existen hasta el ciclo actual.
CuadroInfeccioso
Esta propiedad permitir almacenar un arreglo con los puntos de infeccin
de un determinado ciclo.
B) ProcesoInfeccion
Este Objeto ser el encargado de realizar los diferentes procesos que harn
que la posible infeccin de cada ciclo.
A continuacin, detallo la funcin que realiza cada mtodo o propiedad:
CONST_PERSONA_X_HABITACION
Esta constante almacenara un nmero nico y fijo de personas que se
hospedaran en una habitacin. En caso que sea modificado en cualquier lado
lanzara una excepcin.
definirHabitaciones
Este mtodo retornara un array con las posiciones iniciales de las
habitaciones (antes del proceso de infeccin). Este mtodo ser utilizado en
diferentes mtodos a modo de apoyo.
El constructor de la clase ProcesoInfeccion
En el constructor se incluirn variables de modo de apoyo.
cantidadHabitaciones
Este mtodo devuelve un entero que har referencia a la cantidad de
habitaciones que tiene el hospital.
pintar
o Recibir como parmetro un arreglo(habitaciones).
o Este mtodo es el encargado de hacer el pintado del detallado de las
habitaciones, en caso haya una infeccin mostrara los puntos de
infeccin de cada habitacin.
procesoInfeccionPorCiclo
o Recibir como parmetro la cantidad de ciclo y los puntos iniciales de
infeccin
o Este mtodo es el encargado de realizar todo el proceso de hallar y
determinar una infeccin en cada habitacin y ciclo.
convertStringToArray
inicioFocoInfeccioso
o Recibir como parmetro las habitaciones inicialmente intactas sin la
infeccin y el otro ser son los puntos iniciales de infeccin que habr en
cada habitacin.
o Este mtodo ser el encargado de realizar el proceso inicial de infeccin
que habr en una determinada posicin de una habitacin.
procesoInicioInfeccion
o Recibir como parmetro el arreglo de habitaciones
o Este mtodo se encargar de recorrer cada habitacin y con un apoyo
de un submetodo es quien determinar si una habitacin estar
infectada o no.
validarInfeccionPorHabitacion
o Recibir como parmetro la fila y la columna la cual sern las posiciones
de una habitacin y un segundo parmetro que ser el arreglo de
habitaciones.
o Este mtodo se encargar de ubicar la cantidad de habitaciones
infectadas que hay alrededor de la posicin actual de una habitacin, al
final retornar y validar si la habitacin actual ser propensa a una
infeccin.
validarInfeccion
o Recibir como parmetro la cantidad de habitaciones infectadas que hay
alrededor una habitacin, la fila y la columna donde se encuentra una
habitacin, el arreglo de habitaciones.
o Este mtodo validara de acuerdo a la cantidad de habitaciones infectadas
alrededor de una habitacin central y segn a las condiciones
establecidas se cumplirn los siguientes:
main
o Este mtodo ser el mtodo principal donde iniciaremos todos los
procesos anteriormente mencionadas.
o Imagen 2
a. Imagen A
ii. Imagen 2
La cantidad a devolver en este caso ser 4
class Ciclo
def setCuadroInfeccioso=(value)
@cuadroInfeccioso = value
end
def getCuadroInfeccioso
@cuadroInfeccioso
end
def getIdCiclo()
@idCiclo
end
def setIdCiclo=(value)
@idCiclo = value
end
def getHabitacionesInfectadas()
@habitacionesInfectadas
end
def setHabitacionesInfectadas=(value)
@habitacionesInfectadas = value
end
def setCantidadMuertosPorCiclo=(value)
@muertosPorCiclo = value
end
def getCantidadMuertoPorCiclo()
@muertosPorCiclo
end
def setPorcentajeInfeccion=(value)
@porcentaje = value
end
def getPorcentajeInfeccion()
@porcentaje
end
def setMuertosTotalesEnElMomento=(value)
@muertosTotales=value
end
def getMuertosTotalesEnElMomento()
@muertosTotales
end
end
class ProcesoInfecion
CONST_PERSONA_X_HABITACION = 10
#CONST_HABITACIONES = [[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,0,0,0,0,0,0,0,0,-1] ,
# [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]]
def definirHabitaciones()
habitaciones = [
[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,0,0,0,0,0,0,0,0,-1] ,
[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
]
end
def initialize()
@VECTOR_TMP = Hash.new
@TOTAL_HABITACION_INFECTADAS = 0
@MAP_MUERTOS_X_CICLO = Hash.new
@TOTAL_MUERTOS_X_CICLO = 0
@TOTAL_SALAS = cantidadHabitaciones()
@MUERTOS_TOTALES = 01
end
def cantidadHabitaciones()
room_arreglo = definirHabitaciones()
rooms = 0
for rows in 0...room_arreglo.length do
for col in 0...room_arreglo[rows].length do
if room_arreglo[rows][col] >-1
rooms = rooms +1
end
end
end
room_arreglo=nil
return rooms
end
@MUERTOS_TOTALES+=@TOTAL_MUERTOS_X_CICLO*CONST_PERSONA_X_
HABITACION
##Almacenamos en un Array las posiciones de las infecciones
objCiclo.setCuadroInfeccioso = convertStringToArray(
habitaciones.join(",") )
#puts habitaciones.join(",")
##Cantidad de Habitaciones infectadas
objCiclo.setHabitacionesInfectadas=(@TOTAL_HABITACION_INFECTADAS)
##Cantidad de Muertos por Ciclo
objCiclo.setCantidadMuertosPorCiclo=(@TOTAL_MUERTOS_X_CICLO*CONST_PER
SONA_X_HABITACION)
##Porcentaje de Infeccion
objCiclo.setPorcentajeInfeccion =
100*(@TOTAL_HABITACION_INFECTADAS/@TOTAL_SALAS.to_f )
##Total de Muertos que se acumulan en cada ciclo
objCiclo.setMuertosTotalesEnElMomento =
@MUERTOS_TOTALES
pintar(objCiclo.getCuadroInfeccioso())
##Detalle de la informacion de cada ciclo
print "------------------------INFORMACION---------------------------\n"
print "> CICLO #{ciclo} \t Muertos en el ciclo
#{@TOTAL_MUERTOS_X_CICLO*CONST_PERSONA_X_HABITACION} \n"
print "> Habitaciones infectadas
#{@TOTAL_HABITACION_INFECTADAS} \n"
print "> Porcentaje de infeccion #{
100*(@TOTAL_HABITACION_INFECTADAS/@TOTAL_SALAS.to_f) } \n"
print "> Muertos totales #{ @MUERTOS_TOTALES} \n"
print "--------------------------------------------------------------\n"
#liberando en memoria
objCiclo = nil
## break if
@TOTAL_SALAS*CONST_PERSONA_X_HABITACION==@MUERTOS_TOTALES
end
end
end
###Metodo que usa como parametro un arreglo
def convertStringToArray(array___)
tmp = array___.split(",")
aux_array = definirHabitaciones()
indice = 0
for fila in 0..9 do
for columna in 0..9 do
aux_array[fila][columna] = tmp[indice].to_i
indice =indice + 1
end
end
return aux_array
end
def inicioFocoInfeccioso(habitaciones,infeccion)
for rows in 0...habitaciones.length do
for col in 0...habitaciones[rows].length do
if habitaciones[rows][col] > -1
for f_afecta in 0...infeccion.length do
begin
f = (infeccion[f_afecta][0]).to_i
c = (infeccion[f_afecta][1]).to_i
if (f>0 && f<9) && (c>0 && c<9)
habitaciones[f][c] = 1
end
rescue
end
end
@TOTAL_HABITACION_INFECTADAS+=1 if
habitaciones[rows][col]==1
if !@MAP_MUERTOS_X_CICLO.key?("#{rows}-
#{col}") && habitaciones[rows][col]==1
@MAP_MUERTOS_X_CICLO["#{rows}-
#{col}"] = 1
@TOTAL_MUERTOS_X_CICLO+=1
end
end
end
end
return habitaciones
end
def procesoInicioInfeccion(habitaciones)
for rows in 0...habitaciones.length do
for col in 0...habitaciones[rows].length do
if habitaciones[rows][col]>-1
habitaciones[rows][col] =
validarInfeccionPorHabitacion(rows,col , habitaciones)
@TOTAL_HABITACION_INFECTADAS+=1 if
habitaciones[rows][col]==1
if !@MAP_MUERTOS_X_CICLO.key?("#{rows}-
#{col}") && habitaciones[rows][col]==1
@MAP_MUERTOS_X_CICLO["#{rows}-
#{col}"] = 1
@TOTAL_MUERTOS_X_CICLO+=1
end
end
end
end
return habitaciones
end
[6,4],[6,1],[6,1],[6,2],[6,3],[6,4],[6,5],[6,6],[6,7],[6,8]]
respuesta = 1
while respuesta==1 do
print "-----------------------------------------------\n"
print "Ingrese un ciclo para saber su informacion: "
ciclo_averiguar = gets.to_i
print "\n"
if ciclo_averiguar<=ciclo
cicloBean = @VECTOR_TMP[ciclo_averiguar]
print "-CICLO #{cicloBean.getIdCiclo()}\tMuertos en el ciclo
#{cicloBean.getCantidadMuertoPorCiclo()}\n"
print "-Habitaciones infectadas
#{cicloBean.getHabitacionesInfectadas()}\n"
print "-Porcentaje de infeccion
#{cicloBean.getPorcentajeInfeccion()}\n"
print "-Muertos totales hasta ese entonces
#{cicloBean.getMuertosTotalesEnElMomento()}\n"
pintar(cicloBean.getCuadroInfeccioso())
cicloBean = nil
else
print "debe ser menor a #{ciclo}"
end
print "\n"
print "DESEAS CONTINUAR : SI(1) / NO(<>1) "
respuesta = gets.to_i
end
end
end
i = ProcesoInfecion.new()
i.main