2017-05-22 1 views
1

ループのこの比較的一般的なタイプを書いて、より簡潔な方法は、インデックスの定義に入るがなければ、比較的一般的なループを書くより簡潔な方法をお探しですか?

70 M=NTOC-N 
    L=0 
    DO 100 I=M,NTOC 
    L=L+1 
    X(L)=XI(I) 
100 Y(L)=YI(I) 

あり、何それがないことは、それがコピーの配列XIの内容で、インデックスからYI MNTOC配列X、Yインデックス1〜...(NTOC-M)...必要な数。

いくつかの古いコードを再構築しながら、私は、ループのこの種の大規模な数を持っていた気づいた、と私はおそらく一度に良く知りませんでしたが、私はを思っていたことは、今執筆のより簡潔な方法がありますこれはコードの読みやすさ/可読性を補うためのものですか?多くの場合、ループに依存しますが、現在ではFortranはあらゆる種類の配列操作をサポートしていることを知っていますので、誰かが見分けやすい方法を知っていれば、すべての提案に非常に感謝します。仮定n

+4

によって削除されないことに注意してください 'X(1:N + 1)= xi(ntoc-n:ntoc) '? – francescalus

+0

@francescalus - まさにそれ。とても有難い。 あなたが回答として回答したら、私はそれを受け入れます。 – Rook

答えて

2

ループiかけ値をとり、正でmm+1、...、ntocので、選択されたxiの要素は、順序、xi(m)xi(m+1)、...、xi(ntoc)インチyiの要素は似ています。

アレイセクションに関しては、xi(m:ntoc)は同じ要素の選択を表します。

同様に、左側のxの要素はx(1)x(2)、...、x(ntoc-m+1)(= x(n+1))です。配列セクションとして、x(1:n+1)は同じ要素を表します。

意味:

x(1:n+1)=xi(ntoc-n:ntoc) ! Replacing m with its value 
y(1:n+1)=yi(ntoc-n:ntoc) 

そして境界がxyある場合は1n+1あり、又はアレイが割り当て可能であり、次いで、全体アレイxyは左辺に使用することができます。

n 0または負の場合、配列セクションはループと同じ要素(1つまたはなし)を安全に選択します。

あなたがそのフラグメントの外ilを使用するつもりなら、あなたはもちろん、手動でそれらを設定する必要があります(とintoc+1を取ることを忘れていません)。あなたはより多くのインセンティブは、そのループを取り除きたい場合は

最後に、非ブロックは、このような構築物はあなたが好きな意味のFortran 2015

関連する問題