翻译一段fortran程序(100分)

  • 主题发起人 主题发起人 春风江南
  • 开始时间 开始时间

春风江南

Unregistered / Unconfirmed
GUEST, unregistred user!
有一段fortran子程序,是求行列式的值的。我不懂fortran,但只能找到fortran的源程序。谁帮忙给翻译一下成pascal?要求M维数组A的初值从[0,0]开始,所以可能要改一点程序吧。
FUNCTION DET (M,A)
DIMENSION A(M,M)
IS=1
PR=1.0
M2=M-1
DO 5 K=1,M2
PM=0
K1=K+1
DO 10 I=K,M //是不是这儿要动改动?
DO 10 J=K,M
PV=A(I,J)
IF(ABS(PV).LT.ABS(PM)) GOTO 10
PM=PV
I0=I
J0=J
10 CONTINUE
IF (PM.EQ.0) GOTO 50
IF (I0.EQ.K) GOTO 25
IS=-IS
DO 20 J=K,M
T=A(I0,J)
A(I0,J)=A(K,J)
20 A(K,J)=T
25 IF(J0.EQ.K) GOTO 35
IS=-IS
DO 30 I=K,M
T=A(I,J0)
A(I,J0)=A(I,K)
30 A(I,K)=T
35 PR=PR*PM
PM=-1/PM
DO 40 I=K1,M
Q=A(I,K)*PM
DO 40 J=K1,M
40 A(I,J)=A(I,J)+Q*A(K,J)
5 CONTINUE
DET=IS*PR*A(M,M)
GOTO 60
50 DET=0
60 RETURN
END


 
这个很好改嘛!
.LT.就是<,.EQ就是=,其它的和PASCAL差不了多少。
 
我自己翻了一下,不知道对不?
type
AA = array of array of real;

procedure text2(var A: AA
var m: integer
var det:real);
var
i, j,k,i0,j0,m2,k1: integer;
is1,pr,pm,pv,q,t:real;
begin
setlength(A, m, m);
is1:=1
pr:=1.0
m2:=m-1
for k:=0 to m2-1 do
begin
pm:=0
k1:=k+1
for i:=k to m do
for j:=k to m do
begin
pv:=A[i,j]
if (abs(pv)<=abs(pm)) then begin
pm:=pv
i0:=i
j0:=j;
end;
end;
if (pm=0) then begin det:=0
end;
if (i0<>k) then begin
is1:=-is1;
for j:=k to m do
begin t:=A[i0,j]
A[i0,j]:=A[k,j]
A[k,j]:=j
end;end
else
begin is1:=-is1;
for i:=k to m do
begin t:=A[i,j0]
A[i,j0]:=A[i,k]
A[i,k]:=t
end;
pr:=pr*pm
end;

pm:=-1/pm
for i:=k1 to m do begin
q:=A[i,k]*pm
for j:=k1 to m do begin
A[i,j]:=A[i,j]+q*A[k,j];
end;
end;
end

det:=is1*pr*A[m,m];
end;
 
调试不成功啊
 
还不如编一个。
 
多人接受答案了。
 
后退
顶部