UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) Estructuras repetitivas Son aquellas que permiten repetir instrucciones (sentencias) hasta que una o varias condiciones lo permitan (cuando su interpretación lógica sea verdadera). Pueden ser de 2 formas: numéricos y/o lógicos, los numéricos son aquellos que se repiten una n (cantidad) veces, mientas que los lógicos algo los hace suspender la repetición a nivel de un estado de variable. Para el caso puntual del curso en matlab, utilizaremos los ciclos repetitivos (bucles) while y for (según sea el caso). Mientras (while-condicion-end) Falso Condición(es) Verdadero Instrucciones Sintaxis en matlab: while condicion(es) Instrucciones; end Observación: El ciclo se inicia con la cabecera while y se cierra con end (abre – cierra). Esta estructura se utiliza para ciclos numéricos y/o lógicos. Al ser utilizado como ciclo numérico se debe implementar una variable contadora que permita que el ciclo sea de iteraciones finitas. Por lo general cuando se implementa con este tipo de estructuras se debe garantizar que la primera vez se ingresa al ciclo repetitivo. Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) Para hasta (for-condicion-end) Falso Condición(es) Verdadero Instrucciones Sintaxis en matlab: for vble = inicio : incremento : fin Instrucciones; end Observación: El ciclo se inicia con la cabecera for y se cierra con end (abre – cierra). Los argumentos inicio, incremento y fin son valores numéricos. Esta estructura se utiliza para ciclos numéricos, debido a su simple sintaxis y lógica en utilización. Este tipo de estructuras tiene la particularidad que el contador no hay necesidad de crearlo, de inicializarlo ni de controlarlo (en la cabecera de la estructura se define su manejo automático). Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) Planteamiento de problemas y soluciones. Ejercicio 1: Mostrar los números del 1 al 10 en forma ascendente, diseñar el algoritmo tanto con la estructura while como la for. a) Con while clear all clc disp(‘Números del 1 al 10 ascendente’) numero = 1; while numero <= 10 disp(numero) numero = numero + 1; % contador que incrementa el numero inicial end disp(‘Fin del ejercicio’) b) Con for clear all clc disp(‘Números del 1 al 10 ascendente’) for numero = 1 : 1 : 10 disp(numero) end disp(‘Fin del ejercicio’) Observación: La cabecera (condiciones) del ciclo podría ser también for numero = 1 : 10 debido a que el incremento es 1, esto quiere decir, que el incremento es opcional colocarlo cuando se sabe que es 1 en valor. Igualmente el incremento puede ser positivo o negativo y diferente a 1 (cuando se requiera utilizarlo por lógica). Ejercicio 2: Mostrar los números del 1 al 10 en forma descendente, diseñar el algoritmo tanto con la estructura while como la for. a) Con while clear all clc disp(‘Números del 1 al 10 descendente’) numero = 10; while numero >= 1 disp(numero) numero = numero - 1; % contador que decrementa el numero inicial end disp(‘Fin del ejercicio’) Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) b) Con for clear all clc disp(‘Números del 1 al 10 descendente’) for numero = 10 : -1 : 1 disp(numero) end disp(‘Fin del ejercicio’) Ejercicio 3: Mostrar los números del 1 al 10 en forma descendente pero solo impares, diseñar el algoritmo tanto con la estructura while como la for. a) Con while clear all clc disp(‘Números del 1 al 10 descendente solo impares’) numero = 10; while numero >= 1 if mod(numero, 2) ~= 0 disp(numero) end numero = numero - 1; % contador que decrementa el numero inicial end disp(‘Fin del ejercicio’) c) Con for clear all clc disp(‘Números del 1 al 10 descendente solo impares’) for numero = 10 : -1 : 1 if mod(numero, 2) ~= 0 disp(numero) end end disp(‘Fin del ejercicio’) Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) Ejercicio 4: Mostrar los productos del 1 al 10 de la tabla de multiplicar del número 5, ejemplo de salida: Tabla de multiplicar del número 5 5x1=5 5 x 2 = 10 Hasta 5 x 10 = 50 clc clear all disp('Tabla de multiplicar del número 5') resultado = 0; tabla = 5; for numero = 1 : 10 resultado = tabla * numero; disp(sprintf('%d x %d = %d', tabla, numero, resultado)) end disp('Fin del ejercicio...') Ejercicio 5: Mostrar las tablas de multiplicar del 1 al 10 por pantallazos clc clear all disp('Tablas de multiplicar del 1 al 10') resultado = 0; % Ciclo de tablas for tabla = 1 : 10 disp(sprintf('Tabla del número %d', tabla)) % Ciclo de productos por tabla for numero = 1 : 10 resultado = tabla * numero; disp(sprintf('%d x %d = %d', tabla, numero, resultado)) end disp('Presione Enter para continuar') pause % hace una pause y continúa con un Enter clc end disp('Fin del ejercicio...') Ejercicio 6: Mostrar la tabla de multiplicar de un número dado (ingresado) Muy similar al ejercicio 4, la variable tabla no tendría la constante 5 (tabla = 5), sino que en esa variable se ingresaría (input) la tabla de multiplicar a procesar. Ejercicio 7: Diseñar un programa que permita calcular el factorial de un número dado (n!) Ejercicio 8: Ingresar n números y al final mostrar: - Sumatoria de los pares - Sumatoria de los impares Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) clc clear all disp('Sumatoria de números pares e impares') cantidad = 0; numero = 0; pares = 0; impares = 0; cantidad = input('Cantidad de números a ingresar: '); for n = 1 : cantidad numero = input('Número a ingresar: '); if mod(numero, 2) == 0 pares = pares + numero; else impares = impares + numero; end end disp(sprintf('La suma de los números pares es %d', pares)) disp(sprintf('La suma de los números impares es %d', impares)) disp('Fin del ejercicio') Ejercicio 9: Mostrar la tabla de multiplicar de un número dado, y repetir el proceso hasta que el usuario lo quiera realizar. Es el típico planteamiento donde se debe emplear un ciclo lógico (while) para poder permitir que el procesamiento se repita varias veces bajo una condición establecida, e igualmente se combinan los 2 tipos de ciclos repetitivos lógico y numérico. clc clear all disp('Procesar tablas de multiplicar hasta que el usuario lo requiera') tabla = 0; resultado = 0; repetir = 'S'; % Se repite mientras el usuario diga que S (de Si) while repetir == 'S' tabla = input('Ingrese el número de la tabla: '); for n = 1: 10 resultado = tabla * n; disp(sprintf('%d x %d = %d', tabla, n, resultado)) end repetir = upper(input('Desea procesar otra tabla? ', 's')); end disp('Fin del ejercicio') Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) Ejercicio 10: Ingresar un texto y determinar por cada vocal su cantidad encontrada clc clear all disp('Cantidad de vocales en texto') ca = 0; ce = 0; ci = 0; co = 0; cu = 0; texto = ''; texto = upper(input('Ingres un texto : ', 's')); % Se recorre el texto desde la primera posición hasta la última (vector) for p = 1 : length(texto) % Se evalúa si el valor de la posición actual del texto es una vocal if texto(p) == 'A' ca = ca + 1; elseif texto(p) == 'E' ce = ce + 1; elseif texto(p) == 'I' ci = ci + 1; elseif texto(p) == 'O' co = co + 1; elseif texto(p) == 'U' cu = cu + 1; end end disp(sprintf('Cantidad de la vocal a es %d', ca)) disp(sprintf('Cantidad de la vocal e es %d', ce)) disp(sprintf('Cantidad de la vocal i es %d', ci)) disp(sprintf('Cantidad de la vocal o es %d', co)) disp(sprintf('Cantidad de la vocal u es %d', cu)) disp('Fin del ejercicio') Ejercicio 11: Generar n números aleatorios y al final mostrar su promedio. clc clear all disp('Generar n números aleatorios y su promedio') cantidad = 0; primedio = 0; sumatoria = 0; cantidad = input('Cantidad de números aleatorios: '); for numero = 1 : cantidad sumatoria = sumatoria + rand; % se genera el numero aleatorio y se acumula end promedio = sumatoria / cantidad; disp(sprintf('El promedio de los números aleatorios es %.4f', promedio)) disp('Fin del ejercicio...') Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected] UNIVERSIDAD TECNOLOGICA DE PEREIRA Facultad de Ingeniería Industrial – Informática T2 (Matlab) Ejercicio 12: Ingresar n números y al final mostrar de acuerdo a los siguientes rangos su correspondiente sumatoria: a) Números menores a 10 b) Números entre 10 y 50 c) Números mayores a 50. Ejercicio 13: Validar que al ingresar una nota solo admita el rango entre 0 y 5, una vez aceptada como válida determinar por medio de un mensaje si es EXCELENTE (nota mayor o igual a 4.5), SOBRESALIENTE (nota entre 4 y 4.5), BUENA (entre 3 y 3.9 y MALA (si es menor a 3). Se plantea la solución con errores sintácticos y/o lógicos para que sea corregido y solucionado el problema. clc clear all disp('Validar una nota entre 1 y 5') nota = -1; mensaje = ''; % Se valida lo que no sirve como dato de entrada while nota < 0 | nota > 6 nota = input('Ingrese una nota entre 1 y 5: '); end if nota > 4.5 mensaje = 'EXCELENTE'; elseif nota >= 4 & nota <= 4.5 mensaje = 'SOBRESALIENTE'; else if nota > 3 & nota <= 3.9 mensaje = 'BUENA'; else mensaje = 'MALA'; end disp(sprintf('La calificación cualitativa de la materia es %f', mensaje)) disp('Fin del ejercicio') Ejercicio 14: Dado un número entero mostrar la lista de los números pares inferiores a él. Ejercicio 15: Dados dos números enteros mostrar la lista de los números impares comprendidos entre ellos. Ejercicio 16: Generar un número aleatorio entero entre 0 y 20, seguidamente diseñe un algoritmo que permita establecer en cuantos intentos fue adivinado. Profesor Wilson Cortés Álvarez, Ing. y Auditor de Sistemas de Información [email protected] - [email protected]