MSB の答えには、問題の要点があります。配列インデックスがいくつかの場所で範囲外になります。
3 つのループでcifra - 1 == 0
は、範囲外です。
do cifra=ncifras,1,-1
factor(1,cifra-1) = factor(1,cifra)/10 ! factor is (1:2, 1:ncifras)
factor(1,cifra) = mod(factor(1,cifra),10)
enddo
! :
! Same here:
do cifra=ncifras,1,-1
factor(2,cifra-1) = factor(2,cifra)/10
factor(2,cifra) = mod(factor(2,cifra),10)
enddo
!:
do cifra=ncifras,1,-1
sumaprovisional(cifra-1) = sumaprovisional(cifra-1)+(sumaprovisional(cifra)/10)
sumaprovisional(cifra) = mod(sumaprovisional(cifra),10)
enddo
次のケースでは、 の値がcifra - (fila - 1)
範囲外になります。
do fila=1,nfilas
do cifra=1,ncifras
! Out of bounds for all cifra < fila:
sumando(fila,cifra-(fila-1)) = factor(1,cifra)*factor(2,ncifras-(fila-1))
enddo
sumaprovisional = sumaprovisional+sumando(fila,:)
enddo
do cifra = ncifras, 2, -1
最初の 3 つのループを として、他のケースの内側のループをとして書き直せば問題ないはずですdo cifra = fila, ncifras
。また、投稿したサンプルプログラムではresultado
、サブルーチンに渡す前にまず適切に割り当てる必要があります。