• ベストアンサー

Do...Loopにつてご教授ください

Visual Basicの課題で、 3+3²+3³+・・・3n乗で、500から50000の間に入る数字は 何個あるか?を求めるアプリを作らなければいけないのですが、 Do...Loop構造の繰り返し処理が理解できていないために解答 することができません。 解答と考え方をご教授いただけば大変助かります。 どうぞよろしくお願いいたします。

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

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

背景には等比級数の和の式がある。公式もあるが、あえて先生はLOOP(繰り返し処理)の問題に持って行ったものだろう。 そして単純に3^nまでの和でなくて、少しひねって>500から50000の間に入る数字は、としたものと見える。 ここで500を超えた時のnを最終段階まで覚えておかないといけないが、それを仕組むためには、その超えて次の次の段階ではnを覚えておく変数に代入し(値を崩してしまわ)ないようにしないといけない。この技法の方が、プログラマ的には重要(よく出くわす)のを先生は知っているのかな。 これをスイッチ、(とかサイン、フラグ(3つとも通称))という技法でやってみた。使わない方法はあるのかな。 500を超えるまでと、50000を超える(この段階でプログラムを終了してよい)の2段階(2区分)に分ける方法もあると思う(Loopが2回出てくる)が、今回は前者でやってみた。 Sub test02() s = 0 '各項までの部分和 初期値として0 n = 1 '累乗の最初1 ovr500 = "N" '部分和が500超えず '--繰り返し部分 Do While s <= 50000 s = s + 3 ^ n MsgBox s If s > 500 Then If ovr500 = "N" Then from = n MsgBox "500超えのn " & n ovr500 = "Y" '超えたというフラグを立てる End If End If ’Range("F" & n) = s n = n + 1 '累乗値を1増やす,その後、繰り返し Loop '-- MsgBox "50000超えのn " & (n - 1) 'sが50000を超えるとここへ来るが、終了 '課題の数を計算 MsgBox (n - 1) - from '(10-1)-6 End Sub ーーー 確認のためやエクセルでやるなら エクセルでは A,B、C列 1 3 3 2 9 12 3 27 39 4 81 120 5 243 363 6 729 1092 7 2187 3279 8 6561 9840 9 19683 29523 10 59049 88572 A列は連番数字 B列の式 B1セルに =3^A1 と入れて下方向に式を複写 C列の式 C1セルに =SUM($B$1:B1) と入れて下方向に式を複写 結果は上記の通り。  視察で 9-6+1の4数(個)が該当。

twin-dragon
質問者

お礼

大変詳しく説明頂ありがとうございます。 助かりました。 少しは自分でも解けるようにがんばってみます。 ありがとうございました。

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 これで如何でしょうか? Sub QNo8976833_Do―Loopについてご教授ください() Dim n As Long Dim minN As Long Dim Sigma As Long Dim minSigma As Long Dim Answer As Long n = 0 Do n = n + 1 Sigma = Sigma + 3 ^ n If Sigma < 500 Then minN = n minSigma = Sigma End If Loop Until Sigma > 50000 Sigma = Sigma - 3 ^ n n = n - 1 Answer = n - minN minN = minN + 1 minSigma = minSigma + 3 ^ minN MsgBox "Σ=3+3^2+3^3+・・・3^n乗で、" & vbCrLf & "Σの値が500から50000の間に入る数字の個数は" & vbCrLf & _ " n=" & minN & " Σ=" & minSigma & vbCrLf & "   から" & vbCrLf & _ " n=" & n & " Σ=" & Sigma & vbCrLf & "   までの" & vbCrLf & Answer & "個です。" End Sub

twin-dragon
質問者

お礼

丁寧にご教示頂ありがとうございます。 類似する問題にもチャレンジしてみます。 ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

y = 0 x = 0 z = 3 n = 0 LLimit = 500 HLimit = 50000 Do Until y > HLimit n = n + 1 '乗数n If y >= LLimit Then x = x + 1 '解 y = y + z ^ n Loop

twin-dragon
質問者

お礼

早速の解答をありがとうございました。 毎回参考になります。 ありがとうございます。

関連するQ&A

  • Do..Loopステートメントの使い方について

    現在、入門書を画面で確認しながら ExcelVBAの勉強をしています。 Do...Loopで躓いてしまいました。 Do...Loopステートメントの種類は 条件を満たすまでループするもの Do Until...Loop(ループの前で条件判断) Do...Loop Until(ループの後で条件判断) 条件を満たす間はループするもの Do While...Loop(ループの前で条件判断) Do...Loop While(ループの後で条件判断) とあって、 例えば、A1からA7まで文字が入力されていて 空白のセルになるまで太文字にするとしたら、 ループの前に条件判断していると A1が空白だと処理はされず ループの後で条件判断すると A1が空白でも処理はされる とありました。 とすると、 条件判断はループ後にした方が良いと言う事なのでしょうか。 (空白でも処理してくれるので) 自分が処理したいものが ループ「後」にするのか又は ループ「前」にするのか どのように判断すれば良いのかと言うことと、 また、 条件を満たすUntil(まで)とWhile(間) どちらを使用すれば良いのかの判断方法もわかりません。 超初心者の質問内容で申し訳ありません。 VBAって面白いなぁと思い始めたところで なんとか理解したいので 教えていただけると大変助かります。 よろしくお願いします。

  • Do...Loopについてお伺いします

    Visual Basic初心者です。演習問題に、 「1+2+3...=n<100となる最大のnを求めるアプリ。」を作成しなさい。 といったものがあり、添付画像のようにプログラムしてみたのですが、1+2+3...=n>100となる最小のnは求められても最大のnの求め方がわかりません。どうぞご教授ください。よろしくお願いします。

  • Do Loop 構文で

    エクセルVBAのDo Loop 構文で以下のような場合はどのように表記すればいいでしょうか? 変数 N は1から始まり15回処理を行うと16に変わり、また15回処理を行う。その繰り返しで31、46、61・・・と増加していきます。 N の変化の表記だけ分かればいいです。 お願いします。

  • VB2005 Do Loopについて

    VB2005 でDo Loopを使用していますが、このDo Loop内の処理をしている時にイベント(例えばボタンをクリック)が発生した場合、その処理をしたいのですがどうすれば良いでしょうか? VB6の時は、DoEventsを使用していましたが、VB2005でも使用できるのでしょうか? ご存知の方がいらっしゃいましたら、教えて頂きたいのですが。 よろしくお願いします。

  • 2重のDo~Loopは?

    Excel VBAですが、A列にデータが入っています。 A列のデータが変わるまで 処理1 を実行し、変われば 処理2 を実行する。データがなくなれば終了する方法が分りません。宜しくお願いします。 i = 2 Do Until Cells(i, 1) = "" Do Until Cells(i, 1) <> Cells(i - 1, 1) 処理1 Loop 処理2 Loop

  • VBA Do…Loopについて

    お世話になっております。 ただいま、アクセスVBAにてDo…Loopの練習をしております。 テキストボックス1に数字を入れ、コマンドボタンを押すと入力した数字が1ずつ引かれる形でテキストボックス2に入るようにしたいです。 (テキストボックス1に「8」→テキストボックス2に「87654321」のように) Dim I As Variant I = Me.text1.Value Me.text2.Value = Me.text1.Value Do Until I = 1 I = I - 1 Me.text2.Value = Me.txt2.Value & I Loop で動作そのものはするのですが、doloop前の「Me.text2.Value = Me.text1.Value」を正さないといけないようです。(課題です) これがないと入力された数字そのものが入らなくなってしまうのですが… よろしくおねがいします。

  • VBA DO~LOOPのネスト方法について

    エクセルマクロの構文でDO~LOOPのネストを行った際に、EXIT DOで飛び出した後のLOOP条件が無効になるようです。どなたかご教授願います。 Sub TEST() y = 1 Do Do If y = 2 Then Exit Do End If y = y + 1 Loop Loop While y = 3 End Sub

  • Do ~ loop until [VBA]

    Do 命令文 Loop Until 条件式 について質問なのですが、条件式には複数の条件を指定することは出来るのでしょうか? 例えば、変数mが100より大きく、変数nと同じでない、という2つの条件を指定したいときは Loop Until m >= 100 and m <> n もしくは Loop Until m >= 100 and <> n でしょうか? また、上記の様な条件式でOKだとしたら、andで結べる条件に制限数はありますか? よろしくお願いします。

  • マクロのプログラミングで Do Loopステートメントです

    明後日学校の情報の授業でエクセルのマクロを使ってプログラミングするんですが語句について教えてください エクセルのマクロなんですが Do Loopスタートメントって言うのをやります そこでコマンドの意味を教えてほしいんです 明後日なんでなるべく早くお願いします 今回のコマンド(と、バリエーション)って書いてあります 1) dim i as→ 2) Do While 条件式 処理 Loop 3) Do Until 条件式 処理 Loop 4) i=i+1 5)Integer この5つです お願いしますm(_ _)m

  • Loop で文字を回すやり方

    Rubyで 数字を下記のようなやり方では1~12 までの数字をまわせますが、 #ソース n=1 loop do puts n if n == 12 break end n += 1 end 実行結果↓ 1 2 3 4 5 6 7 8 9 10 11 12 このような形で アルファベットの a ~z を順番にまわしたい場合は、どのように書くことができますでしょうか? 試行錯誤で試しましたが、うまくいかなかったので、 教えてくださいよろしくお願いします。

    • ベストアンサー
    • Ruby

専門家に質問してみよう