Planteamientos y soluciones ciclo repetitivos_Nov0112

Anuncio
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]
Descargar