En el archivo “parcial-II.R” ud. tiene un script en el cual deberá guardar todos los comandos del ejercicio, siguiendo la demarcación que se muestra en el mismo.
Nota: los ejercicios del parcial son dependientes de los anteriores en el sentido de que utilizan objetos creados, pero no implica que no se puedan tratar de resolver independientemente.
Los ejercicios con (*) presentan un puntaje de 1.5, mientras que los que no tienen (*) equivalen a 1 punto.
Una vez terminado el parcial usted deberá subir a la página del EVA el archivo “parcial-II.R” con su código.
Para simular la cantidad de pasajeros de un ómnibus urbano se ha creado el código que aparece sobre el final del ejercicio (y que también se encuentra en el script parcial-II.R). El criterio es el siguiente: el bus recorre 25 paradas, empezando el trayecto sin pasajeros. En cada parada se subirá una cantidad aleatoria de entre 0 a 6 personas (siendo todas las cantidades equiprobables), pero debido a que existe un máximo estipulado de 44 pasajeros, a partir del momento en que se alcanza ese valor el vehículo deja de subir gente.
*) a. Código incompletoCompletar el código: las líneas en blanco que se encuentran dentro de los límites del código indican en dónde debe cambiarse. El resto de las líneas están correctas.
Código fuente:
# Preparación:
paradas <- 25
pasajeros <- 0
registro[1] <- pasajeros
for (i in 1:paradas) {
# A ver si no se llenó:
if (pasajeros >= 44) {
# Ajuste por si llega a 44 antes de terminar:
registro[i:paradas] <- 44
cat('Bus lleno!\n') # Mensaje de aviso...
break
# Si no se corta el loop, se agrega un nuevo registro:
registro[i] <- pasajeros
# Para ir viendo cuánto hay:
cat('Parada', i, 'hay', pasajeros, 'pasajeros\n')
}
plot(registro, xlab='Parada', ylab='No. de pasajeros')
Sugerencias: (1) la función sample puede ser útil para simular la subida de pasajeros. (2) Tanto en este como en los siguientes ejercicios, en caso de no estar seguro/a de cómo proceder, puede facilitar mucho la tarea hacer un diagrama de flujo sencillo antes de empezar a escribir código.
La siguiente imagen se obtuvo haciendo la simulación, ejecutando previamente set.seed(11) y luego el comando gráfico:
plot(registro, xlab = "Parada", ylab = "No. de pasajeros")
Modifique el código de la parte anterior de forma tal que haga lo mismo, pero utilizando un loop while.
Sugerencias: (1) agrege manualmente una variable (p.ej.: i) que sirva para indexar los distintos objetos y recuerde actualizarla en la linea correcta del código y (2) usar un if posterior al loop puede ser útil para sustituir los ceros del final por 44 en el vector registro (aunque no es de ninguna manera el único método).
Nota: el gráfico que se dió en la parte anterior tamibén aplica para este ejercicio.
*) c. Función busModifique el código reparado en la parte a para crear una función llamada bus que ejecute la misma simulación, en la que el número de paradas y capacidad máxima del bus sean los argumentos de la misma. El nombre de estos argumentos son a su elección.
Como salida la función debe devolver simplemente el vector registro.
Nota: recuerde que esta función debe trabajar correctamente para cualquier elección del número de paradas y máximo de pasajeros. En el siguiente ejemplo se muestra un caso que puede servir de referencia:
set.seed(11)
# Nro. de paradas = 40 Máximo de pasajeros = 80
x <- bus(40, 80)
## Parada 1 hay 1 pasajeros
## Parada 2 hay 1 pasajeros
## Parada 3 hay 4 pasajeros
## Parada 4 hay 4 pasajeros
## Parada 5 hay 4 pasajeros
## Parada 6 hay 10 pasajeros
## Parada 7 hay 10 pasajeros
## Parada 8 hay 12 pasajeros
## Parada 9 hay 18 pasajeros
## Parada 10 hay 18 pasajeros
## Parada 11 hay 19 pasajeros
## Parada 12 hay 22 pasajeros
## Parada 13 hay 28 pasajeros
## Parada 14 hay 33 pasajeros
## Parada 15 hay 38 pasajeros
## Parada 16 hay 42 pasajeros
## Parada 17 hay 45 pasajeros
## Parada 18 hay 47 pasajeros
## Parada 19 hay 48 pasajeros
## Parada 20 hay 51 pasajeros
## Parada 21 hay 52 pasajeros
## Parada 22 hay 56 pasajeros
## Parada 23 hay 58 pasajeros
## Parada 24 hay 60 pasajeros
## Parada 25 hay 60 pasajeros
## Parada 26 hay 63 pasajeros
## Parada 27 hay 65 pasajeros
## Parada 28 hay 65 pasajeros
## Parada 29 hay 65 pasajeros
## Parada 30 hay 67 pasajeros
## Parada 31 hay 70 pasajeros
## Parada 32 hay 72 pasajeros
## Parada 33 hay 74 pasajeros
## Parada 34 hay 75 pasajeros
## Bus lleno!
Hacer una variante del código (de cualquiera de las partes anteriores) en la que además de subir personas, a partir de la parada 10 se bajen entre 1 y 5 pasajeros por parada. Tanto la subida y la bajada deben ejecutarse antes de determinar si se alcanzó el máximo estipulado de pasajeros y por lo tanto si debe dejar de detenerse el bus en las paradas.
Sugerencia: puede ser muy útil hacer un diagrama de flujo sencillo para planificar el código antes de escribirlo.
El siguiente es un ejemplo del resultado de aplicar los cambios que se piden en la función bus:
set.seed(11)
x <- bus(30, 60)
## Parada 1 hay 1 pasajeros
## Parada 2 hay 1 pasajeros
## Parada 3 hay 4 pasajeros
## Parada 4 hay 4 pasajeros
## Parada 5 hay 4 pasajeros
## Parada 6 hay 10 pasajeros
## Parada 7 hay 10 pasajeros
## Parada 8 hay 12 pasajeros
## Parada 9 hay 18 pasajeros
## Parada 10 hay 17 pasajeros
## Parada 11 hay 15 pasajeros
## Parada 12 hay 16 pasajeros
## Parada 13 hay 17 pasajeros
## Parada 14 hay 18 pasajeros
## Parada 15 hay 19 pasajeros
## Parada 16 hay 21 pasajeros
## Parada 17 hay 22 pasajeros
## Parada 18 hay 23 pasajeros
## Parada 19 hay 22 pasajeros
## Parada 20 hay 21 pasajeros
## Parada 21 hay 20 pasajeros
## Parada 22 hay 16 pasajeros
## Parada 23 hay 18 pasajeros
## Parada 24 hay 16 pasajeros
## Parada 25 hay 14 pasajeros
## Parada 26 hay 12 pasajeros
## Parada 27 hay 14 pasajeros
## Parada 28 hay 16 pasajeros
## Parada 29 hay 13 pasajeros
## Parada 30 hay 15 pasajeros