← MATLAB EspañolChapter 04 of 13

Control de Flujo

## Objetivos de Aprendizaje - Usar sentencias condicionales (if-else, switch) - Implementar bucles (for, while) - Controlar la ejecucion de bucles (break, continue) - Manejar errores apropiadamente ## Sentencias Condicionales ### Sentencia if ```matlab x = 10; if x > 0 disp('x es positivo'); end ``` ### Sentencia if-else ```matlab x = -5; if x >= 0 disp('x es no negativo'); else disp('x es negativo'); end ``` ### Sentencia if-elseif-else ```matlab puntuacion = 85; if puntuacion >= 90 nota = 'A'; elseif puntuacion >= 80 nota = 'B'; elseif puntuacion >= 70 nota = 'C'; elseif puntuacion >= 60 nota = 'D'; else nota = 'F'; end disp(nota); % 'B' ``` ### Sentencias if Anidadas ```matlab x = 10; y = 20; if x > 0 if y > 0 disp('x e y son positivos'); else disp('x positivo, y no positivo'); end else disp('x no es positivo'); end ``` ## Sentencia switch ### switch Basico ```matlab dia = 'Lunes'; switch dia case 'Lunes' disp('Inicio de semana laboral'); case 'Viernes' disp('Fin de semana laboral'); case {'Sabado', 'Domingo'} disp('Fin de semana!'); otherwise disp('Dia regular'); end ``` ### Multiples Valores por Caso ```matlab mes = 2; switch mes case {1, 3, 5, 7, 8, 10, 12} dias = 31; case {4, 6, 9, 11} dias = 30; case 2 dias = 28; end ``` ### switch vs if-else ```matlab % switch es souvent plus propre pour les valeurs discretes % if-else est meilleur pour les plages ou les conditions complexes % Exemple avec plages (if-else est mieux) valor = 75; if valor >= 90 resultado = 'A'; elseif valor >= 80 resultado = 'B'; else resultado = 'C'; end ``` ## Bucles for ### Bucle for Basico ```matlab % Recorrer un rango for i = 1:5 fprintf('i = %d\n', i); end ``` ### Recorrer un Arreglo ```matlab arr = [10, 20, 30, 40, 50]; suma = 0; for val = arr suma = suma + val; end disp(suma); % 150 ``` ### Bucles for Anidados ```matlab % Imprimir tabla de multiplicar for i = 1:5 fila = ''; for j = 1:5 fila = [fila, sprintf('%4d', i*j)]; end disp(fila); end ``` ### Bucle con Paso ```matlab % Numeros pares del 2 al 10 for i = 2:2:10 disp(i); % 2, 4, 6, 8, 10 end % Hacia atras for i = 10:-1:1 disp(i); % 10, 9, 8, ..., 1 end ``` ### Variaciones del Indice del Bucle ```matlab A = [1, 2, 3; 4, 5, 6]; % Recorrer indices de fila y columna [m, n] = size(A); for i = 1:m for j = 1:n fprintf('A(%d,%d) = %d\n', i, j, A(i,j)); end end ``` ## Bucles while ### Bucle while Basico ```matlab contador = 0; while contador < 5 disp(contador); contador = contador + 1; end ``` ### while con Condicion ```matlab % Encontrar primera potencia de 2 mayor que 1000 valor = 1; while valor <= 1000 valor = valor * 2; end disp(valor); % 1024 ``` ### Prevencion de Bucles Infinitos ```matlab % Siempre asegurar que la condicion del bucle sera falsa eventualmente maxIteraciones = 100; contador = 0; x = 1; while abs(x) > 1e-10 && contador < maxIteraciones x = x / 2; contador = contador + 1; end if contador == maxIteraciones disp('Maximo de iteraciones alcanzado'); end ``` ## break y continue ### Sentencia break ```matlab % Encontrar primer numero par en un arreglo arr = [1, 3, 5, 7, 8, 9, 10]; for val = arr if mod(val, 2) == 0 disp(['Primer par: ', num2str(val)]); break; end end ``` ### Sentencia continue ```matlab % Imprimir solo numeros impares for i = 1:10 if mod(i, 2) == 0 continue; % Saltar numeros pares end disp(i); % 1, 3, 5, 7, 9 end ``` ### break vs continue ```matlab % break - sale del bucle completamente % continue - salta a la siguiente iteracion ``` ## Ejemplos de Control de Bucles ### Sumar Hasta Condicion ```matlab % Sumar elementos de arreglo hasta que la suma exceda 100 arr = [10, 20, 30, 40, 50, 60]; suma = 0; for i = 1:length(arr) suma = suma + arr(i); if suma > 100 break; end end fprintf('Suma: %d, Elementos usados: %d\n', suma, i); ``` ### Saltar Valores Invalidos ```matlab % Procesar solo valores positivos data = [-5, 10, -3, 20, -1, 30]; sumaValida = 0; for val = data if val <= 0 continue; end sumaValida = sumaValida + val; end disp(sumaValida); % 60 ``` ## Vectorizacion (Alternativa a los Bucles) ### Reemplazar Bucles con Operaciones Vectoriales ```matlab % Lento: enfoque con bucle n = 1000; resultado = zeros(1, n); for i = 1:n resultado(i) = i^2; end % Rapido: enfoque vectorizado resultado = (1:n).^2; ``` ### Indexacion Logica ```matlab % Encontrar elementos mayores que 5 arr = [1, 6, 3, 8, 2, 9]; % Enfoque con bucle grandes = []; for val = arr if val > 5 grandes = [grandes, val]; end end % Enfoque vectorizado grandes = arr(arr > 5); ``` ## Manejo de Errores ### try-catch ```matlab try resultado = 10 / 0; disp('Division exitosa'); catch ME disp('Ocurrio un error:'); disp(ME.message); end ``` ### Multiples Bloques catch ```matlab try x = notAFunction(); catch ME if strcmp(ME.identifier, 'MATLAB:UndefinedFunction') disp('Funcion no encontrada'); else disp(['Error: ', ME.message]); end end ``` ## Resumen - Usar `if-elseif-else` para logica condicional - Usar `switch` para coincidencia de valores discretos - Usar bucles `for` cuando se conoce el numero de iteraciones - Usar bucles `while` cuando se necesita iteracion basada en condiciones - Usar `break` para salir de bucles anticipadamente - Usar `continue` para saltar iteraciones - Preferir vectorizacion sobre bucles para mejor rendimiento - Usar `try-catch` para manejo de errores

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →