Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
C++ 将c for循环转换为fortran do循环_C++_Loops_Fortran - Fatal编程技术网

C++ 将c for循环转换为fortran do循环

C++ 将c for循环转换为fortran do循环,c++,loops,fortran,C++,Loops,Fortran,我正在将一个cpp程序(来自另一个作者)转换为Fortran程序,我的C不是很强。我遇到了从 for (int n = 1; 1; ++n) { ... 我本以为这会转换成Fortran Do Do n=1, 1, 2 ... 。。。至少这是基于我对++n的理解而做出的猜测 我的翻译正确吗?如果是这样,循环将最多循环一次,那么我遗漏了什么 我知道在某些方面,c for循环有一个“do while”方面,因此需要移植到Fortran do 无论如何。。。如能澄清,将不胜感激 编辑:在一些迅速的

我正在将一个cpp程序(来自另一个作者)转换为Fortran程序,我的C不是很强。我遇到了从

for (int n = 1; 1; ++n) {
...
我本以为这会转换成Fortran Do

Do n=1, 1, 2
...
。。。至少这是基于我对++n的理解而做出的猜测

我的翻译正确吗?如果是这样,循环将最多循环一次,那么我遗漏了什么

我知道在某些方面,c for循环有一个“do while”方面,因此需要移植到Fortran do

无论如何。。。如能澄清,将不胜感激

编辑:在一些迅速的回应之后,我想我明白这是怎么回事了

首先,准确的C代码复制/粘贴,但“修剪”一点,是

    for (int n = 1; 1; ++n) {
      const double coef = exp(-a2*(n*n)) * expx2 / (a2*(n*n) + y*y);
      prod2ax *= exp2ax;
      prodm2ax *= expm2ax;
      sum1 += coef;
      sum2 += coef * prodm2ax;
      sum4 += (coef * prodm2ax) * (a*n);
      sum3 += coef * prod2ax;
      sum5 += (coef * prod2ax) * (a*n);
      // test convergence via sum5, since this sum has the slowest decay
      if ((coef * prod2ax) * (a*n) < relerr * sum5) break;
    }
但作为一个老式的人,我可能会使用一个带有“限制”的结构,比如

对于稍微有点花哨的应用程序,我可能会包括一个返回标志,以防它在MaxIter等中不收敛

for (int n = 1; 1; ++n)
是否:

它将
n
设置为1,然后无限循环,在每次循环迭代结束时将
n
增加1。循环永远不会终止,除非循环中发生了什么

我已经很久没有写Fortran了,但我记得您将它翻译成的
do
循环是不正确的

这是你想要的

for (int n = 1; 1; ++n)
是否:

它将
n
设置为1,然后无限循环,在每次循环迭代结束时将
n
增加1。循环永远不会终止,除非循环中发生了什么


我已经很久没有写Fortran了,但我记得您将它翻译成的
do
循环是不正确的

我认为你无法翻译

for (int n = 1; 1; ++n)
到FORTRAN DO循环。据我回忆,C/C++中泛型条件的概念无法在FORTRAN DO循环中模拟

相当于

Do n=1, 1, 2
在C/C++中是

for ( int n = 1; n <= 1; n += 2 ) 

(int n=1;n我认为你不能翻译

for (int n = 1; 1; ++n)
我记得,C/C++中泛型条件的概念不能在FORTRAN DO循环中模拟

相当于

Do n=1, 1, 2
在C/C++中是

for ( int n = 1; n <= 1; n += 2 ) 

for(int n=1;n您确定正确编写了C代码吗?C/C++中的循环通常是这样完成的:

for (int n = 1; n < 10; ++n) {
    // ...
}

是否确实正确编写了C代码?C/C++中的循环通常是这样完成的:

for (int n = 1; n < 10; ++n) {
    // ...
}

除了CareyGregory的答案之外,还有一些注释

++n
表示“将n增加1(在计算n之前)”

<>在C和C++中,<<代码> < /COD>循环有三个子句,很像FORTRAN:

for (init; condition; increment)
不同之处在于,每个子句都必须是一个完整的表达式,而在FORTRAN中,子句只是值。这只是编写等价的
while
循环的一种“简短”方式:

int n = 1;          │ for (int n = 1; 1; ++n)    │ n = 1
while (1)           │ {                          │ do 
{                   │   ...                      │   ...
  ...               │ }                          │   n = n + 1
  ++n;              │                            │ enddo
}                   │                            │

除了CareyGregory的答案之外,还有一些注释

++n
表示“将n增加1(在计算n之前)”

<>在C和C++中,<<代码> < /COD>循环有三个子句,很像FORTRAN:

for (init; condition; increment)
不同之处在于,每个子句都必须是一个完整的表达式,而在FORTRAN中,子句只是值。这只是编写等价的
while
循环的一种“简短”方式:

int n = 1;          │ for (int n = 1; 1; ++n)    │ n = 1
while (1)           │ {                          │ do 
{                   │   ...                      │   ...
  ...               │ }                          │   n = n + 1
  ++n;              │                            │ enddo
}                   │                            │

不知道C++程序是如何从该循环中解脱出来的,但一个简单的FORTRAN等价式是

是很难确定的。
n = 1
do
    ! code, including an exit under some condition, presumably on the value of n
    n = n+1
end do
如果循环在
n
达到临界值时终止,则等效值可能为

do n = 1, critical_value  ! no need to indicate step size if it is 1
    ! code
end do

不知道C++程序是如何从该循环中解脱出来的,但一个简单的FORTRAN等价式是

是很难确定的。
n = 1
do
    ! code, including an exit under some condition, presumably on the value of n
    n = n+1
end do
如果循环在
n
达到临界值时终止,则等效值可能为

do n = 1, critical_value  ! no need to indicate step size if it is 1
    ! code
end do

好的,那么
do-while(.TRUE.)
?回答要点,我已经编辑了我的回答。这里的大图不是如何在FORTRAN中为
循环执行
,而是OP显示的C循环不是典型的C
FOR()
循环。好的,那么
do-while(.TRUE)
?我已经回答了问题,我已经编辑了我的回答。这里的大图不是如何在FORTRAN中为
循环执行
,而是OP显示的C循环不是典型的C
FOR()< C++ > C++ C++,11代码,fortran,fortran,fortran,fortran,fortr95,fortr2005,其中C++(C++)?btw,为什么转换它?调用FORTRAN的C++代码可能比转换它更简单!