NOTA: este tutorial es parte del curso de Octave de Linux Hispano.
Os voy a proponer un pequeño ejercicio a resolver. Más adelante tenéis la solución pero en un principio me gustaría que lo intentáseis por vosotros mismos.
El ejercicio es el siguiente: Crea una función, incrementa_vector_constantemente.m, que reciba un vector de números. Dicha función devuelve true si los elementos del vector van aumentando constantemente. De lo contrario devuelve false.
Y ésta es la solución:
function vf = incrementa_vector_constantemente(x) vf = true; for i = 1:length(x)-1 if x(i+1) <= x(i) vf = false; break; end end end
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
No tengo ni idea de Octave, pero si tu función hace lo que creo que hace, solo comprobaría que el penúltimo es menor que el último. ¿No haría falta algo parecido a un "break" después de la línea "vf = false;"?
Fernando, la función 'incrementa_vector_constantemente' comienza tomando como verdadero que los elementos del vector 'x' se incrementan desde el principio hasta el final.
La cuestión es que la función toma el primer elemento y comprueba si es menor o igual al siguiente elemento. O al contrario, comprueba que el segundo elemento es mayor que el primero. Como hay una función 'for' que recorre el vector nos aseguramos que todos los elementos cumplen dicha condición. Como la función es incremental ya nos aseguramos que cada vez el elemento es mayor que el anterior.
En efecto Fernando, hace falta un break después del false, porque si encontramos un elemento que no es menor o igual que el anterior ya no hace falta seguir iterando en ese 'for'. Más aún, corremos el riesgo de que un elemento posterior "correcto" sobreescriba el valor de 'vf' incorrecto anterior. Por ejemplo, si tuviéramos este vector:
[1, 3, 2, 4] esta función devolvería "true", y creo que no es la idea...
Ah no, perdón, el comportamiento es el correcto, pero el detalle de cortar la iteración la haría más eficiente.
La función es correcta, pero es cierto que con un 'break' sería más eficiente.
Actualizado, gracias.