Está en la página 1de 11

ACTIVIDAD: PASOS 6

SOFTWARE PARA INGENIERÍA

LUIS FERNANDO VICTORIA VALENCIA


CÓDIGO: 6240843
LEIDY LAURA NORENA
GRUPO: 203036_8

TUTOR
PEDRO JAVIER FUENTES

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA


ESCUELA DE CIENCIAS BÁSICAS E INGENIERÍA
MARZO DE 2020
INTRODUCCIÓN

En el siguiente trabajo se encuentra el desarrollo de las actividades correspondientes a


paso 6, del curso de software para ingeniería de la universidad nacional abierta y a
distancia UNAD, la primera parte consiste en el planteamiento del flujo propuesto para
abordar el problema al que se le debe dar solución, el cual es: implementar un juego de
rompecabezas numérico. La segunda parte consiste en el desarrollo, que en si es el
desarrollo del código solución al problema planteado. Ambas partes ayudaran para la
familiarización y entendimiento de los temas que hacen parte de la tercera unidad; los
temas que se desarrollan son:, arreglos y manejo de gráficos, programación con
arreglos, tipos de gráficos, gráficos 2D y textos en gráficos todos estos desarrollados en
el software MATLAB.
Actividades a desarrollar
Actividades colaborativas:
 Leer el problema a resolver

Problema

Una empresa de juegos didácticos virtuales, quieren implementar un juego de


rompecabezas 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 entero consecutivos y le dé la posibilidad al usuario de:
 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 armado, el aplicativo debe:
 Indicar la cantidad de movimientos realizados
 Puntuación obtenida
El aplicativo, en su funcionamiento debe cumplir con las siguientes características:
 Permitir el movimiento de una celda a la vez.
 En los bordes de la matriz restringir los movimientos, es decir que de la última
columna no es posible desplazarse a la primera o viceversa, igual con las filas,
de la primera fila no es posible llegar a la última y viceversa.
 Mostar solo una matriz en pantalla, ir actualizándola a medida que se van
realizando los movimientos, para dar la sensación de desplazamiento de los
números.
 Cuando logre ordenar el rompecabezas informarle al usuario que lo terminó.
Ejemplo de movimientos realizados para armar el rompecabezas horizontalmente.
Suponiendo que el aplicativo genera la siguiente matriz, se muestra cada uno de los
cambios que se deben dar al interior de la matriz, para mostrársela al usuario, entre
cambio y cambio se debe borrar la matriz anterior y sobrescribir en pantalla la nueva.
Valor inicial: 1
Tipo de armado: Horizontal
Matriz generada:
5 1 4
2 6 8
7 3
Movimientos
5 1 4 5 1 4 5 1 4 1 4
2 6 2 6 2 6 5 2 6
7 3 8 7 3 8 7 3 8 7 3 8
1. Arriba 2. Derecha 3. Derecha 4. Arriba
1 4 1 2 3 1 2 3
5 2 6 5 6 5 6

7 3 8 4 7 8 4 7 8
5. Derecha 30. Arriba 31. Izquierda
1 2 3 1 2 3 1 2 3 1 2 3
5 6 4 5 6 4 5 6 4 5 6
4 7 8 7 8 7 8 7 8
32. Izquierda 33. Abajo 34. Derecha 35. Derecha
 Retomar los algoritmos propuestos en el paso anterior y seleccionar el que van a
emplear para la codificación.
 Con base en el algoritmo seleccionado, desarrollar el código fuente en Matlab o
Scilab, que dé solución al problema planteado en el curso, para realizarlo
retome: La propuesta metodológica planteada por ustedes en los pasos anteriores
y la información recopilada

clc; clear all;

validinput = false;

rompe = randperm(9,9);

%Devuelve un vector de fila que contiene 9 enteros únicos seleccionados al azar de 1 a


9.

rompe = reshape(rompe,[3,3]);

%%% reshape(rompe,[3,3]) reconfigura la matriz rompecabezas en una matriz de 3 por


3.

espacio = (rompe ==9) ;


rompe(espacio) = 0;

%%% se reemplaza el nueve por 0 que representa el espacio vacío.

temporal = [(1:9)];
temporal = reshape(temporal.', 3,3).';
espacio = (temporal ==3) ;
temporal(espacio) = 0;
display(rompe);

%%% se evalúa si la matriz rompe es igual a la matriz temporal y repite la ejecución de


de las declaraciones.

while ~isequal(rompe,temporal)
while validinput == false

%%% se pregunta al usuario si desea seguir jugando.

no=0;
si=1;
s = input('desea seguir jugando, por favor escriba si o no: ');
if s==no;
exit

elseif s ~= si | no;
fprintf('entrada invalidad.');

else s == si;

%%% se le permite al usuario a través de los casos seleccionar la opción de


movimiento.

fprintf('como quiere hacer el movimiento: \n 1. vertical \n 2. horizontal \n ');


movimiento=input('opcion=');

switch movimiento;
case 1

%%% se identifica la posición del valor ingresado. Se usa la posición para intercambiar
el valor con 0.

m = input('que movimiento desea hacer? ');


[m_a , m_b] = find(rompe == m);
[n_a , n_b] = find(~rompe);

%%%Se validad las entradas

validinput1 = [n_a + 1 , n_b];


validinput2 = [n_a - 1 , n_b];
validinput3 = [n_a , n_b + 1];
validinput4 = [n_a , n_b - 1];

case 2

m = input('que movimiento desea hacer? ');


[m_a , m_b] = find(rompe == m);
[n_a , n_b] = find(~rompe);

%%%Se validad las entradas

validinput1 = [n_a , n_b + 1];


validinput2 = [n_a , n_b - 1];
validinput3 = [n_a + 1 , n_b];
validinput4 = [n_a - 1 , n_b];

end

% se evalúa si el movimiento realizado es valido.

if [m_a , m_b] == validinput1 | [m_a, m_b] == validinput2 | [m_a, m_b] ==


validinput3 & [m_a, m_b] == validinput4
validinput = true;
else
fprintf('movimiento invalido, intente de nuevo.');
end
end

end
[m_a , m_b] = find(rompe == m);
[n_a , n_b] = find(~rompe);

%%% se va reemplazando la matriz generada en cada movimiento.

siguiente = rompe;
siguiente(m_a,m_b) = rompe(n_a,n_b);
siguiente(n_a,n_b) = rompe(m_a,m_b);
rompe = siguiente;
display(rompe);
validinput = false;

%%%% se evalúa si ya se completo el juego comparando la matriz con el orden


correcto con la matriz del juego.

matrizcompleta=[ 1 2 3; 4 5 6; 7 8 0];

if rompe == matrizcompleta;

fprintf('felicitaciones a completado el juego.');

end

end
CONCLUSIONES

randperm(9,9); devuelve un vector de fila que contiene 9 enteros únicos seleccionados


al azar de 1 a 9 .
reshape(rompe,[3,3]); reconfigura la matriz rompecabezas en una matriz de 3 por 3.
While: evalúa una expresión y repite la ejecución de un grupo de declaraciones en un
bucle mientras la expresión es verdadera
Switch: evalúa una expresión y elige ejecutar uno de varios grupos de declaraciones.
Cada elección es un caso.
Input: muestra el texto en pantalla y espera a que el usuario ingrese un valor y presione
la tecla Enter.
Fprintf: Imprima múltiples valores numéricos y texto literal en la pantalla.
BIBLIOGRAFÍA

MathWorks. (2009). TheMathworks. Recuperado de

http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf

Hahn, B. D., & Valentine, D. T. (2013). Essential MATLAB for Engineers and
Scientists (Vol. Fifth edition). Waltham, MA: Academic Press. Capítulo 6. Pág. 129-
160. Recuperado de

http://bibliotecavirtual.unad.edu.co/login?url=http://search.ebscohost.com/login.aspx?di
rect=true&db=nlebk&AN=485981&lang=es&site=eds-live

Gil, R. M. (2003). Introducción rápida a Matlab y Simulink para ciencia e ingeniería.


Madrid, ES: Ediciones Díaz de Santos. Capítulo 4. pág. 41-50. Recuperado de

http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?ppg=1&docID=1105
9428&tm=1479848795401

También podría gustarte