Práctico 6 - ejercicios 8 y 10

Práctico 6 - ejercicios 8 y 10

de Eva Sofia Martinez Freda -
Número de respuestas: 2

Buenas,

Comparto mis resoluciones a los ejercicios 8 y 10 del práctico 6. Quedo atenta a cualquier comentario.

Saludos y buen comienzo de semana.


En respuesta a Eva Sofia Martinez Freda

Re: Práctico 6 - ejercicios 8 y 10

de Jimena Ferreira -

Estimada Eva,

Te envío mis comentarios por función.
  • En la función traza no es necesario tener dos for, alcanza con uno. Como ya se sabe que se va a recorrer los valores de i iguales a los de j alcanza con tener un índice en el for y utilizar M(pos, pos) para la suma. Una posible solución sería:
function suma=traza(m)
[filas,columnas]=size(m);
suma=0;
for i=1:filas
     suma=suma+m(i,i);
endfor
endfunction

  • La función listar_primos está correcta. 
  • La función expresar_como_suma está bien encaminada pero utiliza la estructura de iteración incorrecta. Como lo que se busca es dos valores, no es necesario recorrer todo el vector, si se encuentra un a y b que cumpla la condición ya no es necesario recorrer el resto del vector. Yendo un poco más a la cantidad de veces que se recorre cada elemento del vector, no es necesario que la segunda iteración empiece de nuevo en 1, puede empezar en el mismo elemento que se está con la primera iteración hacia el final (porque las comparaciones anteriores ya sucedieron en las iteraciones anteriores) 
Una posible solución sería:
function [a,b]=expresar_como_suma(x)
  vaux=listar_primos(1,x);
  a=-1;b=-1; encontre=0;
  i=1;
  while i <=length(vaux) & encontre==0
j=i;
    while j <=length(vaux) & encontre==0
      if vaux(i)+vaux(j) == x
        a=vaux(i);b=vaux(j);
encontre=1;
  else
j=j+1;
      endif
    endwhile
i=i+1;
  endwhile
endfunction

Espero que hayan quedado claro los comentarios.

Saludos,

Jimena F.

En respuesta a Jimena Ferreira

Re: Práctico 6 - ejercicios 8 y 10

de Eva Sofia Martinez Freda -
Buenas tardes,

Muchas gracias por los comentarios. Son ejercicios interesantes para mi porque proponen soluciones que estaban fuera de mi esquema, como usar la misma variable para los dos componentes de posición (han sido muchos años de P(x,y)!).

Respecto a expresar_como_suma, se me pasó totalmente todo lo que se podía avanzar en optimización (además del error de la elección entre for y while que en mi caso ya es común...) Mi error fue imaginarme la comparación como que había clonado al vector auxiliar y estaba comparando los valores de esos dos vectores, por eso no me di cuenta de la redundancia. Veo lo importante que es volver al código varias veces para reevaluarlo (menos líneas ≠ mejor optimizado).

Saludos! Nos vemos.