Maestria Sistemas Vehiculares Sesion 7

37
Universidad del Azuay Maestría: Sistemas Vehiculares Módulo: Programación Noviembre 2013 1

Transcript of Maestria Sistemas Vehiculares Sesion 7

Page 1: Maestria Sistemas Vehiculares Sesion 7

Universidad del Azuay

Maestría: Sistemas Vehiculares Módulo: Programación

Noviembre 2013

1

Page 2: Maestria Sistemas Vehiculares Sesion 7

Bibliografía

2

Page 3: Maestria Sistemas Vehiculares Sesion 7

Sesión 7:

• Funciones lógicas y estructuras de control

• Operadores relacionales y lógicos

• Diagramas de flujo y seudocódigo

• Funciones lógicas

• Estructuras de selección

• Estructuras de repetición: bucles

• Problemas

3

Page 4: Maestria Sistemas Vehiculares Sesion 7

Funciones lógicas y estructuras de control

Por lo general, las secciones del código de los programas de cómputo se pueden categorizar en una de tres estructuras: secuencias, estructuras de selección y estructuras de repetición.

4

Page 5: Maestria Sistemas Vehiculares Sesion 7

Operadores relacionales y lógicos

Las estructuras de selección y repetición que se usan en MATLAB dependen de operadores relacionales y lógicos. Las comparaciones son verdaderas o falsas

5

Page 6: Maestria Sistemas Vehiculares Sesion 7

>>x=[1,2,3,4,5];

>>y=[-2,0,2,4,6];

>>x<y

>> ans = 0 0 0 0 1

>>z=[8,8,8,8,8];

“z es mayor que x y y para cada elemento”

>> z>x & z>y

>> ans= 1 1 1 1 1

“x es mayor que y o x es mayor que z”

>> x>y | x>z

>> ans = 1 1 1 0 0

6

Operadores relacionales y lógicos

Page 7: Maestria Sistemas Vehiculares Sesion 7

Con la adición de las estructuras de selección y las estructuras de repetición a su grupo de herramientas de programación se vuelve todavía más importante planear su programa antes de que comience a codificar. Dos enfoques comunes son: usar diagramas de flujo o usar seudocódigo.

Los diagramas de flujo son un enfoque gráfico para crear su plan de codificación, y el seudocódigo es una descripción verbal de su plan.

7

Diagramas de Flujo y Seudocódigo

Page 8: Maestria Sistemas Vehiculares Sesion 7

Suponga que se le pide crear un programar para convertir mph a pies/s. La salida debe ser una tabla completa con un título y encabezados de columna.

Los pasos que puede seguir:

•Definir un vector de valores mph.

•Convertir mph a pies/s.

•Combinar los vectores mph y pies/s en una matriz.

•Crear un título de tabla.

•Crear encabezados de columna.

•Desplegar la tabla.

8

Diagramas de Flujo y Seudocódigo

Page 9: Maestria Sistemas Vehiculares Sesion 7

Una vez que defina los pasos, póngalos en un archivo-m MATLAB como comentarios

9

Diagramas de Flujo y Seudocódigo

Page 10: Maestria Sistemas Vehiculares Sesion 7

10

Diagramas de Flujo y Seudocódigo

Page 11: Maestria Sistemas Vehiculares Sesion 7

MATLAB ofrece tanto estructuras de selección tradicionales por ejemplo la familia de funciones if como una serie de funciones lógicas que realizan en gran medida la misma tarea.

La función lógica principal es find, que con frecuencia se puede usar en lugar tanto de las estructuras de selección tradicionales como de los bucles

>>altura=[63,67,65,72,69,78,75]

>>aceptado= find(altura>=66);

>>aceptado= 2 4 5 6 7

>>altura(aceptado)

>> ans= 67 72 69 78 75

>>rechazado=find(altura<66)

>>rechazado= 1 3 11

Funciones Lógicas

Page 12: Maestria Sistemas Vehiculares Sesion 7

Ahora podemos utilizar disp y fprintf para sacar un reporte mas legible

>>disp(‘Los siguientes candidatos satisfacen el requisito de estatura’);

>>fprintf(‘Candidato # %4.0f mide %4.0f pulgadas de alto \n’, [aceptado;altura(aceptado)])

También se puede combinar varias condiciones para obtener un resultado.

Defina la matriz y encuentre los números índice de los elementos en la columna 1 que sean mayores que 66 y que en la columna 2 son también mayores que o iguales a 18 y menores que o iguales a 35.

>>aplica=[ 63, 18; 67, 19; 65, 18; 72, 20; 69, 36; 78, 34; 75, 12]

12

Funciones Lógicas

Page 13: Maestria Sistemas Vehiculares Sesion 7

>>aplica=[ 63, 18; 67, 19; 65, 18; 72, 20; 69, 36; 78, 34; 75, 12]

>>pasan= find(aplica(:,1)>=66 & aplica(:,2>=18 & aplica(:,2)<35)

>>pasan= 2 4 6

>> resultado= [pasan, aplica(pasan,1), aplica(pasan,2)]’;

>>fprintf(‘Solicitante # %4.0f mide %4.0f pulgadas de alto y %4.0f años de edad \n’, resultado)

Con lo visto hasta aquí, se regresa solo un numero índice, pero si definimos dos salidas

[fila, columna]= find(criterio_de_selección)

>> temp=[95.3, 100.2, 98.6; 97.4, 99.2, 98.9; 100.1, 99.3, 97] 13

Funciones Lógicas

Page 14: Maestria Sistemas Vehiculares Sesion 7

>> temp=[95.3, 100.2, 98.6; 97.4, 99.2, 98.9; 100.1, 99.3, 97]

>> elemento= find(temp>98.6)

>>[fila,columna]=find(temp>98.6)

>>fprintf(‘Paciente %3.1f en estacion%3.0f tuvo una temp de %6.1f \n, [fila, columna, temp(elemento)]’)

Además de find, MATLAB ofrece otras dos funciones lógicas: all y any. La función all verifica si una condición lógica es verdadera para todo miembro de un arreglo, y la función any verifica si una condición lógica es verdadera para algún miembro de un arreglo.

14

Funciones Lógicas

Page 15: Maestria Sistemas Vehiculares Sesion 7

Ejercicios de Práctica

15

Encuentre los valores en cada matriz que sean mayores que 10 y menores que 40. Use el comando length junto con los resultados del comando find para determinar cuántos valores en cada matriz están entre 0 y 10 o entre 70 y 80.

Page 16: Maestria Sistemas Vehiculares Sesion 7

La mayoría de las veces, el comando find puede y debe utilizarse en vez de un enunciado if. Sin embargo, hay situaciones en las cuales se requiere el enunciado if.

El if simple, tiene la siguiente estructura

16

Estructuras de selección

Este enunciado (desde if hasta end) es fácil de interpretar si G es un escalar. Si G es menor que 50, entonces se ejecutan los enunciados entre las líneas if y end. Por ejemplo, si G tiene un valor de 25, entonces count aumenta por 1 y G se despliega en la pantalla. Sin embargo, si G no es escalar, entonces el enunciado if considera la comparación verdadera ¡sólo si es verdadera para todo elemento!

Page 17: Maestria Sistemas Vehiculares Sesion 7

La estructura if else, El if le permite ejecutar una serie de enunciados si una condición es verdadera y la cláusula else le permite ejecutar un conjunto de enunciados si la comparación es falsa. La estructura if else trabaja con escalares

Puede usar esta función para alertar al usuario de un error. Por ejemplo, en la cláusula if/else, podría agregar un beep a la porción del código que incluye un enunciado de error

17

Estructuras de selección

Page 18: Maestria Sistemas Vehiculares Sesion 7

La función elseif le permite comprobar criterios múltiples mientras se mantiene el código fácil de leer. Considere las siguientes líneas de código que evalúan si se emite una licencia de conductor, con base en la edad del solicitante:

18

Estructuras de selección

Page 19: Maestria Sistemas Vehiculares Sesion 7

En general, las estructuras elseif funcionan bien para escalares, pero probablemente find es mejor opción para matrices. He aquí un ejemplo que usa find con un arreglo de edades y genera una tabla de resultados en cada categoría:

19

Estructuras de selección

Page 20: Maestria Sistemas Vehiculares Sesion 7

Cuando una parte se fabrica, las dimensiones usualmente se especifican con una tolerancia. Suponga que cierta parte necesita tener 5.4 cm de largo, más o menos 0.1 cm (5.4 con tolerancia de 0.1 cm). Escriba una función para determinar si una parte está dentro de dichas especificaciones.

20

Ejercicios de Práctica

Page 21: Maestria Sistemas Vehiculares Sesion 7

La estructura switch/case se usa con frecuencia cuando existe una serie de opciones de ruta de programación para una variable dada, dependiendo de su valor. Cualquier cosa que pueda hacer con switch/case se podría hacer con if/else/elseif. Sin embargo, el código es un poco más fácil de leer con switch/case. Los criterios pueden ser un escalar o una cadena. En la práctica se usa más con cadenas que con números. La estructura de switch/case es

21

Switch y Case

Page 22: Maestria Sistemas Vehiculares Sesion 7

Ejemplo: Suponga que quiere crear una función que diga al usuario cuál es la tarifa aérea a una de tres diferentes ciudades:

22

Switch y Case

Page 23: Maestria Sistemas Vehiculares Sesion 7

La función menu se usa con frecuencia en conjunto con una estructura switch/case. Esta función hace que aparezca un recuadro de menú en la pantalla, con una serie de botones definidos por el programador

23

Menu

Se puede usar la opción menú en el ejemplo de tarifa aérea anterior para asegurar que el usuario elija sólo ciudades de las que se tiene información. Esto también significa que no se necesita la sintaxis otherwise, pues no es posible elegir una ciudad que “no esté en archivo”.

Page 24: Maestria Sistemas Vehiculares Sesion 7

24

Menu Se puede usar la opción menú en el ejemplo de tarifa aérea anterior para asegurar que el usuario elija sólo ciudades de las que se tiene información.

Page 25: Maestria Sistemas Vehiculares Sesion 7

25

Ejercicios de Práctica

Cree un programa que conmine al usuario a ingresar su año en la escuela: primero, segundo, tercero o cuarto. La entrada será una cadena. Use la estructura switch/case para determinar qué día serán los finales para cada grupo: lunes para primero, martes para segundo, miércoles para tercero y jueves para cuarto

Page 26: Maestria Sistemas Vehiculares Sesion 7

26

Estructura de repetición Los bucles (loops) se usan cuando necesita repetir un conjunto de instrucciones muchas veces. MATLAB soporta dos tipos diferentes de bucles: el bucle for y el bucle while. Los bucles for son la opción más sencilla cuando usted sabe cuántas veces necesita repetir el bucle. Los bucles while son las opciones más sencillas cuando necesita mantener la repetición de las instrucciones hasta que se satisface un criterio. Si tiene experiencia de programación previa, puede estar tentado a usar bucles de manera extensa.

Page 27: Maestria Sistemas Vehiculares Sesion 7

27

Estructura de repetición Bucle for . La primera línea identifica el bucle y define un índice, que es un número que cambia en cada paso a través del bucle. Después de la línea de identificación viene el grupo de comandos que se quiere ejecutar. Finalmente, la terminación del bucle se identifica mediante el comando end.

Page 28: Maestria Sistemas Vehiculares Sesion 7

28

Estructura de repetición Otro uso común para un bucle for es combinarlo con un enunciado if y determinar cuántas veces algo es verdadero. Por ejemplo, en la lista de puntajes de examen que se muestra en la primera línea, ¿cuántos están por arriba de 90?

Page 29: Maestria Sistemas Vehiculares Sesion 7

29

Estructura de repetición La mayoría de las veces se crean bucles for que usan una matriz índice que es una sola fila. Sin embargo, si en la especificación de índice se define una matriz bidimensional, MATLAB usa toda una columna como el índice cada vez que pasa por el bucle

Page 30: Maestria Sistemas Vehiculares Sesion 7

30

Estructura de repetición El bucle for también se expresa como

Considere la siguiente matriz de valores: x = [45,23,17,34,85,33] ¿Cuántos valores son mayores que 30? (Use un contador.)

Page 31: Maestria Sistemas Vehiculares Sesion 7

31

Estructura de repetición Bucles while, son similares a los bucles for. La gran diferencia es la forma en que MATLAB decide cuántas veces repetir el bucle. Los bucles while continúan hasta que se satisface algún criterio. El formato para un bucle while es:

Un ejemplo del bucle while:

Page 32: Maestria Sistemas Vehiculares Sesion 7

32

Estructura de repetición Ejemplo: Dado un vector, encontrar cuantos elementos son mayores a 90.

Page 33: Maestria Sistemas Vehiculares Sesion 7

33

Estructura de repetición Break y continue, El comando break se puede usar para terminar un bucle prematuramente. El comando continue es similar a break; sin embargo, en lugar de terminar el bucle, el programa sólo salta al paso siguiente

Page 34: Maestria Sistemas Vehiculares Sesion 7

Resumen

34

Page 35: Maestria Sistemas Vehiculares Sesion 7

Resumen

35

Page 36: Maestria Sistemas Vehiculares Sesion 7

Problemas

Para realizarlos fuera de horario de clase

36

Page 37: Maestria Sistemas Vehiculares Sesion 7

Preguntas?

37