【お題】王手、そして

初心者なんでなかなか上手くプログラムが組めません。

例えば
x(i,j)、t(i,j)の配列があって、i=1,m、j=1,nまでだとします。
このとき
dxdt=(x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)
とdxdtを定義します。
このdxdtが正で最小になるときのx(○,○)の○に入る配列番号を知りたい場合にはどうすればいいでしょうか?
教えてください!

具体的な例題として
m=10
n=10(mとnは常に同じとする)
dxdt=(x(10,1)-x(9,2))/(t(10,1)-t(9,2))
=-2
dxdt=(x(9,2)-x(8,3))/(t(9,2)-t(8,3))
=-1
dxdt=(x(8,3)-x(7,4))/(t(8,3)-t(7,4))
=-0.5
dxdt=(x(7,4)-x(6,5))/(t(7,4)-t(6,5))
=0.5
dxdt=(x(6,5)-x(5,6))/(t(6,5)-t(5,6))
=1
dxdt=(x(5,6)-x(4,7))/(t(5,6)-t(4,7))
=2
dxdt=(x(4,7)-x(3,8))/(t(4,7)-t(3,8))
=3
dxdt=(x(3,8)-x(2,9))/(t(3,8)-t(2,9))
=4
dxdt=(x(2,9)-x(1,10))/(t(2,9)-t(1,10))
=5
このときdxdtが正で最小なのは0.5となります。
このときの知りたい配列番号は(i,j)=(7,4)です。
これを知るにはどうすればいいでしょうか?
最小値MINやIFを使うのかなど考えたのですが、行き詰まっています。
分かりやすくお願いします。

A 回答 (5件)

< Maxとかを定義している文と解釈してよろしいでしょうか? >



はい、そうです。

< 僕の質問にある例題の(i,j)がでるのですか >

例; 代用するとかえってごちゃごちゃするのだけど 解んないの??。
For i = 1 To 10

For j = 1 To 10


If =(x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)>= Max Then
Max = =(x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)
Y = j 'ここが、ポイントです。
ElseIf =(x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1) <= Min then
Min = =(x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)
X = j 'ここが、ポイントです。
End If

Next j
Next i
    • good
    • 0
この回答へのお礼

わかりやすく回答いただきましてありがとうございます。
チャレンジしてみます!

お礼日時:2007/05/21 10:26

< 初心者なんでなかなか上手くプログラムが組めません。

>
なら、下記を参考にゼロから勉強して 基礎を学んでください。

1.FORTRANプログラミング初級編・・・どとらかと言うと超初心者向けです。 多分あなた向けです。
http://svr01.damp.tottori-u.ac.jp/~akimoto/Fortr …

2.初心者のためのFortran入門

http://homepage.mac.com/galois21/fortran/

3.Fortran プログラミングの基礎知識 
http://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/ …
    • good
    • 0
この回答へのお礼

何度も回答いただきありがとうございました!
頑張って勉強します!

お礼日時:2007/05/21 10:28

例; 代用するとかえってごちゃごちゃするのだけど 解んないの??。


For i = 1 To 10

For j = 1 To 10


If  (x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)>= Max Then
Max =(x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)
Y = j 'ここが、ポイントです。
ElseIf (x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1) <= Min then
Min = (x(m-j+1,j)-x(m-j,j+1))/(t(m-j+1,j)-t(m-j,j+1)
X = j 'ここが、ポイントです。
End If

Next j
Next i
    • good
    • 0

追加です。


Max の部分は、myMax でも AAbbcc でも 自分が解れば、なんでも
良いですよ。

但し FORTRAN は、実数を宣言する場合は、先頭文字は    H,I,J,K,L,M,N 以外を使用しなければ、ならないので注意すること。
    • good
    • 0
この回答へのお礼

わかりました!
ありがとうございます!

お礼日時:2007/05/21 10:27

下記は、簡単な例です。


下記コードを実行すると
 Yには、Max値が、得られたときの Jの値が、
Xには、Min値が、得られたときの Jの値が
それぞれ入ります。
これを、応用してください。


Sub test()

Dim Max As Variant
Dim Min As Variant
Dim Y As Integer
Dim X As Integer
Dim Data(10) As Variant

Max = 0
Min = 9999
Y = 0
X = 0

Data(1) = 100
Data(2) = 5
Data(3) = 2
Data(4) = 3.5
Data(5) = 80
Data(6) = 6
Data(7) = 41
Data(8) = 2.8
Data(9) = -10
Data(10) = -5


For j = 1 To 10

If Data(j) >= Max Then
Max = Data(j)
Y = j 'ここが、ポイントです。
ElseIf Data(j) <= Min Then
Min = Data(j)
X = j 'ここが、ポイントです。
End If

Next j
End Sub

この回答への補足

返答ありがとうございます。

この回答について質問なんですが、
まず、最初の6行
Sub test()

Dim Max As Variant
Dim Min As Variant
Dim Y As Integer
Dim X As Integer
Dim Data(10) As Variant
はただ、Maxとかを定義している文と解釈してよろしいでしょうか?

次に、この例の場合だと
Max=100
Y=1
Min=-10
X=9
となるのでしょうか?
また、Nextjというのは次のjに行けということですよね。
何分、分からないことが多くてもうしわけありません。
また、これをどう応用すれば、僕の質問にある例題の(i,j)がでるのですか?

補足日時:2007/05/19 14:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報