0

ねえ、私はこれ(fortran)を、一連のポイント(それらのsyscount)の最小スパニングツリーを見つけることを目的として作成しました。今日の初めにjavascriptで書いたので、このアプローチが機能することを知っています。jsは遅いですが、Fortranがどれだけ速くなるかを見たかったのです!! 唯一の問題は、それが機能していないことです。迷惑なエラーが発生します。

prims.f95:72.43:

if((check == 1).and。(path(nodesin(j))(k)<minpath))then

                                 1

エラー:(1)の式に右括弧が必要です

一体何なの?行の43番目の文字は「パス」の「h」です

nodesin(1) = 1

do i = 1,syscount-1
    pathstart = -1
    pathend = -1
    minpath = 2000

    do j = 1,i
        do k = 1, syscount

            check = 1
            do l = 1, i
                if(nodesin(l) == k) then
                    check = 0
                end if
            end do

            if((check == 1) .and. (path(nodesin(j))(k) < minpath)) then
                minpath = path(nodesin(j))(k)
                pathstart = nodesin(j)
                pathend = k
            end if

        end do
    end do

    nodesin(i+1) = pathend
    minpaths(i)(1) = pathstart
    minpaths(i)(2) = pathend

end do

また、私はFortranにかなり慣れていないので、他にもいくつか質問があります。

.andの代わりに&&を使用できますか。?

他の多くの言語で見つかったfor(object in list){}ループのバージョンはありますか?

php関数in_arrayのバージョンはありますか?つまり、bool in_array(needle、haystack)であり、存在する場合は、次の方法よりも優れた方法があります。

check = false
Asize = size(array)
do i = 1, Asize
    if(array(i) == needle) then
        check = true
    end if
end do

次に、チェック変数を使用して、そこにあるかどうかを確認しますか?

(私はこれまでstackoverflowに何も投稿していません。エチケットをたくさん壊したとしても、怒らないでください!)

4

2 に答える 2

3

2次元配列として定義pathしたようです。minpaths多次元配列は、Cのような言語と比較した場合、Fortranでは異なる方法でアクセスされます。Fortranでは、1セットの括弧内でインデックスをコンマで区切ります。

これらの変数を使用すると、整数配列であると推測しています。これらの配列の要素にアクセスする方法は次のとおりです(変数宣言を共有していなかったため、これらの配列の形状を作成しています)。

integer :: path(n1, n2)
integer :: minpaths(n3, 2)

ifステートメントは次のようになります。

if((check == 1) .and. (path(nodesin(j), k) < minpath)) then

minpathsへのアクセスは次のようになります。

minpaths(i, 1) = pathstart
minpaths(i, 2) = pathend

また、使用していない場合はIMPLICIT NONE検討することをお勧めします。使用しないのは危険であり、互いに近い変数名(minpathおよびminpaths)を使用しています。を使用すると、ヘアプルのデバッグにかかる​​時間を節約できますIMPLICIT NONE

于 2010-08-27T15:34:43.617 に答える
1

.EQ。==に置き換えることができますが、まだ.ANDしかありません。

コードブロックで「変数が存在する」かどうかを確認するには、「where」を使用してコードを大幅に短縮できます。

Fortran> = 90では、ステートメントと関数は配列を操作できるため、明示的なループを頻繁に使用する必要はありません。

for(リスト内のオブジェクト)はありませんが、whereステートメントを使用すると非常によく似たことができます。

配列に作用する組み込み関数の多くは、選択的に動作するためのオプションの引数としてマスクも取ります。

これらの機能について学ぶために本を読むことをお勧めします。Metcalf、Reid、Cohenの作品が好きです。それまでの間、2番目のウィキペディアの記事が役立つかもしれません:http://en.wikipedia.org/wiki/Fortran_95_language_features

于 2010-08-27T15:36:21.803 に答える