Soluciones de 1bii y 1biii

Soluciones de 1bii y 1biii

de Eduardo Fernandez -
Número de respuestas: 0

Hola, por si les resulta de utilidad o si no las pudieron hacer, les mando esas funciones, que son bien interesantes. 

1bii

function [Sn Si Sj]=SumaDR(An,Ai,Aj,Bn,Bi,Bj)
  lA=length(An); 
  lB=length(Bn);
  %Sn=[];Si=[];Sj=[];
  if lA==0 || lB==0  %paso base
    Sn=[An Bn];   %Sn=[An []] = An; Sn=[[] Bn] = Bn; Sn=[[] []] = [] 
    Si=[Ai Bi];
    Sj=[Aj Bj];
  else       %paso recursivo
    if Ai(1)<Bi(1)
      [Sn Si Sj]=SumaDR(An(2:lA),Ai(2:lA),Aj(2:lA),Bn,Bi,Bj);
      Sn=[An(1) Sn];
      Si=[Ai(1) Si];      
      Sj=[Aj(1) Sj];
    elseif Ai(1)>Bi(1)  
      [Sn Si Sj]=SumaDR(An,Ai,Aj,Bn(2:lB),Bi(2:lB),Bj(2:lB));
      Sn=[Bn(1) Sn];
      Si=[Bi(1) Si];      
      Sj=[Bj(1) Sj];
    elseif Aj(1)<Bj(1) % A partir de aquí se cumple que Ai(1)==Bi(1)
      [Sn Si Sj]=SumaDR(An(2:lA),Ai(2:lA),Aj(2:lA),Bn,Bi,Bj);
      Sn=[An(1) Sn];
      Si=[Ai(1) Si];      
      Sj=[Aj(1) Sj];
    elseif Aj(1)>Bj(1)  
      [Sn Si Sj]=SumaDR(An,Ai,Aj,Bn(2:lB),Bi(2:lB),Bj(2:lB));
      Sn=[Bn(1) Sn];
      Si=[Bi(1) Si];      
      Sj=[Bj(1) Sj];
    else %Si se llega a aquí es porque Ai(1)==Bi(1) && Aj(1)==Bj(1)
      [Sn Si Sj]=SumaDR(An(2:lA),Ai(2:lA),Aj(2:lA),Bn(2:lB),Bi(2:lB),Bj(2:lB));
      if An(1)+Bn(1)~=0  % la suma de los números se agrega sólo si es ~=0
        Sn=[An(1) + Bn(1), Sn];
        Si=[Bi(1) Si];      
        Sj=[Bj(1) Sj];
      endif
    endif
  endif
endfunction
1biii  Atención, esta función llama a la resuelta en 1bii
function [Ps Pf Pc]=ProdDR(As,Af,Ac,Bs,Bf,Bc)
  lA=length(As); lB=length(Bs);
  if lA==0 || lB==0 %paso base. Si alguna de las matrices es nula, entonces el producto también lo es
    Ps=[]; Pf=[]; Pc=[];
  elseif lA==1  %paso recursivo. La matriz A tiene un solo elemento
    [Ps Pf Pc]=ProdDR(As,Af,Ac,Bs(2:lB),Bf(2:lB),Bc(2:lB)); %Se separa a B en el 1er elemento 1 elem y el resto.
    if Ac(1) == Bf(1)       %Se agrega un elemento a P sólo si se cumple la igualdad
      Ps=[As(1)*Bs(1) Ps];
      Pf=[Af Pf];
      Pc=[Bc(1) Pc];
    end
  else   %paso recursivo. Se separa a A en el primer elemento y el resto. 
    [P1s P1f P1c]=ProdDR(As(1),Af(1),Ac(1),Bs,Bf,Bc);  %Producto con 1 elemento
    [P2s P2f P2c]=ProdDR(As(2:lA),Af(2:lA),Ac(2:lA),Bs,Bf,Bc); %Producto donde A tiene un elemento menos
    [Ps Pf Pc]=SumaDR(P1s,P1f,P1c,P2s,P2f,P2c); %Se hace P1 + P2
  endif
endfunction