Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复数的fortran格式说明符_Fortran_Fortran90_Gfortran - Fatal编程技术网

复数的fortran格式说明符

复数的fortran格式说明符,fortran,fortran90,gfortran,Fortran,Fortran90,Gfortran,我可以在fortran中为复数指定格式说明符吗?我有一个简单的程序 program complx1 implicit none complex :: var1 var1 = (10,20) write (*,*) var1 write (*,'(F0.0)') var1 write (*,'(F0.0,A,F0.0)') real(var1), ' + i ' , aimag(var1) end program complx1 输出: ( 10.0000000 , 20.00000

我可以在fortran中为复数指定格式说明符吗?我有一个简单的程序

program complx1
implicit none
complex :: var1
var1 = (10,20)
write (*,*) var1
write (*,'(F0.0)') var1
write (*,'(F0.0,A,F0.0)') real(var1), ' + i ' , aimag(var1)
end program complx1
输出:

 (  10.0000000    ,  20.0000000    )
10.
20.
10. + i 20.
我想对
a+bi
使用内置格式和一些格式说明符,而不是手动使用(程序的最后一行)。显然,
F0.0
不起作用。有什么想法吗

编辑:
我不认为这是post:,它说使用
REAL
AIMAG
函数。我已经使用了这些函数,不知道是否有一种内置格式可以完成这项工作。

没有明显的复杂编辑描述符。在Fortran 2008中,我们看到10.7.2.3.6

复杂数据由一对独立的实际数据组成。复杂类型的标量数据的编辑由两个编辑描述符指定,每个描述符指定实际数据的编辑

在第二个示例中,您说“不起作用”,您可以看到这种格式正在起作用。因为格式只有一个描述符,没有重复计数,所以值以不同的记录输出(格式反转)

三种情况中的第一种情况非常特殊:它使用列表定向输出。输出的规则是

复常数用括号括起来,在实部和虚部之间用分隔符分隔

提到的第一条规则还有另一个有用的部分:

可以在用于实部的编辑描述符和用于虚部的编辑描述符之间处理控制和字符串编辑描述符

您可以很高兴地调整您的第二次尝试,因为我们注意到您的“不工作”不是因为使用了复变量本身(而不是实部和虚部)

然而,当您有潜在的负面复杂部分时,这是不正确的。你需要在中间换个牌子。这是可能的,使用字符变量格式(而不是文字)和条件,但这可能不值得努力。有关另一种方法的详细信息,请参见,该方法类似于第三种方法,但更健壮

另一种选择是编写一个函数,返回复杂变量的正确字符表示形式。这就像你的第三个选择。当您想要写出许多复杂的变量时,它也是最不混乱的方法

最后,如果您确实需要担心消极的复杂部分,但需要一个简单的变量列表规范,那么真正难看的是

write(*,'(F0.0,"+i*(",F0.0,")")') var1
还是想象的

character(19) fmt
fmt = '(F0.0,"+",F0.0,"i")'
fmt(8:8) = MERGE('+',' ',var1%im.gt.0)
write(*,fmt) var1
或者更好地使用
SP
控制编辑描述符,该描述符临时(在输出语句期间)将传输的符号模式设置为
PLUS
,强制打印可选的“+”符号。[或者,可以使用
符号class='plus'
说明符在
打开的
中为连接本身设置此选项。]


所有这一切都是因为简单的答案是:不,没有内置的复杂编辑描述符。

是@francescalus现有答案的补充,也是最令人满意的答案。格式字符串,例如

fmt = '(F0.0,SP,F0.0,"i")'

应导致在实部和虚部之间以正确符号显示复数;不需要在字符串中乱摆弄来获得加号。

是否存在内置格式?可能是@francescalus的重复,我认为这不是重复。请参阅问题中的编辑部分,其他答案建议采用这种方法,因为没有“自然”的其他方法。我已经取消了(并改进了)我的答案(从我发现另一个问题之前开始——反常地,因为我犯了完全相同的错误……),这很有希望解释为什么。[此外,我认为这是一个更好的问题,因此我将把它留在那里,以防其他人认为副本应该走另一条路。或者,如果有一致意见,我应该再次删除。]我现在觉得很傻,因为我一直忘了“+”实际上是可选的,而不是禁止的(和这里一样可控)。尽管如此,为了让我的答案有一些价值,我要注意,
SP
是一个控件编辑描述符,正如前面提到的,它是显式允许的。。。
fmt = '(F0.0,SP,F0.0,"i")'