变量格式
Variable format
我写了一个程序来计算一个方形有限差分矩阵,你可以在其中输入行数(等于列数)-> 这是存储在变量矩阵中。该程序运行良好:
program fin_diff_matrix
implicit none
integer, dimension(:,:), allocatable :: A
integer :: matrix,i,j
print *,'Enter elements:'
read *, matrix
allocate(A(matrix,matrix))
A = 0
A(1,1) = 2
A(1,2) = -1
A(matrix,matrix) = 2
A(matrix,matrix-1) = -1
do j=2,matrix-1
A(j,j-1) = -1
A(j,j) = 2
A(j,j+1) = -1
end do
print *, 'Matrix A: '
write(*,1) A
1 format(6i10)
end program fin_diff_matrix
对于输出,我希望为输出格式化矩阵,例如如果用户输入 6 行,输出也应如下所示:
2 -1 0 0 0 0
-1 2 -1 0 0 0
0 -1 2 -1 0 0
0 0 -1 2 -1 0
0 0 0 -1 2 -1
0 0 0 0 -1 2
格式的输出也应该是可变的,例如如果用户输入 10,则输出也应格式化为 10 列。上网查了一下带尖括号格式语句的解决方法如下:
1 format(<matrix>i<10)
如果我在 Linux 中使用 gfortran 进行编译,我总是会在终端中收到以下错误:
fin_diff_matrix.f95:37.12:
1 format(<matrix>i10)
1
Error: Unexpected element '<' in format string at (1)
fin_diff_matrix.f95:35.11:
write(*,1) A
1
Error: FORMAT label 1 at (1) not defined
什么不起作用,我的错误是什么?
您尝试使用的语法是非标准的,它只适用于某些编译器,我不鼓励使用它。
此外,永远忘记 FORMAT()
语句,它们已经过时了。
当你自己从几个部分构造它时,你可以在格式字符串中得到你自己的数字
character(80) :: form
form = '( (i10,1x))'
write(form(2:11),'(i10)') matrix
write(*,form) A
您还可以在每行的循环中编写矩阵,然后您可以使用任意大的计数或 Fortran 2008 中的 *
。
do i = 1, matrix
write(*,'(999(i10,1x))') A(:,i)
end do
do i = 1, matrix
write(*,'(*(i10,1x))') A
end do
看看我是不是不小心转置了矩阵。
我写了一个程序来计算一个方形有限差分矩阵,你可以在其中输入行数(等于列数)-> 这是存储在变量矩阵中。该程序运行良好:
program fin_diff_matrix
implicit none
integer, dimension(:,:), allocatable :: A
integer :: matrix,i,j
print *,'Enter elements:'
read *, matrix
allocate(A(matrix,matrix))
A = 0
A(1,1) = 2
A(1,2) = -1
A(matrix,matrix) = 2
A(matrix,matrix-1) = -1
do j=2,matrix-1
A(j,j-1) = -1
A(j,j) = 2
A(j,j+1) = -1
end do
print *, 'Matrix A: '
write(*,1) A
1 format(6i10)
end program fin_diff_matrix
对于输出,我希望为输出格式化矩阵,例如如果用户输入 6 行,输出也应如下所示:
2 -1 0 0 0 0
-1 2 -1 0 0 0
0 -1 2 -1 0 0
0 0 -1 2 -1 0
0 0 0 -1 2 -1
0 0 0 0 -1 2
格式的输出也应该是可变的,例如如果用户输入 10,则输出也应格式化为 10 列。上网查了一下带尖括号格式语句的解决方法如下:
1 format(<matrix>i<10)
如果我在 Linux 中使用 gfortran 进行编译,我总是会在终端中收到以下错误:
fin_diff_matrix.f95:37.12:
1 format(<matrix>i10)
1
Error: Unexpected element '<' in format string at (1)
fin_diff_matrix.f95:35.11:
write(*,1) A
1
Error: FORMAT label 1 at (1) not defined
什么不起作用,我的错误是什么?
您尝试使用的语法是非标准的,它只适用于某些编译器,我不鼓励使用它。
此外,永远忘记 FORMAT()
语句,它们已经过时了。
当你自己从几个部分构造它时,你可以在格式字符串中得到你自己的数字
character(80) :: form
form = '( (i10,1x))'
write(form(2:11),'(i10)') matrix
write(*,form) A
您还可以在每行的循环中编写矩阵,然后您可以使用任意大的计数或 Fortran 2008 中的 *
。
do i = 1, matrix
write(*,'(999(i10,1x))') A(:,i)
end do
do i = 1, matrix
write(*,'(*(i10,1x))') A
end do
看看我是不是不小心转置了矩阵。