gpt4 book ai didi

fortran - Fortran中如何统一读取实数和复数?

转载 作者:行者123 更新时间:2023-12-04 11:00:46 26 4
gpt4 key购买 nike

假设我有一个数据文件 (fort.100),其中包含如下数据,

2.34,          4.5
(23.1,0.3), 4.5
(3.1,0.3), (3.2,1.0)
2.4, (32.2,12.0)

如何将这些混合的实数和复数值读入复数变量?换句话说,下面的简单方法在 gfortran 中不起作用。

program readmixnum
implicit none
integer::i
complex::cdat(4,2)
do i=1, 4
read(100,*) cdat(i,1:2)
write(*,*) cdat(i,1:2)
end do
end program

实际上,我们可以为复杂变量分配一个实数值,但为什么不能读取实数值。我想知道必须有一个非常简单的解决方案。

最佳答案

请尝试将此作为您问题的简单解决方案:

program readmixnum
implicit none
integer::i,st
character*256::line
real::rdat(4,2)
complex::cdat(4,2)
do i=1, 4
read(100,'(A)',iostat=st) line
read(line,*,iostat=st) rdat(i,:)
cdat(i,:) = rdat(i,:)
if (st /= 0) then
read(line,*,iostat=st) rdat(i,1), cdat(i,2)
cdat(i,1) = rdat(i,1)
if (st /= 0) then
read(line,*,iostat=st) cdat(i,1), rdat(i,2)
cdat(i,2) = rdat(i,2)
if (st /= 0) then
read(line,*,iostat=st) cdat(i,:)
endif
endif
endif
write(*,*) cdat(i,1:2)
end do
end program

它需要一个与复矩阵 cdat 具有相同秩的实数矩阵 rdat。输入文件 fort.100 的一行保存在 line 变量中。这可以防止在检查数字格式时使用 backspace 语句。

数字格式的检查是通过iostat 参数完成的。如果此值等于 0,则读取成功且数字格式正确。挑战是尝试所有可能的组合。

输出是:

 (  2.33999991    ,  0.00000000    ) (  4.50000000    ,  0.00000000    )
( 23.1000004 , 0.300000012 ) ( 4.50000000 , 0.00000000 )
( 3.09999990 , 0.300000012 ) ( 3.20000005 , 1.00000000 )
( 2.40000010 , 0.00000000 ) ( 32.2000008 , 12.0000000 )

用于在 Linux 机器上使用 gfortran 版本 6.3.0 进行编译。

希望对您有所帮助。

关于fortran - Fortran中如何统一读取实数和复数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com