如何获取首先列出用于加密消息的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
答案 0 :(得分:1)
首先,要使Determinant
功能正常工作,需要一种类型(请参阅Function has no implicit type):
INTEGER :: Determinant
修改强> 正如评论中所指出的那样,无需像外部一样被引用。感谢。
然后它可以使用,它运作良好:
Det = Determinant(M2)
print*, Det
打印-1
。
其次,您能否提供有关您在步骤3中要做的事情的更多解释,以便我们为您提供帮助。
3)通过一次读取两个整数并将它们插入字符串(chracter * 32 =完整字符串)来解密