Está en la página 1de 3

Escuela de Matematica - UNAH

MM314 - Programacion I
I Periodo 2017
Tarea 3 Parte 1 de 2
1. Almacenar pares ordenados (a, b) en un arreglo bidimensional
En matematica, un par ordenado es una pareja de objetos matematicos, en la que se distingue un elemento y otro.
El par ordenado cuyo primer elemento es a y cuyo segundo elemento es b se denota como (a, b).
a) Escriba una funcion en C++ llamada agregarP arOrdenado.
b) La funcion recibe como parametros un arreglo bidimensional de enteros de m-filas y 2 columnas, tres parametros
de tipo entero:k, a, b, donde a y b forman el par ordenado (a, b).
c) El parametro k es pasado por referencia, los parametros a y b son pasados por valor, la funcion no retorna
algun valor.
d) La funcion almacena el par ordenado (a, b) en la k-esima fila en el arreglo bidimensional. Esto es, almacena el
valor de a en la fila k columna 0 y almacena el valor de b en la fila k columna 1 del arreglo bidimensional de
enteros, siempre que el par ordenado (a, b) no este almacenado en el arreglo bidimensional. Valide que k sea
menor que m para poder alamcenar el par ordenado.
e) Incremente en una unidad el valor de k solo si el par ordenado (a, b) fue almacenado en el arreglo bidimensional.
2. Obtener un par ordenado (a, b) almacenado en un arreglo bidimensional de forma aleatoria.
Escriba una funcion en C++ llamada obtenerP arOrdenadoRandom.
a) La funcion recibe como parametro un arreglo bidimensional de enteros de m-filas y 2 columnas, tres parametros
de tipo entero: k, x, y.
b) Los parametros son pasados por referencia a la funcion, la funcion no retorna algun valor.
c) La funcion obtiene un par ordenado (x, y) de manera aleatoria del arreglo bidimensional de la siguiente forma:
Primero se escoge un ndice entre 0 y k 1, incluyendo los extremos, de forma aleatoria, al que llamaremos
z, luego accedemos a la fila z, columna 0 y almacenamos el valor en x, de igual forma accedemos a la fila z,
columna 0 y almacenamos el valor en y.
d) Eliminar el par ordenado almacenado en la posicion z del arreglo.
e) Disminuya en una unidad el valor de k.
3. Crear un laberinto
Para crear un laberinto se necesita saber que es una distancia a dos en una cuadricula. La imagen siguiente

muestra dicha distancia. Las celdas de color azul son


las celdas que estan a una distancia a dos de la celda de color rojo. Esto es, si la celda de color rojo es (i, j)
entonces las celdas que estan a distancia dos son los siguientes pares ordenados (i2, j), (i+2, j), (i, j 2), (i, j +2).

Algoritmo para construir laberintos aleatorios: Escriba una funcion en C++ llamada crearLaberinto la
que recibe como parametro un arreglo bidimensional L de enteros de m-filas y n-columnas. La funcion hace lo
siguiente:

1
a) Se tiene una cuadricula de n m celdas donde cada celda tiene un identificador unico, esto es el par ordenado
(i, j), donde i = 0, 1, 2, ..., m 1 y j = 0, 1, 2, ..., n 1, inicialmente todas las celdas esta bloqueadas.
b) Cree dos arreglos bidimensionales de enteros. Uno de m + n filas y 2 columnas, llamelo PBLOQUEADOS, el
otro de 4 filas y 2 columnas, llamelo PDESBLOQUEADOS.
c) Se selecciona la celda (1, 1) y desbloquearla, almacene los pares ordenados de las celdas bloqueadas que estan
a distancia dos de la celda (1, 1) al arreglo PBLOQUEADOS utilizando la funcion del ejercicio #1, estos pares
ordenados son (i 2, j), (i + 2, j), (i, j 2), (i, j + 2) , siempre que i > 0 y i < m 2 y j > 0 y j < n 2 .
d) Mientras haya pares ordenados en PBLOQUEADOS hacer lo siguiente
1) Elegir un par ordenado (i, j) al azar de PBLOQUEADOS utilizando la funcion del ejercicio #2
2) Almacenar los pares ordenados de las celdas desbloqueadas que estan a distancia dos de la celda (i, j) en el
arreglo PDESBLOQUEADOS utilizando la funcion del ejercicio #1, estos pares ordenados son (i 2, j), (i +
2, j), (i, j 2), (i, j + 2) , siempre que i > 0 y i < m 2 y j > 0 y j < n 2.
3) Elegir un par ordenado (a, b) al azar de PDESBLOQUEADOS utilizando la funcion del ejercicio #2.
4) Desbloquear la celda que esta entre (i, j) y (a, b).
5) Desbloquear la celda (i, j).
6) Borrar todos los pares ordenados del arreglo PDESBLOQUEADOS.
7) Almacenar los pares ordenados de las celdas bloqueadas que estan a distancia dos de la celda (i, j) en el
arreglo PBLOQUEADOS utilizando la funcion del ejercicio #1, estos pares ordenados son (i 2, j), (i +
2, j), (i, j 2), (i, j + 2) , siempre que i > 0 y i < m 2 y j > 0 y j < n 2.
e) Imprima en pantalla el laberinto generado de la siguiente forma: Recorra el arreglo bidimensional de enteros con
un doble ciclo de repeticion para, si L[i][j] es igual a 0 entonces hacer lo siguiente cout<<char(219)<<char(219);,
de lo contrario hacer lo siguiente cout<< ;, despues del segundo ciclo de repeticion para hacer lo siguiente
cout<<endl;
Nota: Bloquear una celda (i, j) es establecer 0 a L[i][j], Desbloquear una celda (i, j) es establecer 1 a L[i][j].
4. Moverse de forma aleatoria a una celda disponible en un arreglo bidimensional
Dado el par ordenado (i, j) solo hay cuatro posibles posiciones para moverse junto a la celda (i, j), estas son:(i, j +
1), (i, j 1), (i + 1, j), (i 1, j), lo que significa que hay cuatro caminos posibles (Ver figura).

Al par ordenado (i 1, j) sera el camino 1, (i, j + 1) sera el camino 2, (i + 1, j) sera el camino 3 y (i, j 1) sera
el camino 4. Se dice que el camino 1 esta disponible si L[i 1][j] > 0 y L[i 1][j] < 5, de igual manera con el
camino 2, 3 y 4.
Escriba una funcion en C++ llamada moverseRandom la que recibe como parametro un arreglo bidimensional L
de enteros de m-filas y n-columnas, tres parametros de tipo entero: i, j, z, donde i y j forman el par ordenado
(i, j) de la posicion actual, z es el camino tomado anteriormente. Los parametros son pasados por referencia. La
funcion hace lo siguiente:

a) Si el numero de caminos disponibles es igual a 0, entonces no se toma ningun camino.

2
b) Si el numero de caminos disponibles es igual a 1, entonces se toma ese camino.
c) Si el numero de caminos disponibles es igual a 2, entonces se toma el camino con la direccion anterior siempre
que exista, de lo contrario se selecciona de forma aleatoria uno de los dos caminos disponibles.
d) Si el numero de caminos disponibles es mayor que 2, entonces se selecciona de forma aleatoria uno de los
caminos disponibles.
e) Resetear los valores de i, j y z con los nuevos valores encontrados.
5. Obtener un par ordenado de indices (i, j)
Escriba una funcion en C++ llamada obtenerIndicesRandom la que recibe como parametro un arreglo bidimensional
L de enteros de m-filas y n-columnas, tres parametros de tipo entero: x, y. La funcion hace lo siguiente:
a) Obtiene los indices i y j de forma aleatoria talque L[i][j] es igual a 1
b) Almacenar los indices encontrados en las variables x y y respectivamente.

También podría gustarte