• ベストアンサー

変数

変数nで検索してなければn+1でさがす。更に無ければn-1で探すの繰り返しをプラスマイナス4まで検索したいときの書き方がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Raistlin
  • ベストアンサー率63% (65/102)
回答No.3

私が思う美しいコードはVBAだとこんな感じです。 (整形用に行頭スペースは全角にしています) Sub INSPCTNRNG() Const StrtNum As Long = 4 '検査を開始する要素番号(=n) Const InsRng As Long = 4 '検査をする範囲(=+/-いくつまで検索するか) Const TrgtVl As Variant = -4 '目的の値 Dim i As Long 'ループカウンタ Dim flgFnd '目的の値が見つかったかどうか flgFnd = False i = 0 TrgtArry = Array(-4, -3, -2, -1, 0, 1, 2, 3, 4) 'テスト用変数の作成 Do While Abs(i) <= InsRng ' MsgBox "変数(" & StrtNum & ADDPSGN(i) & ") = " & TrgtArry(StrtNum + i) 'デバッグ用   If TrgtArry(StrtNum + i) = TrgtVl Then     flgFnd = True     Exit Do   End If   If Sgn(i) > 0 Then     i = i * (-1)   Else     i = Abs(i) + 1   End If Loop If flgFnd Then ' MsgBox "変数(" & StrtNum & ADDPSGN(i) & ")で目的の値" & TrgtVl & "が見つかりました" 'デバッグ用   MsgBox "目的の値が見つかりました" Else   MsgBox "目的の値が見つかりませんでした" End If End Sub 'デバッグ用関数 'Function ADDPSGN(TV) ' If Sgn(TV) >= 0 Then ' ADDPSGN = "+" & TV ' Else ' ADDPSGN = TV ' End If 'End Function

chunyan
質問者

お礼

ありがとうございます。参考になりました。若干違いますが、うまく組むことが出来ました!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

変数って文字列変数もあるのでは。だから、質問の変数は数値変数か。 プラスマイナス4までの合計9の数のうち、湯銭順位があるような質問の書き方なので x=Array(0,1,-1,2,-2,3,-3,4,-4) を定義して、 For i=0 To Ubound(x) n+x(i)で検索 見つかれば検索打ち切り、見つかった処理 なければ next i 見つからないと決定、その処理 ーー のように検索すればよいのでは。 質問の意味がもうひとつ良くわからないが。

  • PPancho
  • ベストアンサー率27% (26/96)
回答No.1

検索方法が書いていないので、それは分かっている前提で考えて 見ました。 Private Sub Find_Logic_Sample()   Dim intLoopCnt As Integer  'ループカウンタ   Dim strFindFlag As Integer '見つかった時のフラグ   Dim intN As Integer     '変数の型は任意   Dim intSerchNo As Integer  '変数の型は任意      '変数を初期化   strFindFlag = ""      'ループ処理   For intLoopCnt = 0 To 4     'N+intLoopCntの場合     intSerchNo = intN + intLoopCnt     intSerchNoで検索     If 見つかったら Then       strFindFlag = "Y"       Exit For 'ループを抜ける     End If          If intLoopCnt = 0 Then       'intSerchNo = intN - 0 のケースは上と同じ無視     Else       intSerchNo = intN - intLoopCnt       intSerchNoで検索         If 見つかったら Then         strFindFlag = "Y"         Exit For  'ループを抜ける       End If     End If   Next intLoopCnt      If strFindFlag <> "Y" Then   'N-4 -> N -> N+4に該当なし    エラー処理     End If End Sub =============== 注)  If intLoopCnt = 0 Then     elseは     if intLoopCnt <> 0 Thenでもかまいません。 注2) 検索するものの値範囲により変数の型をIntegerから     変更してください。

関連するQ&A

  • 確率変数について

    {X_n} (n=1,2,...)を確率変数列としたとき、sup_n X_nもまた確率変数である。 というのを示すのに、手元にある教科書では 任意のa∈Rに対して、 {sup_n X_n(ω)≦a}=∩_n{X_n(ω)≦a} と示しています。この等式は明らかに成り立つのですか?

  • 確率変数Xnで定義されるYnはやはり確率変数でしょうか?

    確率変数Xnで定義されるYnはやはり確率変数でしょうか? お手数を掛けてすみませんが、教えてください。 以下が問題です、最後の部分で確率変数の定義が引っ掛かります。 「独立な確率変数の列{Xn}において、Xnの平均値をμ、分散をσ^2,(n=1,2,…) とした場合、 Yn = 1/n ?[k=1 n]Xk-μが恒等的に0に確率収束すると示せ」 1/n?[k=1 n]Xk の平均値、E(1/n ?[k=1 n]Xk)=μ 1/n?[k=1 n]Xk の分散が、σ^2(1/n ?[k=1 n]Xk)=σ^2/n となりますので、1/n?[k=1 n]Xkに関するチェビシェフの不等式に代入しますと、 p(|1/n ?[k=1 n]Xk-μ|<ε)>=1-(1/ε・σ^2/n) つまり、p(|Yn|<ε)>=1-(1/ε・σ^2/n) ※0<ε lim[n→∞]p(|Yn|<ε)>=1-(1/ε・σ^2/n) lim[n→∞]p(|Yn|<ε)>=1 確率の性質より lim[n→∞]p(|Yn|<ε)=1 ∴Ynは常に0以下であって、”Ynが確率変数であるならば”、恒等的に0に確率収束すると 示せるのですが… どうなのでしょう?

  • n変数論理関数

    n変数論理関数の総数が2^2^n個である理由って なんて答えればいいのでしょうか?

  • バッチプログラムで変数の参照について

    Windowsバッチでの話ですが、 set file1=aaa set file2=bbb set n=1 としておき、"file1"にセットした変数の値を、"1"の部分を変数nを使用して参照したいのですがどうすればいいのでしょうか? echo %file%n%% のような感じでできると思ったのですができなかったもので。。  for文の中でnを増やしていきセットした全ての変数を参照したいと思っています。 以上よろしくお願いします。

  • shellで$入り変数に値を代入する方法

    shellで、変数への代入処理で困っています。 下記サンプルソースのように代入する変数自体にfor文で使用している変数が含められるようにしたいのですが、下記の通りだと実行できません。 うまく意図通りに動かす方法はございませんでしょうか? ---------------------------------------------------------------- #!/bin/sh #変数初期化 n00=0 n01=1 n02=2 n03=3 n04=4 #メインルーチン for i in 00 01 02 03 04 ; do temp=`eval echo '$'"n"${i}` #変数値をtempに格納 n${i}=`expr ${temp}+1` #各変数の値を+1する。 n${i}の部分をどのようにすればよいか不明 done ---------------------------------------------------------------- # 望ましい結果 echo ${n00} -> 1 echo ${n01} -> 2 : ※制約事項 ・ shのみ使用可能で、ksh,csh.bashは使用不可 ・ n[0]=0,n[1]=1・・・というように配列の使用は無し

  • ACCESSの変数で

    超初心者です。お世話になります。 VBAの変数について教えて下さい。 例えば変数1~変数10まであるとします。 そこに氏名1~氏名20までを代入します。 そのとき、一つずつしていると、効率が悪いので、 For Next を使いたいと思います。 For  繰り返し = 1 to 10 で、変数の数字の部分を繰り返しで増やしていこうと思ったのですが、 "変数"と"繰り返し"のくっつけ方がどうも上手くできません。 どのようにしたらよいのでしょうか? あと、このように、Me.○○の部分も変数と変数をくっつけたいのですが、無謀でしょうか? わかりにくい説明で申し訳ありませんが、よろしくお願い致します。 

  • 変数分離?

    ある放射性物質のt=0における放射能の強さをN。、時刻tにおける強さをNで表す。放射能の強さを減少する速さdN/dtは、そのときの強さNに比例する。 (1)Nをtの関数で表せ。 (2)5年後に最初の強さN。の1/10になったとすると、強さが1/2N。となるのは何年後か。ただしlog10の2=0.301 という問題なんですけど、解けなくて困ってます。 (1)は、dN/dt=-ktとして変数分離形にしてみたらN=ae^-ktになったんですけど、あってるのかどうか...。 どなたか教えて下さい!!お願いします!

  • VBAのコントロールを変数に

    TextBox1~10というのをFor n=1 to 10 TextBox(n)="OK WEB" Next としても動きませんよね。TextBox1やComboBox8など数字のところを変数にするにはどのように記述すれば良いのでしょうか

  • クラス変数について質問

    Javaのオブジェクト指向を解説した参考書で現在勉強しているのですが、その参考書のある問題の答えの解説として「クラス変数は参照変数なので参照以外を代入できません」と書いてありました。 でも、例えば、static int n=0と書けば、0をnに代入できます。 因みに、「クラス型の変数」は参照しか代入できないのはわかっています。 よって「クラス変数」は誤植で、正しくは「クラス型変数」なのでしょうか?

    • ベストアンサー
    • Java
  • 変数のデータに改行コードのみを削除したい

    変数のデータに改行コードのみを削除したい 変数のデータに改行コードのみを削除したいと思っておりますがうまくできません。 $samのデータに以下の内容でデータがはいってます。 (ここから) これはテストです。<br>\n <br>\n これはテストです。<br>\n <br>\n <br>\n これはテストです。<br>\n これはテストです。<br>\n (ここまで) $sam=~ s/<br>\n//g; だと本来改行コードがほしい内容まで削除してしまいます。 以下の内容もおかしいと思いますが、うまく出来ませんでした。 $sam=~ s/.*?<br>\n//g; この内容の場合改行コードが欲しい。それ以外は削除したい。 タグの除去は以下のサイトを検索で見つけたのですが、ちょっと違うかなと思い質問させていただきました。 HTMLタグを取り除く http://www.nishishi.com/perltips/string4.html 以上、よろしくご指導賜りたく思います。

    • ベストアンサー
    • Perl