Download UNIVERSIDAD TECNOLÓGICA DE PEREIRA FACULTAD DE
Document related concepts
no text concepts found
Transcript
1 UNIVERSIDAD TECNOLÓGICA DE PEREIRA FACULTAD DE TECNOLOGÍA PROGRAMA DE TECNOLOGÍA ELÉCTRICA Asignatura: PROGRAMACIÓN Tema: ESTRUCTURAS DE PROGRAMACIÓN EN MATLAB Profesor: Jose Norbey S. F. Estructura de decisión si sino (if then else) La estructura de decisión si sino (if then else), se utiliza cuando el programador desea especificar dos o más caminos alternativos en un algoritmo. Se evalúa una condición que es evaluada y en función del resultado de esta condición (falso o verdadero), se bifurcará a un determinado punto para continuar con la ejecución del programa. Clasificación: Decisión o alternativa simple. Ver figura 1. si (condición) acción fin Decisión o alternativa doble. Ver figura 2. si (condición) acción 1 sino acción 2 fin 2 Ejercicio 1: calcular el logaritmo natural de un número clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('calcular el logaritmo natural de un número: ') x=input('ingrese un número: ' ) if x>0 logaritmo_natural=log(x) else disp('La entrada a la función log debe ser positiva') end Decisión o alternativa múltiple (es una combinación de ambas). Ver figura 3. si (condición) acción 1 si (condición) acción 2 sino acción 3 fin Ejercicio 2: Crear un programa en el que se introduzcan dos números por el teclado y que nos diga cuál es el mayor. clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('introduzcan dos números por el teclado y que nos diga cuál es el mayor') m1=input('digite el primer número: ' ) m2=input('digite el segundo número: ' ) if m1>m2 disp('el primer número es mayor que el segundo') else 3 disp('el segundo número es mayor que el primero') end Anidamiento de estructuras de decisión Se anidan colocando una en el interior de la otra, no debe haber solapamiento. También se cumple para las estructuras repetitivas, Ver figura 4. Ejemplo 3: digite una edad? clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('digite una edad?') edad=input('?: ' ) if edad<16 disp('Lo siento. Tendrá que esperar') elseif edad<18 disp('Puede obtener un permiso para conducir') elseif edad<70 disp('Puede obtener una licencia estándar') else disp('Los conductores mayores de 70 requieren una licencia especial') end Estructuras repetitivas desde hasta (for) y mientras (while) Las estructuras repetitivas o bucles nos ofrecen la solución cuando queremos repetir una tarea un número determinado de veces, por ejemplo, escribir una palabra un número determinado de veces, mover un brazo mecánico cierto número de veces, hacer una operación matemática cierta cantidad de veces etc. Dentro de estas estructuras encontramos las que se repiten cierta cantidad de veces hasta que cierta condición se cumpla como: Estructura repetitiva desde hasta (for): la estructura desde hasta (for), es una estructura repetitiva donde el número de iteraciones o repeticiones se conoce con anterioridad y por ello 4 no se necesita ninguna condición de salida para detener las instrucciones. En la figura 5, se muestran los símbolos de esta estructura y también en DFD desdevcontrol=viniciohasta vfinal[paso o incremento] acciones fin Ver figura 5. Estructura repetitiva desde hasta (for) Ejemplo 4: mostrar el cuadrado de los primeros 5 números enteros positivos clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('cuadrado de los primeros 5 números enteros positivos') for k=1:1:5 % incremento contador a=k.^2 end Ejemplo 5: adivine un número desde 1 hasta 10? clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('adivine un número desde 1 hasta 10') n=4; %guarda el número a adivinar en esta variable for k=1:1:10 % incremento contador g=input('intenta adivinar?. ' ) if n==g disp('acertaste!!') else disp('fallaste!!') end end 5 Ejemplo 6: operaciones con vectores (for) clc clc disp('----------------------------') disp('OPERACIONES CON VECTORES FOR') disp('----------------------------') k=0; %inicia contador en cero suma=0; for k = 1:1:5 % incremento del contador suma = suma + k^2; A(k)=k; B(k)=1/k; C(k)=k^2; D(k)=sqrt(k); end disp(' ') disp(' numero inverso cuadrado raiz_cuadrada') E=[A',B',C',D'] Ejemplo 7: operaciones con for clc disp('----------------------------') disp('OPERACIONES CON FOR') disp('----------------------------') disp('imprimir lista número y cuadrado') n=input('Ingrese un número mayor que cero: ' ) disp(' ') i=0; % iniciamos contador en cero for i=1:1:n % incremento del contador cuad=i*i; fprintf('%d\t%d\t\n',i,cuad) end Estructuras repetitivas mientras (while): las estructuras mientras (while), son ciclos que permiten ejecutar un conjunto de instrucciones mientras una condición específica sea verdadera. La condición es evaluada, sí esta es verdadera se ejecutan las sentencias dentro del mientras; si la condición es falsa la sentencia mientras finaliza y la ejecución se traslada a la primera sentencia después del mientras. En la figura 6, se muestran los símbolos de esta estructura y su equivalente en DFD. While: mientras (condición sea verdadera (true)) acciones fin Ver figura 6. Estructura repetitiva mientras (while) 6 Ejemplo 8: imprimir los números enteros desde cero hasta n clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('imprimir una lista de números enteros desde 0 hasta n') n=input('Ingrese un número mayor que cero: ' ) i=0; % iniciamos contador en cero while(i<=n) disp(i); % instrucción 1 i=i+1; % instrucción 2, conocida como incremento del contador end Ejemplo 9: imprimir los números enteros pares de 2 a 10 clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('imprimir una lista de números enteros pares de 2 a 10') i=2; % iniciamos contador en dos while(i<=10) disp(i); % instrucción 1 i=i+2; % instrucción 2, conocida como incremento del contador end Ejemplo 10: operaciones con vectores (while) clc disp('------------------------------') disp('OPERACIONES CON VECTORES WHILE') disp('------------------------------') i=0; %inicia contador en cero 7 while i<5 i=i+1; %incremento del contador A(i)=i; B(i)=1/i; C(i)=i^2; D(i)=sqrt(i); end disp(' ') disp(' numero inverso cuadrado E=[A',B',C',D'] raiz_cuadrada') Ejemplo 11: operaciones con while clc disp('----------------------------') disp('OPERACIONES CON WHILE') disp('----------------------------') disp('imprimir lista número y cuadrado') n=input('Ingrese un número mayor que cero: ' ) disp(' ') i=0; % iniciamos contador en cero while(i<=n) i=i+1; % incremento del contador cuad=i*i; fprintf('%d\t%d\t\n',i,cuad) end Estructura switch-case (según-caso) La estructura según caso, es una estructura de decisión múltiple. Se evalúa una expresión y en función del valor resultante se realiza una determinada tarea o conjunto de tareas. En caso de existir un valor no comprendido entre 1 y n, se realiza una acción excluyente o de otra manera (otherwise). En la figura 7, se muestra el diagrama de flujo de esta estructura. Figura 7. Estructura switch case (según caso) Código fuente: Matlab switch (expresión) 8 case {caso de la expresión uno} sentencias que se ejecutarán si el primer caso es verdadero (true) case {caso de la expresión dos} sentencias que se ejecutarán si el caso dos es verdadero (true) . . . otherwise (de otra manera) sentencias que se ejecutarán si todos los casos son falsos (false) end (fin) Cuando se ejecuta la instrucción switch, la expresión se evalúa y se transfiere el control directamente al grupo de instrucciones cuya etiqueta case tenga el mismo valor de expresión. Si ninguno de los valores de las etiquetas case coincide con el valor de expresión, entonces no se seleccionará ninguno de los grupos de la instrucción switch o se realizara la instrucción (otherwise). El valor por defecto (otherwise) es una forma conveniente de generar un mensaje de error en caso de tener entradas inválidas. Ejemplo 12: servicio de transporte para Pereira, Manizales, Armenia y Cartago clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') disp('servicio de transporte para pereira, manizalez, armenia y cartago') ciudad = input('Ingrese la cuidad entre comillas simples: ') switch ciudad case 'pereira' disp('Hay servicio el costo del boleto es $25100') case 'manizalez' disp('Hay servicio el costo del boleto es $35000') case 'armenia' disp('Hay servicio el costo del boleto es $22000') case 'cartago' disp('HOY no hay servicio de transporte a esa ciudad.') otherwise disp('Debe elegir entre las ciudades mencionadas') end Ejemplo 13: menú de funciones trigonométricas con plot clear all clc disp(' -------------------------------') %muestra líneas... disp('| nombre programador......... |') disp('| correo@utp.edu.co |') disp(' -------------------------------') disp('') disp('') % lee el tipo de función a utilizar choice = menu('','seno', 'coseno', 'tangente', 'salir'); % genera el eje del tiempo de la función t = (0.0 : pi/50 : pi); 9 switch (choice) case 1 % function seno y = sin(2*t); case 2 % function coseno y = cos(2*t); case 3 % function tangente y = tan(2*t); otherwise disp('Quit'); end figure(1); plot(t,y); title('FUNCIONES TRIGONOMÉTRICAS') xlabel('t(segundos)') ylabel('A(amplitud)') http://engineering.armstrong.edu/matlabmarina/pdf/matlab%20marina%20switchcase%20statements%20primer.p df