在Fortran

时间:2018-03-17 04:02:36

标签: fortran gfortran

如何获取首先列出用于加密消息的2x2矩阵的文本文件,然后是每行编码一条消息的一个整数(总共32行)?基本上,我想创建一个程序:

1)读取并反转2x2加密矩阵

2)写一个用于行列式函数的子程序来帮助反转矩阵

3)通过一次读取两个整数并将它们插入字符串(chracter * 32 =完整字符串)来解密

最后,打印隐藏的消息。

我对Fortran很新(以及一般的编程),但到目前为止,这是我所拥有的,并希望得到任何帮助。

program Program2

implicit none

INTEGER, DIMENSION(2,2) :: M, M2, M3
INTEGER :: B(32)
INTEGER :: row,col,max_rows,max_cols, Det, i, n, a
max_rows = 2
max_cols = 2

open(11, file = 'Data3.txt')

DO row = 1,max_rows
  READ(11,*) (M(row,col),col=1,max_cols)
END DO

!Finding the inverse of a 2x2 matrix and reassigning.
M2(1,1) = M(2,2)
M2(2,2) = M(1,1)
M2(1,2) = -M(1,2)
M2(2,1) = -M(2,1)

! Could not get determinant function to yield correct answer (calc by hand)
M3 = M2/-1
print*, M3
print*, Det

open(11, file = 'Data3.txt')
i = a

do i = 1, 16
    read(11,*) n
    print*, n
enddo

close(11)
end program Program2

! Determinant function for a 2x2 matrix
function Determinant(M2) result(Det)

   implicit none
   INTEGER, DIMENSION(2,2) :: M, M2, M3
   INTEGER :: B(32)
   INTEGER :: row,col,max_rows,max_cols, Det, i, n, a

   Det = M2(1,1)*M2(2,2) - M2(1,2)*M2(2,1)

end function Determinant

这是文本文件(或只是它的样子的副本):

    3          11
       2           7
    1488
     955
     703
     458
    1379
     887
    1465
     943
    1196
     764
    1392
     895
    1433
     922
    1403
     902
    1372
     876
    1467
     943
     697
     454
    1518
     975
    1596
    1026
    1392
     895
    1536
     988
     726
     473

1 个答案:

答案 0 :(得分:1)

首先,要使Determinant功能正常工作,需要一种类型(请参阅Function has no implicit type):

INTEGER :: Determinant

修改 正如评论中所指出的那样,无需像外部一样被引用。感谢。

然后它可以使用,它运作良好:

Det = Determinant(M2)
print*, Det

打印-1

其次,您能否提供有关您在步骤3中要做的事情的更多解释,以便我们为您提供帮助。

  

3)通过一次读取两个整数并将它们插入字符串(chracter * 32 =完整字符串)来解密