• ベストアンサー

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

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

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

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

>Do...Loopについてお 1づつ加える(自然)数を順次増やしていくという、ロジックにおいての質問でしょう。 >1+2+3...=の値はnが増えるにつれて、「単調増加」していくことはわかりますよね。 Snはnまでの自然数の和として s1<s2<s3<.... だから100を初めて超えたnのnー1(直前に足した数)が答えになる。直前に足した数を変数に毎度覚えておくか(これは回りくどい)、超えたところで、nに対し-1すればよいのでは。 前判定do loopより後判定do Loop・・whileのほうが書きやすい。しかし先生の指定があるなら仕方がないが。 ーー エクセルVBAでの例。 Sub test01() s = 0 n = 0 Do While s < 100 n = n + 1 s = s + n Loop 'loopを脱出した MsgBox "loopを脱出した加数" & n MsgBox "答えは" & n - 1 End Sub ーー 小生なら下記を書いてしまう。 Sub test02() n = 1 s = 0 For n = 1 To 100 s = s + n If s > 100 Then Exit For Next n MsgBox n - 1 End Sub (注)If s > 100 は等しいとすべきか、超えるとすべきかよく設問の趣旨に従ってください。

twin-dragon
質問者

お礼

早速の解答ありがとうございました。 考え方までご教示頂いたおかげで理解できました。 ありがとうございます。

その他の回答 (3)

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

1+2+3・・・+n=n×(n+1)/2 なのですから、 1+2+3・・・+n<100 という事は 100>1+2+3・・・+n=n×(n+1)/2=(n^2+n)/2 n^2+n<100×2 n^2+n-100×2<0 という事になります。  そして加算して行った結果が丁度100になる 1+2+3・・・+N=100 という場合に当てはまる様な値Nが存在していると仮定しますと、 n<N という事になりますし、Nの値は 100>1+2+3・・・+N=N×(N+1)/2=(N^2+N)/2 N^2+N-100×2=0 という2次方程式を解けば求める事が出来、二次方程式の一般の解を利用すれば N=(-1±√(1^2-4×1×(-100×2)))/(2×1)=(-1±√(1+8×100))/2 n<(-1±√(1+8×100))/2 になるのですから、一々、Do...LoopやFor...Nextの様な繰り返し処理を行わずとも、次の様な処理でもnの値を求める事が出来ます。 Sub Sample1() Dim m, n As Long m = 100 n = WorksheetFunction.RoundUp((Sqr(1 + 8 * m) - 1) / 2, 0) - 1 MsgBox "答えは" & n End Sub

twin-dragon
質問者

お礼

大変詳しくご教授頂、ありがとうございました。

  • weavaest
  • ベストアンサー率15% (157/1020)
回答No.2

これはDo Loopについての質問じゃないですよね。 条件をロジックに落とせない、要は考え方が分からないってことではないでしょうか。 求め方を教えて欲しいとのことですので、回答となるソースコードが欲しいってことでもないのですよね。 100を超える最小の値は求められるのに、100を超えない最大の値が求められないということで、どこがわからないのでしょうか。 もう少し、具体的にどう考えたとかの情報があれば回答しやすいと思います。

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

要は、100を超える直前の結果を提示すればいいので l= 0 m = 0 n = 0 Do While m < 100 n = m '直前の結果の保存 l = l + 1 '加算する数値 m = n + l '加算後の結果 Loop

twin-dragon
質問者

お礼

明確に解答頂き、ありがとうございました。 大変助かりました。

関連するQ&A

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

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

  • loop が止まらなくて困ってます。

    新人研修でAS/400のRPG3を習ってます。 現在、AMFILEとCMFILEと言うファイルをAMCUSTと言うKEYで繋ぎ、WPO001と言うファイルにアウトプットする演習問題に取り組んでいるのですが、LOOPが止まらなく、WPO001がオーバーフローしてしまいます。何方か、もしよろしければ助けてください。わたしが書いたMAIN ROUTINE のプログラムは以下です。 C READ AMFILE 70* C *IN,70 DOWEQ*ZERO * C AMCUST CHAINCMFILE 60 * C N60 GOTO FND * C FND TAG * C WRITEWPO001R * C ENDDO * C SETON LR *

  • 数IIIの関数の最大、最小についての問題です。

    数IIIの関数の最大、最小についての問題です。 「nを1以上の整数とする。 関数fn(x)=(x/6)^n・e^(n-x)を考える。必要であれば、3.14<π<3.15であることを用いてよい。(1)fn(x)のx≧0での最大値、最小値を求めよ。 (2)関数gn(x)=sin{(x/6)^(1-x/n)}(x≧0), hn(x)=(x/6)^(1-x/n) (x≧0)を考える。 hn(x)のx≧0での最大値、最小値を求めよ。 また、gn(x)のx≧0での最小値が-1かつ最大値が1となるような最小のnの値を求めよ。」 これはどのようにして解いていけば良いでしょうか? また、問題を解く中で必要となる微分のやり方及び結果を、途中過程を含めて教えて頂きたいです。 fn(x)などの式はわかりづらいと思うので、添付した画像でご確認いただければと思います。宜しくお願い致します。 ※答え (1)x=nのとき最大値(n/6)^n x=0のとき最小値0 (2)x=nのとき最大値n/6 x=0のとき最小値0 n=29

  • VBA言語プログラミング

    添付画像の問題での質問です。ong型の変数Nを宣言し、Nの値をinputbox関数で入力すると、(N,sum())および(N,sum2())を表示するSubプロシージャのプログラムが分かりません。 言語はエクセルのビジュアルベーシックです。

  • c言語 正負の値それぞれでの最大値最小値

    大学の研究で使うデータ処理で困っています。 Microsoft Visual C++ 2008 Express Editionを使っています。 例えば、10個の値が縦一列に入ったtxtファイルがいくつかあったとして -5,-3,-2,0,3,4,5,6,7,8, だった場合には プラス側の最大値・最小値をそれぞれ求め(この場合、最大は8、最小は3) マイナス側の最大値・最小値をそれぞれ求め(この場合、最大は-2、最小は-5) 結果として表示される 0,1,2,3,4,5,6,7,8,9, だった場合には プラス側の最大値・最小値をそれぞれ求め(この場合、最大は9、最小は1) マイナス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません) 結果として表示される 0,0,0,0,0,0,0,0,0,0 だった場合には プラス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません) マイナス側の最大値・最小値をそれぞれ求め(この場合、最大はありません、最小はありません) 結果として表示される といったプログラムを作成したいです。教えてください!

  • 課題のVisualBasicについて質問です

    プログラム初心者です。 VisualBasicについてご教授ください。 課題は、 TextBox1(数値)からTextBox2(数値)の間で、偶数・奇数がそれぞれ何個あるかを求めるアプリを作りなさい。といったものですが、添付画像のところで偶数の個数を出そうとしているのですが、うまく解答を出すことができません。どうぞご教授ください。よろしくお願いいたします。

  • 階乗式の変形

    階乗式の変形 ジョージ・アルフケン、ハンス・ウェーバー「基礎物理数学 特殊関数」の演習問題(添付画像の式)の変形が分かりません。 "sとnは整数で、s<nとする"というのが条件です。 独学で勉強しているのですが、演習問題の解答が本になく、行き詰まっています。ヒントなどお願いいたします。

  • 「DO LOOP」についての質問です。VBA初心者です。

    「DO LOOP」についての質問です。VBA初心者です。 昨日同じ質問をさせていただきましたが、私の質問がきちんと書かれていなかったせいで 皆様にご迷惑をおかけしてしまいましたm(_ _;)m きちんと伝わるように訂正して再度質問させていただいてます。 『入力画面』というシートに日付を入力してマクロ実行すると 『入力画面』の右隣りにその日付名のシートが新しく作られるように設定しています。 入力する日は不定期で連続した日付ではありません。 それでお聞きしたいのは、新しく作成するシートのB列に複数の名前を入力した後、 その名前をキーに右隣のシートから一つずつ検索していって、一致するものがあれば 同じ行のN列とP列の値を新しいシートのK列とM列に取得しループ終了。 もしくは全てのシートを検索しても一致するものがなければゼロ表示でループ終了。 という作業をしたいんですが、構文がどのように作ればいいのかがわかりません。 お手数ですが、どうかご教授願います。

  • DO~LOOP でのLOOPの抜け方

    コマンドボタンを押して(スタートボタン)DO~LOOPで実行しているときにストップコマンドボタンを押してストップさせるときの LOOPの抜け方がわかりません。すみませんがよろしくお願いします。

  • プログラミングについて質問です。

    キーボードから配列に代入された10個の実数データの平均,最大値,最小値を求め,表示するソースプログラムを作成したいです.また、平均値,最大値,最小値はそれぞれを計算する関数を作り,求めたいです。 このプログラムをわかりやすいように簡単なコードで作ってくれませんか?

専門家に質問してみよう