by omasu » 2005年9月19日(月) 11:50
お世話になります。
マティーさんのメッセージは承知しておりました。
「自分のしたいことでは変数は3つではありません。」
が、変数が少数という判断でサンプルを投稿しました。
数万個の配列変数の最小値を求める方法はスタンダードに存在するため、
あえて、投稿はしませんでした。
とりあえず、基本的な使い方も乗せておきます。
コード: 全て選択
#prompt ' #include <basic\prompt.sbp> , #N88BASIC でも可
'
Dim DataTbl[1000] As Long
Dim i As Long,P As Long
'
For i=0 To 1000
DataTbl=Int(Rnd()*90000)+10000 ' 5桁の乱数発生
Next i
'
MinSearch(0,1000) ' プロシージャ呼び出し
Print P;"番目の";DataTbl[P];"が一番最初に見つかった小さい数値です。"
'
Sub MinSearch(ByVal S As Long,ByVal E As Long) ' 最小値検索プロシージャ
P=S
For i=S To E
If DataTbl(P)>DataTbl(i) Then
P=i
EndIf
Next i
End Sub
'05/09/19 16:55 表記に変更があります。
しかし、データが変数で、数個であるならば、
コード: 全て選択
#prompt ' #include <basic\prompt.sbp> , #N88BASIC でも可
'
Dim a As Long,b As Long,c As Long,d As Long,e As Long
Dim kotae As Long
Dim q As Long
'
Do
a=Int(Rnd()*99)+100
b=Int(Rnd()*99)+100
c=Int(Rnd()*99)+100
d=Int(Rnd()*99)+100
e=Int(Rnd()*99)+100
Print "a=";a,"b=";b,"c=";c,"d=";d,"e=";e
'
'大小比較(変数5つの場合)
'
kotae=5 ' 答えは配列の数
Select Case kotae
Case Sgn(a-a+1)+Sgn(b-a+1)+Sgn(c-a+1)+Sgn(d-a+1)+Sgn(e-a+1)
GoSub *a-rtn
Case Sgn(a-b+1)+Sgn(b-b+1)+Sgn(c-b+1)+Sgn(d-b+1)+Sgn(e-b+1)
GoSub *b-rtn
Case Sgn(a-c+1)+Sgn(b-c+1)+Sgn(c-c+1)+Sgn(d-c+1)+Sgn(e-c+1)
GoSub *c-rtn
Case Sgn(a-d+1)+Sgn(b-d+1)+Sgn(c-d+1)+Sgn(d-d+1)+Sgn(e-d+1)
GoSub *d-rtn
Case Else
GoSub *e-rtn
End Select
Print
Print"9=終了";
Input q
Print
Loop Until q=9
End
'
*a-rtn
Print"aがちいさい"
Return
'
*b-rtn
Print"bがちいさい"
Return
'
*c-rtn
Print"cがちいさい"
Return
'
*d-rtn
Print"dがちいさい"
Return
'
*e-rtn
Print"eがちいさい"
Return
'05/09/19 13:26 実用的なコードに変更しました。
'05/09/20 20:53 最小値が2個以上ある場合に対応しました。(最初の数値を表示),変数の追加を楽にしました。
という、記述法もあります、といいたかったのです。
追伸:マティーさんのホームページを拝見・回遊しておりました。
すばらしいの一言です。
お世話になります。
マティーさんのメッセージは承知しておりました。
「自分のしたいことでは変数は3つではありません。」
が、変数が少数という判断でサンプルを投稿しました。
数万個の配列変数の最小値を求める方法はスタンダードに存在するため、
あえて、投稿はしませんでした。
とりあえず、基本的な使い方も乗せておきます。
[code]#prompt ' #include <basic\prompt.sbp> , #N88BASIC でも可
'
Dim DataTbl[1000] As Long
Dim i As Long,P As Long
'
For i=0 To 1000
DataTbl[i]=Int(Rnd()*90000)+10000 ' 5桁の乱数発生
Next i
'
MinSearch(0,1000) ' プロシージャ呼び出し
Print P;"番目の";DataTbl[P];"が一番最初に見つかった小さい数値です。"
'
Sub MinSearch(ByVal S As Long,ByVal E As Long) ' 最小値検索プロシージャ
P=S
For i=S To E
If DataTbl(P)>DataTbl(i) Then
P=i
EndIf
Next i
End Sub[/code]
[color=red] '05/09/19 16:55 表記に変更があります。[/color]
しかし、データが変数で、数個であるならば、
[code]#prompt ' #include <basic\prompt.sbp> , #N88BASIC でも可
'
Dim a As Long,b As Long,c As Long,d As Long,e As Long
Dim kotae As Long
Dim q As Long
'
Do
a=Int(Rnd()*99)+100
b=Int(Rnd()*99)+100
c=Int(Rnd()*99)+100
d=Int(Rnd()*99)+100
e=Int(Rnd()*99)+100
Print "a=";a,"b=";b,"c=";c,"d=";d,"e=";e
'
'大小比較(変数5つの場合)
'
kotae=5 ' 答えは配列の数
Select Case kotae
Case Sgn(a-a+1)+Sgn(b-a+1)+Sgn(c-a+1)+Sgn(d-a+1)+Sgn(e-a+1)
GoSub *a-rtn
Case Sgn(a-b+1)+Sgn(b-b+1)+Sgn(c-b+1)+Sgn(d-b+1)+Sgn(e-b+1)
GoSub *b-rtn
Case Sgn(a-c+1)+Sgn(b-c+1)+Sgn(c-c+1)+Sgn(d-c+1)+Sgn(e-c+1)
GoSub *c-rtn
Case Sgn(a-d+1)+Sgn(b-d+1)+Sgn(c-d+1)+Sgn(d-d+1)+Sgn(e-d+1)
GoSub *d-rtn
Case Else
GoSub *e-rtn
End Select
Print
Print"9=終了";
Input q
Print
Loop Until q=9
End
'
*a-rtn
Print"aがちいさい"
Return
'
*b-rtn
Print"bがちいさい"
Return
'
*c-rtn
Print"cがちいさい"
Return
'
*d-rtn
Print"dがちいさい"
Return
'
*e-rtn
Print"eがちいさい"
Return
[/code]
[color=red] '05/09/19 13:26 実用的なコードに変更しました。[/color]
[color=red] '05/09/20 20:53 最小値が2個以上ある場合に対応しました。(最初の数値を表示),変数の追加を楽にしました。[/color]
という、記述法もあります、といいたかったのです。
追伸:マティーさんのホームページを拝見・回遊しておりました。
すばらしいの一言です。