Parcial 2019_ejercicio_7

Parcial 2019_ejercicio_7

de Virginia Andrea Alonzo Perez -
Número de respuestas: 2

Buenos dias, 

Yo pense el ejercicio parecido a la solucion alternativa. Pero no me dio. 

Cuando corro la sulucion alternativa: ( yo parcial lo sustituto por aux y v por vect)

function suma= max_sec_crec(vect)

suma = 0;

creciente = false;

aux = 0;

n = length(vect)

for i = 1:n

if ~creciente

if (i ~= n) && (vect(i+1) > vect(i))

  aux = vect(i)

creciente = true

endif

else

aux = aux + vect(i)

if (i == n) || (vect(i) >= vect(i+1))

if aux > suma

suma = aux

endif

creciente = false

aux = 0

endif

endif

endfor

endfunction

 Lo que no entiendo es cuando i=3 porque a suma le asigna 14 que es el valor de aux si yo tego dos if  

if (i == n) || (vect(i) >= vect(i+1))

if aux > suma

suma = aux

endif

Para llegar a suma=aux y el primero no es verdadero. ?

Esto es lo que aprace en consola haciendo debugging:

 max_sec_crec(vect)

n = 11

aux = 2

creciente = 1

aux = 7

aux = 14

suma = 14 este es el que no entiendo. 

creciente = 0

aux = 0

aux = 2

creciente = 1

aux = 9

aux = 18

suma = 18

creciente = 0

aux = 0

aux = 1

creciente = 1

aux = 3

aux = 8

aux = 14

creciente = 0

aux = 0

ans = 18


Muchas gracias 


En respuesta a Virginia Andrea Alonzo Perez

Re: Parcial 2019_ejercicio_7

de Eduardo Fernandez -

Hola, 

Obviamente ambos if cumplen la condición, de lo contrario no llegaba a la línea de código "suma=aux"

Fijate que el primer if dice "if (i == n) || (vect(i) >= vect(i+1))"

Cuando i vale 3, entonces es falso (i==n), pero sí es verdadero que (vect(i) >= vect(i+1)), porque 7 >= 4, y como ambas expresiones se relacionan por un OR, basta con que una de ambas expresiones sean verdaderas para que sea verdadera la expresión lógica completa. En conclusión ese primer if es verdadero.

El segundo if también es verdadero, porque hasta i=3 no se actualiza nunca a suma, y por tanto vale 0.

Espero haber entendido tu duda y que esta respuesta te sirva de ayuda. 

saludos,

Eduardo