You are on page 1of 17

SOFTWARE PARA INGENIERÍA

GRUPO
203036_86

PASO 3 - DIAGNÓSTICO DE NECESIDADES DE APRENDIZAJE

TUTOR:
JUAN MONROY

REALIZADO POR:
JOSÉ GUSTAVO DUCÓN PÉREZ 1052020929

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD


ESCUELA DE CIENCIAS BÁSICAS, TECNOLOGÍA E INGENIERÍA
ABRIL 2019
INTRODUCCÓN

Para el desarrollo de la actividad 5 El estudiante emplea herramientas de tratamiento


matemático, en la solución o representación matemática a problemas dentro del campo de
la ingeniería.

Como primer paso se plantearon ideas que solucionaran el problema que se presenta en la
guía el cual nos dice que, en una empresa de publicidad, se requiere implementar un
programa que permita al diseñador bosquejar dos imágenes a visualizar en una matriz de
leds a instalar al lado de un semáforo, la idea es mostrar una imagen que le indique al
peatón cuando caminar y otra para cuando parar.

Dentro de las ideas se plantearon varias formas para la solución del problema ya
mencionado las cuales se van a mostrar en el desarrollo de este trabajo, pero finalmente se
decidió por la que más se adaptaba al problema.
OBJETIVO GENERAL:
Desarrollar las actividades propuestas en la guía de diagnóstico de necesidades de
aprendizaje para el correcto desarrollo del curso tanto en tiempos como en conocimientos
previos.

OBJETIVOS ESPECIFICOS:
- Lectura e interpretación del problema a desarrollar a lo largo del curso con las
herramientas ofimáticas suministradas.

- Desarrollo de tabla de con pre saberes para poder ver en qué estado estamos para el
desarrollo del curso y los inconvenientes de tiempo que se puedan presentar a lo
largo de este.
Problema

En una empresa de publicidad, se requiere implementar un programa que permita al


diseñador bosquejar dos imágenes a visualizar en una matriz de leds a instalar al lado de un
semáforo, la idea es mostrar una imagen que le indique al peatón cuando caminar y otra para
cuando parar; para ello el aplicativo que diseñe debe permitir:

• Digitar el orden de la matriz (no inferior a 8x8)


• El programa debe permitir que el usuario establezca que leds encenderán para formar
la imagen a partir del ingreso de un 1 lógico en las casillas que determine, para cada
imagen
• Mostrar la matriz diseñada con la imagen a mostrar para caminar y parar.
• Simular con un temporizador, la visualización alterna de cada matriz, el usuario
determina dicho tiempo.

Mostrar una matriz que contenga la coincidencia de led encendido para la imagen de
caminar y parar.

Actividades a desarrollar

Individual

PARA CONTINUAR LA CONSTRUCCIÓN DE LA SOLUCIÓN DEL PROBLEMA


PLANTEADO EN EL CURSO

• Releer el problema a resolver


• Recopile información concreta que le permita construir la solución del problema
(teorías, conceptos, manuales, videos, ejercicios resueltos, entre otros), resúmala y
digítela en un procesador de texto con sus respectivas referencias con normas APA
• Elaborar un algoritmo (diagrama de flujo o pseudocódigo) que represente la solución
de problema planteado en el curso
Acerca de las matrices

En el entorno de MATLAB, una matriz es un arreglo de números rectangular. A veces se


atribuye un significado especial a las matrices de 1 por 1 (escalares) y a las matrices con
solo una fila o columna (vectores). MATLAB tiene otras formas de almacenar datos
numéricos y no numéricos, pero, al principio, lo mejor es pensar en todo como una matriz.
Las operaciones de MATLAB están diseñadas para realizarse de la manera más natural
posible. Mientras que otros lenguajes de programación procesan los números uno por uno,
MATLAB le permite trabajar con matrices completas de forma rápida y fácil. Un buen
ejemplo de matriz, que se utiliza a lo largo de todo este libro, se observa en el grabado
renacentista Melancolía I del artista y matemático amateur alemán Alberto Durero.

Cómo ingresar matrices

La mejor forma de comenzar a trabajar con MATLAB es aprendiendo a manejar matrices.


Inicie MATLAB y siga cada ejemplo.

En MATLAB, se pueden ingresar matrices de varias formas diferentes:

• Ingresando una lista de elementos explícita.

• Cargando matrices desde archivos de datos externos.

• Generando matrices mediante funciones integradas.

• Creando matrices con sus propias funciones y guardándolas en archivos.

Comience por ingresar la matriz de Durero como una lista de sus elementos. Solo tiene que
seguir algunas convenciones básicas:

• Separe los elementos de una fila con espacios en blanco o comas.

• Use punto y coma, ; , para indicar el final de cada fila.

• Encierre la lista completa de elementos entre corchetes, [ ].

Para ingresar la matriz de Durero, solo escriba en la ventana de comandos:

A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]


MATLAB muestra la matriz que acaba de ingresar:

A=

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

Control condicional: if, else, switch


Las instrucciones condicionales permiten seleccionar en tiempo de ejecución qué bloque de
código se va a ejecutar. La instrucción condicional más simple es una instrucción if. Por
ejemplo, este programa genera un número entero al azar, y si es par lo divide por 2:
% Generate a random number
a = randi(100, 1);

% If it is even, divide by 2
if rem(a, 2) == 0
disp('a is even')
b = a/2;
end
Las instrucciones if pueden incluir opciones alternativas mediante el uso de las palabras
clave opcionales elseif o else. Por ejemplo:
a = randi(100, 1);

if a < 30
disp('small')
elseif a < 80
disp('medium')
else
disp('large')
end
Alternativamente, cuando desee probar la igualdad frente a un conjunto de valores
conocidos, use una instrucción switch. Por ejemplo:
[dayNum, dayString] = weekday(date, 'long', 'en_US');

switch dayString
case 'Monday'
disp('Start of the work week')
case 'Tuesday'
disp('Day 2')
case 'Wednesday'
disp('Day 3')
case 'Thursday'
disp('Day 4')
case 'Friday'
disp('Last day of the work week')
otherwise
disp('Weekend!')
end
Tanto para if como para switch, MATLAB® ejecuta el código que corresponde a la primera
condición verdadera y luego sale del bloque de código. Cada instrucción condicional
requiere la palabra clave end.
En general, cuando los valores posibles tienen muchas opciones discretas y conocidas, las
instrucciones switch son más fáciles de leer que las instrucciones if. Sin embargo, no es
posible buscar desigualdades entre valores de switch y case. Por ejemplo, este tipo de
condición no se puede implementar con un switch:
yourNumber = input('Enter a number: ');

if yourNumber < 0
disp('Negative')
elseif yourNumber > 0
disp('Positive')
else
disp('Zero')
end
Comparaciones de arreglos en instrucciones condicionales
Es importante comprender cómo funcionan los operadores relacionales y las
instrucciones if con las matrices. Cuando desee comprobar la igualdad entre dos variables,
podría usar la siguiente condición:
if A == B, ...
Este es un código válido de MATLAB, y actúa según lo esperado cuando A y B son
escalares. Pero cuando A y B son matrices, A == B no prueba si son iguales,
sino dónde son iguales. El resultado es otra matriz de ceros y unos que muestra la igualdad
elemento por elemento.
A = magic(4); B = A; B(1,1) = 0;

A == B
ans =
0 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
La forma adecuada de comprobar la igualdad entre dos variables es usando la
función isequal:
if isequal(A, B), ...
isequal devuelve un valor escalar lógico de 1 (que representa la variable true) o 0 (false),
en lugar de una matriz, como la expresión a evaluar por la función if. Si se utilizan las
matrices A y B anteriores, se obtiene:
isequal(A, B)
ans =
0
El siguiente ejemplo ayuda a enfatizar este punto. Si A y B son escalares, el siguiente
programa nunca alcanzará la “situación inesperada” del final. Sin embargo, para la mayoría
de los pares de matrices, incluyendo nuestros cuadrados mágicos con columnas
intercambiadas, ninguna de las condiciones A > B, A < B o A == B resulta válida
para todos los elementos de las matrices. Por lo tanto, se ejecuta la cláusula else:
if A > B
'greater'
elseif A < B
'less'
elseif A == B
'equal'
else
error('Unexpected situation')
end
Hay varias funciones que ayudan a convertir comparaciones de matrices en condiciones
escalares utilizables con if, incluyendo:
isequal
isempty
all
any
Control de bucle: for, while, continue, break
Esta sección trata las funciones de MATLAB que proporcionan control sobre bucles de
programas.
for
El bucle for repite un grupo de instrucciones una cantidad de veces fija y predeterminada.
Un end correspondiente delimita las instrucciones:
for n = 3:32
r(n) = rank(magic(n));
end
r
El punto y coma que finaliza la instrucción interna suprime la impresión repetida, y la r que
aparece después del bucle muestra el resultado final.
Es recomendable sangrar los bucles para mejorar su legibilidad, en especial cuando están
anidados:
for i = 1:m
for j = 1:n
H(i,j) = 1/(i+j);
end
end
while
El bucle while repite un grupo de instrucciones una cantidad indefinida de veces bajo
control de una condición lógica. Un end correspondiente delimita las instrucciones.
El siguiente es un programa completo, que ilustra el uso de while, if, else y end, y utiliza la
bisección de intervalos para buscar un cero de un polinomio:
a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
x = (a+b)/2;
fx = x^3-2*x-5;
if sign(fx) == sign(fa)
a = x; fa = fx;
else
b = x; fb = fx;
end
end
x
El resultado es una raíz del polinomio x3 – 2x – 5, es decir:
x=
2.09455148154233
Las precauciones asociadas a las comparaciones de matrices que se analizan en la sección
de la instrucción if también se aplican a la instrucción while.
continue
La instrucción continue traslada el control a la siguiente iteración del bucle for o del
bucle while en el cual aparece, y omite cualquier instrucción restante en el cuerpo del
bucle. Lo mismo ocurre para las instrucciones continue dentro de bucles anidados. Es decir,
la ejecución continúa al comienzo del bucle en el cual se encontró la instrucción continue.
El siguiente ejemplo muestra un bucle continue que cuenta las líneas de código del
archivo magic.m y omite todos los comentarios y líneas en blanco. La
instrucción continue se utiliza para avanzar a la siguiente línea de magic.m, sin incrementar
la cuenta cuando se encuentra un comentario o una línea en blanco.
fid = fopen('magic.m','r');
count = 0;
while ~feof(fid)
line = fgetl(fid);
if isempty(line) || strncmp(line,'%',1) || ~ischar(line)
continue
end
count = count + 1;
end
fprintf('%d lines\n',count);
fclose(fid);
break
La instrucción break le permite salir temprano de un bucle for o un bucle while. En bucles
anidados, break sale solo del bucle más interno.
La siguiente alternativa mejora el ejemplo ofrecido en la sección anterior. ¿Por qué es
recomendable este uso de break?
a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
x = (a+b)/2;
fx = x^3-2*x-5;
if fx == 0
break
elseif sign(fx) == sign(fa)
a = x; fa = fx;
else
b = x; fb = fx;
end
end
x
Finalización del programa: return
Esta sección trata la función return de MATLAB, la cual permite terminar el programa
antes de que este complete su ciclo.
return
La función return finaliza la secuencia actual de comandos y devuelve el control a la
función invocadora o al teclado. return también se utiliza para terminar el
modo keyboard(teclado). Normalmente, una función llamada transfiere el control a la
función que la invocó cuando llega al final de la función. Es posible insertar una
instrucción return dentro de la función llamada para forzar una finalización temprana y
transferir el control a la función invocadora.
Vectorización
Una forma de lograr que los programas de MATLAB funcionen más rápidamente es
vectorizando los algoritmos usados para la construcción de los programas. Donde otros
lenguajes de programación usarían bucles for o bucles DO, MATLAB puede utilizar
operaciones con vectores o matrices. Un ejemplo simple involucra la creación de una tabla
de logaritmos:
x = .01;
for k = 1:1001
y(k) = log10(x);
x = x + .01;
end
Una versión vectorizada del mismo código es
x = .01:.01:10;
y = log10(x);
Para códigos más complicados, las opciones de vectorización no siempre son tan obvias.
Preasignación
Si no puede vectorizar una parte de un código, puede hacer que sus bucles for funcionen
más rápido mediante la preasignación de los vectores o arreglos que contienen los
resultados de salida. Por ejemplo, este código utiliza la función zeros para preasignar el
vector creado en el bucle for. Con esto, el bucle for se ejecuta significativamente más
rápido:
r = zeros(32,1);
for n = 1:32
r(n) = rank(magic(n));
end
Sin la preasignación del ejemplo anterior, el intérprete de MATLAB amplía el vector r,
añadiéndole un elemento cada vez que ejecuta el código del bucle La preasignación de
vectores elimina este paso, lo cual resulta en una ejecución más rápida.
Algoritmo semáforo.

Semaforo con segundero - Arduino


/*PROGRAMA EN EL CUAL UN DISPLAY DE 7 SEGMENTOS
CUENTA LOS SEGUNDOS CUANDO UN SEMAFORO ESTA EN VERDE
Y EN ROJO*/

/*DISPLAY*/
int matriz[11][7]={
{
1,1,1,1,1,1,0 }//numero 0
,
{
0,1,1,0,0,0,0 }//1
,
{
1,1,0,1,1,0,1 }//2
,
{
1,1,1,1,0,0,1 }//3
,
{
0,1,1,0,0,1,1 }//4
,
{
1,0,1,1,0,1,1 }//5
,
{
1,0,1,1,1,1,1 }//6
,
{
1,1,1,0,0,0,0 }//7
,
{
1,1,1,1,1,1,1 }//8
,
{
1,1,1,1,0,1,1 }//9
};

/*SEMAFORO*/
int rojo=10; //pin al que vamos a conectar el led rojo
int amarillo=11; //pin al que vamos a conectar el led amarillo
int verde=12; //pin al que vamos a conectar el led verde

void setup()
{
/*---------------DISPLAY-----------------*/
for(int i=2; i<9; i++)//desde entrada 2 a la 9
{
pinMode(i, OUTPUT);//declarar como salida
}
/*---------------SEMAFORO-------------------*/
pinMode(rojo,OUTPUT); //declaramos pin rojo como salida
pinMode(amarillo,OUTPUT);//declaramos el pin amarillo como salida
pinMode(verde,OUTPUT); //declaramos el pin verde como salida
}

void loop() //bucle


{
/*--------------SEMAFORO-------------------*/
digitalWrite(rojo,HIGH); //encendemos el led rojo
delay(0); //esperamos 0 segundos

/*----------DISPLAY-----*/
for(int num=5; num>=0; num--)
{
for(int i=0; i<7; i++)
{
if(matriz[num][i]==1)
digitalWrite(i+2, HIGH);
else
digitalWrite(i+2, LOW);
}
delay(1000);
}
/*------------------------*/
digitalWrite(rojo,LOW); //apagamos el led rojo
delay(0); //no hay espera

/*--------------------SEMAFORO-----------------*/
digitalWrite(verde,HIGH); //encendemos el led verde
delay(0); //esperamos 0 segundos
/*----------DISPLAY------------*/
for(int num=5; num>=0; num--)
{
for(int i=0; i<7; i++)
{
if(matriz[num][i]==1)
digitalWrite(i+2, HIGH);
else
digitalWrite(i+2, LOW);
}
delay(1000);
}
/*-------------------------------*/
digitalWrite(verde,LOW); //apagamos el led verde
delay(0); //no hay espera

/*----------SEMAFORO--------------*/
digitalWrite(amarillo,HIGH); //encendemos el led amarillo
delay(1500); //esperamos segundo y medio
digitalWrite(amarillo,LOW); //apagamos el led amarillo
delay(0); //esperamos medio segundo
}
CONCLUSIÓN

Para el desarrollo de esta actividad debemos investigar más sobre la programación en


Matlab como funciones y herramientas que faciliten la manera de programar, por otra parte,
debemos crear mejor comunicación en el grupo de trabajo ya sea distribuyéndonos el
trabajo y repartiéndonos rolos importantes para así poder darle solución al problema
planteado en la guía.

Se realiza la lectura e interpretación del problema a desarrollar a lo largo del curso con las
herramientas ofimáticas suministradas.

Se desarrolla la tabla de con pre saberes para poder ver en qué estado estamos para el
desarrollo del curso y los inconvenientes de tiempo que se puedan presentar a lo largo de
este.
BIBLIOGRAFIA
• https://la.mathworks.com/help/matlab/learn_matlab/flow-control.html
• https://tutorias.co/poo-matlab-clase-semaforo/
• https://la.mathworks.com/help/matlab/learn_matlab/matrices-and-magic-squares.html
• https://www.lawebdelprogramador.com/foros/Matlab/1674353-Animacion-de-un-
semaforo.html

• Monroy, J. (2014). PLE Matlab-Scilab. Recuperado


de http://www.netvibes.com/juanolmv#Donde_Buscar_Informacion
• Scilab for very beginners. (2013). Capítulos 1-3. pág. 1-18. Recuperado
de https://www.scilab.org/tutorials/scilab-beginners-%E2%80%93-tutorial
• Scott Hudson (2014). Scilab Lectures. Pág. 1-9. Recuperado
de http://users.tricity.wsu.edu/~hudson/Teaching/EE221/Text/03%20Programming%20
structures.pdf
• 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 1. pág. 1-21. Capítulo 3. pág. 35-37
Recuperado
de http://bibliotecavirtual.unad.edu.co:2077/lib/unadsp/reader.action?ppg=1&docID=11
059428&tm=1479848795401