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.