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_Prims Algorithm - Fatal编程技术网

为什么';这是fortran代码吗?

为什么';这是fortran代码吗?,fortran,prims-algorithm,Fortran,Prims Algorithm,嘿,我写这篇(fortran)的目的是找到一堆点的最小生成树(它们的syscount)。我知道这种方法是有效的,因为我今天早些时候用javascript编写了它。不过js速度很慢,我想看看fortran会快多少!! 唯一的问题是它不工作,我得到一个恼人的错误 prims.f95:72.43: 如果((check==1)和(path(nodesin(j))(k),我建议您考虑一下。不使用它是危险的,而且您使用的变量名称彼此接近(minpath和minpath)。通过使用IMPLICIT NONE可

嘿,我写这篇(fortran)的目的是找到一堆点的最小生成树(它们的syscount)。我知道这种方法是有效的,因为我今天早些时候用javascript编写了它。不过js速度很慢,我想看看fortran会快多少!! 唯一的问题是它不工作,我得到一个恼人的错误

prims.f95:72.43:

如果((check==1)和(path(nodesin(j))(k) 错误:在(1)处的表达式中应为右括号

这到底是怎么回事?!行中的第43个字符是“路径”的“h”

然后使用check变量查看它是否存在


(我以前没有在stackoverflow上发布过任何内容。如果我违反了大量的礼仪,请不要生气!)

看起来您已经将
path
minpath
定义为二维数组。与类C语言相比,Fortran对多维数组的访问方式有所不同。在Fortran中,在一组括号内用逗号分隔索引

通过使用这些变量,我猜它们是整数数组。下面是如何访问这些数组的元素(因为您没有共享变量声明,所以我正在创建这些数组的形状):

您的if声明应为:

if((check == 1) .and. (path(nodesin(j), k) < minpath)) then
minpaths(i, 1) = pathstart
minpaths(i, 2) = pathend

此外,如果您不使用<代码>隐式无/代码>,我建议您考虑一下。不使用它是危险的,而且您使用的变量名称彼此接近(

minpath
minpath
)。通过使用
IMPLICIT NONE

可以节省数小时的调试时间。看起来您已经将
path
minpath
定义为二维数组。与类C语言相比,Fortran对多维数组的访问方式有所不同。在Fortran中,在一组括号内用逗号分隔索引

通过使用这些变量,我猜它们是整数数组。下面是如何访问这些数组的元素(因为您没有共享变量声明,所以我正在创建这些数组的形状):

您的if声明应为:

if((check == 1) .and. (path(nodesin(j), k) < minpath)) then
minpaths(i, 1) = pathstart
minpaths(i, 2) = pathend

此外,如果您不使用<代码>隐式无/代码>,我建议您考虑一下。不使用它是危险的,而且您使用的变量名称彼此接近(

minpath
minpath
)。通过使用
IMPLICIT NONE

While.EQ,您可以节省数小时的调试时间。可以替换为==,仍然只有.和

对于检查“变量是否存在”的代码块,可以使用“where”并使用更短的代码

在Fortran中>=90语句和函数可以在数组上操作,因此显式循环不必如此频繁地使用

没有for(列表中的对象),但是使用where语句可以做一些非常类似的事情

许多作用于数组的内在函数也将掩码作为可选参数进行选择性操作


我建议读一本书来了解这些特性。我喜欢梅特卡夫、里德和科恩的作品。与此同时,维基百科的第二篇文章可能会有所帮助:

While.EQ。可以替换为==,仍然只有.和

对于检查“变量是否存在”的代码块,可以使用“where”并使用更短的代码

在Fortran中>=90语句和函数可以在数组上操作,因此显式循环不必如此频繁地使用

没有for(列表中的对象),但是使用where语句可以做一些非常类似的事情

许多作用于数组的内在函数也将掩码作为可选参数进行选择性操作


我建议读一本书来了解这些特性。我喜欢梅特卡夫、里德和科恩的作品。与此同时,维基百科的第二篇文章可能会有所帮助:

你能在Fortran中使用==吗?上次我用它时(Fortran 77-我知道从那时起世界已经改变了),你用的是。还有,中尉。等等我知道Fortran 90做了很多现代化工作,但我不知道它改变了什么。尝试使用.EQ、.LT、.LE、.NE、.GT、.GE。以及。和。、。或。。和。不是。看看这是否有帮助。经典的Fortran语言-但可能会起作用。这个站点:says==应该能起作用,而且,它能更高一些,如果我改变它,它只会将错误移到72.46。看起来这不是问题所在:-(你确定表达式“path(nodesin(j))(k)”?什么是“path”和“nodesin”?它们在代码中是如何定义的?如果“path”是访问其元素的二维数组,那么应该使用“path(i,j)”语法而不是“path(i)(j)”.check是布尔值吗?如果是,您需要使用.FALSE.或.TRUE.或它们的现代对应项吗?或者您可以使用1吗?因为消息抱怨“1”…仍然在黑暗中摸索。尽管您的针尖和草堆代码表明check是布尔值,并且“FALSE”和“TRUE”可能在1不起作用的情况下工作?您能在Fortran?La中使用==吗我第一次使用它(Fortran 77-我知道从那时起世界已经改变了)你使用了.EQ.和.LT.等等。我知道Fortran 90做了很多现代化的工作,但我不知道它发生了什么变化。试着使用.EQ、.LT、.LE、.NE、.GT、.GE.以及.and、.and、.OR、.and.NOT。看看这是否有帮助。经典的Fortran语言-但可能会起作用。这个网站说==应该起作用,而且,它能起到更高的作用,如果我改变的话ge it只是将错误移到了72.46。看起来这不是问题所在:-(你确定表达式“path(nodesin(j))(k)”?什么是“path”和“nodesin”?它们在代码中是如何定义的?如果“path”是访问其元素的二维数组,那么应该使用“path(i,j)”语法而不是“path(i)(j)”.check是布尔值吗?如果是,您是否需要使用.FALSE.或.TRUE.或其现代对应项?或者您是否可以使用1?因为消息抱怨“1”…仍然在黑暗中捕鱼。尽管如此
if((check == 1) .and. (path(nodesin(j), k) < minpath)) then
minpaths(i, 1) = pathstart
minpaths(i, 2) = pathend