Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Paso 6 Construcción Colaborativa 203036 97
Paso 6 Construcción Colaborativa 203036 97
PRESENTADO POR:
GRUPO: 203036_97
NOVIEMBRE - 2019
FASE - 6 2
CONTENIDO
INTRODUCCIÓN......................................................................................................................3
OBJETIVOS...............................................................................................................................4
General:...................................................................................................................................4
Específicos:.............................................................................................................................4
PROBLEMA...............................................................................................................................5
CONCLUSIONES....................................................................................................................26
BIBLIOGRAFIA......................................................................................................................27
FASE - 6 3
INTRODUCCIÓN
En este trabajo colaborativo elegiremos un algoritmo de los presentados para desarrollar el paso
6.
En este caso elegimos el algoritmo de nuestro compañero Oscar el cual se caracteriza por tener
Lo que nos permite hacer un código más desarrollado y que llegue a la solución del problema
planteado.
Para el desarrollo del código utilizamos Scilab o Matlab ya que sus funciones nos permiten
operar matrices, números aleatorios, vectores y esto es lo que necesitamos para el desarrollo del
Este programa, maneja varias funciones que aplicaremos el código como bucles, funciones y
además que permita cumplir con todas las condiciones necesarias para el desarrollo del
problema.
En conclusión, este trabajo está diseñado para dar solución al problema planteado y así
OBJETIVOS
General:
Específicos:
PROBLEMA
numérico, junto con sus respectivas reglas de puntuación, para ello es necesario diseñar un
aplicativo que genere una matriz de números aleatorio de 3x3 donde se almacenen 8 números
Establecer el primer número de los ocho posibles a almacenar, (los demás serán
consecutivos).
El usuario debe poder determinar cómo mover la casilla vacía, indicando si el
movimiento lo hace hacia arriba ó abajo, derecha ó izquierda.
Tener la opción de no continuar con el armado del rompecabezas.
Decidir si el armado lo dese hacer horizontal o vertical.
Leer las reglas de la puntuación con la que se valorará su desarrollo.
Una vez el usuario termine de ordenar el rompecabezas o haya decidido no continuar con el
//Primero mostraremos una pantalla con las reglas del juego, y puntuación
Inicio()
function inicio(){
$ir =0
While $ir =0
1. Jugar\n
2. Instrucciones del juego\n’)
$opc = INPUT (‘’)
switch $opc
case 1
jugar()
$ir =1
case 2
Instrucciones()
$ir =1
default
$ir=0
}
FASE - 6 7
function Instrucciones(){
Printf(‘
$ir=0
While $ir =0
SWITCH
case 1
jugar()
$ir =1
case 2
Inicio()
$ir =1
default
$ir=0
end
}
FASE - 6 8
function jugar(){
Printf(‘ROMPECOCOS’)
INPUT $PRIMERO
INPUT $orden
$FINAL = $PRIMERO+8
$puntaje= 10000
vec=grand(1,'prm',($PRIMERO:$FINAL)’)
matRompe=matrix(vec,3,3)
If $orden==2
MatRompe=( MatRompe’)
/*Convertir los elementos de la matriz en texto para poder reemplazar el último número
por una X*/
MatRompe = string(MatRompe)
//ordenar el vector inicial en orden para verificar que la matriz esté ordenada cuando
avance el juego
ordenado=gsort(vec,g,i)
FASE - 6 9
$blanca=ordenado(9)
For i=1:3
For j=1:3
If matRompe(i,j)==$FINAL then
matRompe(i,j)=$blanca
end
end
//convierto en texto los elementos del vector ordenado y reemplazo por una X el valor
ordenado=string(ordenado)
ordenado(9)= $blanca
matOrdenada=(ordenado,3,3)
Disp(matRompe)
$CONTADOR=0
FASE - 6 10
For i=1:3
For j=1:3
If matRompe(i,j)==’X’ then
posXi=i
posXj=j
end
end
matOrden= matOr
matRom=matriz;
switch posXi
case 1
aba=1
case 2
aba=1
arr=1
case 3
arr=1
FASE - 6 11
switch posXj
case 1
der=1
case 2
izq=1
der=1
case 3
izq=1
Print “Ingrese un número para mover X: \n IZQ (1) DER (2) ARRIBA (3) ABAJO
OPC=INPUT(‘’)
$orden=0
while $orden==0
switch OPC
case 1
If izq==1
$orden=1
Else
printf(‘$error’)
FASE - 6 12
case 2
If der==1
$orden=1
Else
printf(‘$error’)
case 3
If arr==1
$orden=1
Else
printf(‘$error’)
case 4
If aba==1
$orden=1
Else
printf(‘$error’)
FASE - 6 13
case 5
salir()
default
printf(‘$error’)
matRompe=matriz
matOrdenada=matOr
i = posXi
j= posXj
$blanco= matRompe(i,j)
$nvaPosicion= matRompe(i-1,j)
//borrar pantalla
clc;
matRompe(i,j)= $nvaPosicion
matRompe(i-1,j)= $blanco
disp(matRompe)
$CONTADOR++
matOrdenada=matOr
matRompe=matriz
i = posXi
j= posXj
$blanco= matRompe(i,j)
$nvaPosicion= matRompe(i+1,j)
//borrar pantalla
clc;
matRompe(i,j)= $nvaPosicion
matRompe(i+1,j)= $blanco
disp(matRompe)
$CONTADOR++
matRompe=matriz
matOrdenada=matOr
i = posXi
j= posXj
$blanco= matRompe(i,j)
$nvaPosicion= matRompe(i,j-1)
FASE - 6 15
//borrar pantalla
clc;
matRompe(i,j)= $nvaPosicion
matRompe(i,j-1)= $blanco
disp(matRompe)
$CONTADOR++
matRompe=matriz
matOrdenada=matOr
i = posXi
j= posXj
$blanco= matRompe(i,j)
$nvaPosicion= matRompe(i,j+1)
//borrar pantalla
clc;
matRompe(i,j)= $nvaPosicion
matRompe(i,j+1)= $blanco
disp(matRompe)
$CONTADOR++
Function Verificar(matriz,i,j,matrO){
IF $puntaje<= 0
IF OPC==1 then
Inicio()
IF opc==2
SALIR()
Función SALIR
Inicio()
FASE - 6 17
CONCLUSIONES
BIBLIOGRAFIA
Hahn, B. D., & Valentine, D. T. (2013). Essential MATLAB for Engineers and Scientists
(Vol. Fifth edition). Waltham, MA: Academic Press. Capítulo 5. Pág. 111-129.
Recuperado de http://bibliotecavirtual.unad.edu.co/login?
url=http://search.ebscohost.com/login.aspx?
direct=true&db=nlebk&AN=485981&lang=es&site=eds-live
Otros recursos:
Manual Scilab
Comando help + función que queremos utilizar
OVA
Matrices ing. Stephen Guseph Pinto Morato para el manejo de matrices en Scilab
https://www.youtube.com/watch?v=ma6ia3iaenc
clc;
clear
contador=0
puntaje=12000
function jugar()
printf('\n****** ROMPECOCOS ****** \n\n')
contador=0
puntaje=12000
primero = input ('Ingresa un número: ')
printf (' ¿Cómo deseas organizar el rompecabezas?:\n 1- HORIZONTAL \n 2- VERTICAL\n' )
orden=input('')
FASE - 6 33
final= primero+8
//creo un vector con 9 números aleatorios que NO SE REPITAN. El número 9 será el espacio “X” que asignaremos más
adelante
vec=grand(1,'prm',(primero:final))
//ordenar el vector inicial en orden para verificar que la matriz esté ordenada cuando avance el juego
ordenado=gsort(vec,'g','i')
//Busco la posición en el vector que coincida con el último número de la// serie y reemplazo por un carácter especial,
//así tendremos la matriz para iniciar el juego
casilla=string(final)
//disp(casilla)
vec = string(vec)
for i=1:9
if vec(i)==casilla then
vec(i)='☻';
end
end
matRompe=matrix(vec,3,3)
clc;
disp(matRompe)
endfunction
switch posXj
case 1
der=1
case 2
izq=1
der=1
case 3
izq=1
end
orden=0
while orden==0
printf ('Ingresa un número para mover ☻: \n IZQ (1) DER (2) ARRIBA (3) ABAJO (4) SALIR (5) \n')
opc=input('')
//Mientras el movimiento no sea válido o el número ingresado este mal
switch opc
case 1
if izq==1 then
MoverIZQ(matRom , posXi, posXj, matOrden)
orden=1
else
error1= 'No puedes mover hacia la izquierda'
printf(error1)
orden=0
end
case 2
if der==1 then
MoverDER(matRom ,posXi, posXj, matOrden)
orden=1
else
error2= 'No puedes mover hacia la derecha'
printf(error2)
orden=0
end
case 3
if arr==1 then
MoverARR(matRom ,posXi, posXj, matOrden)
orden=1
FASE - 6 35
else
error3= 'No puedes mover hacia arriba'
printf(error3)
orden=0
end
case 4
if aba==1 then
MoverABA(matRom ,posXi, posXj, matOrden)
orden=1
else
error4= 'No puedes mover hacia abajo'
printf(error4)
orden=0
end
case 5
salir()
otherwise
error5= 'Ingresa un numero válido'
printf(error5)
orden=0
end
end
endfunction
printf('Mover Izquierda')
matRompe=matriz
matOrdenada=matOr
i = posXi
j= posXj
blanco= '☻'
nvaPosicion= matRompe(i,j-1)
//borrar pantalla
clc;
matRompe(i,j)= nvaPosicion
matRompe(i,j-1)= blanco
disp(matRompe);
contador =contador+1
puntaje = puntaje - 200
verificar(matRompe,i,j-1, matOrdenada, puntaje)
endfunction
endfunction
endfunction
matRompe=matriz
matOrdenada=matOr
i = posXi
j= posXj
blanco= '☻'
nvaPosicion= matRompe(i+1,j)
//borrar pantalla
clc;
matRompe(i,j)= nvaPosicion
matRompe(i+1,j)= blanco
disp(matRompe);
contador =contador+1
puntaje = puntaje - 200
end
endfunction
function preguntar()
opc =input('Ingresa 1 para volver a jugar,2 para salir del juego' )
if opc==1
inicio()
end
if opc==2
salir()
end
endfunction
function instrucciones()
clc;
printf('INSTRUCCIONES DEL JUEGO:\n')
printf('1. Objetivo del juego: Armar los números del rompecabezas en orden consecutivo en la menor cantidad de
jugadas posible.\n 2. El jugador escoge el número inicial y decide armar el rompecabezas ya sea de forma vertical u
horizontal.\n 3. La casilla vacía se puede mover hacia arriba digitando “8”, abajo con el 2 , izquierda con el 4 o derecha
con el 6 para organizar los números.\n 4. El jugador comenzará el juego con 10.000 puntos cada vez que haga una
movida perderá 200 puntos. Si hace más de 50 movidas perderá el juego. \n 5. Al armar el rompecabezas recibirá el
puntaje obtenido y la cantidad de movimientos realizados')
ir=0
while ir ==0 then
jugar=input('Para jugar Ingrese 1 \n Para salir ingrese 2')
switch jugar
case 1
jugar()
ir =1
case 2
inicio()
ir =1
otherwise
ir=0
end
end
endfunction
function salir()
printf('Juego Terminado')
inicio()
endfunction
function inicio()
clc;
ir =0
while ir ==0 then
printf('************************')
printf('****** ROMPECOCOS ******\n\4n')
printf('Selecciona una opción:\n1. Jugar\n 2.Instrucciones del juego\')
opc = input('')
switch opc
case 1
FASE - 6 38
jugar()
ir =1
case 2
instrucciones()
ir =1
otherwise
ir=0
end
end
endfunction
inicio()