VBのコード教えてくださいm(__)m


あさみ  2006-01-19 00:15:17  No: 93715

visual basicの問題で、1+3+5+・・・・・+nの合計が1000を超えたときのnの値と、その合計を表示しなさいってゆう問題のコードを誰かおしえてくださいm(__)mたぶんFor〜Next文やDo〜Loop文を使うみたいです、よろしくお願いします。。


なな  2006-01-19 00:28:56  No: 93716

Dim intValue As Integer
Dim intCnt As Integer

intCnt= 1
intValue = 0

Do
    intValue = intValue + intCnt
    intCnt = intCnt + 2

     if intValue => 1000 Then
         Exit Do
     End If
Loop

この掲示板は、VisualBasicに関する質問を行う掲示板であって、
以後、質問を行うようにしてください。
あなたのは、質問ではありません。


特攻隊長まるるう  2006-01-19 00:40:25  No: 93717

盗人に追い銭ですな。
会社の人なオイラには損だけしかないので真似できませんがw
他人が納得して損をする分には大歓迎です♪

ま、その問題を出した先生がVB系の掲示板の常連で
質問者を落第にしても、逆恨みなしって事で。


なな  2006-01-19 01:12:12  No: 93718

鋭すぎ、同じかどうかは分かりませんが、
口頭質問し落とせる立場にいます。


特攻隊長まるるう  2006-01-19 02:32:10  No: 93719

あはははは(乾)、よくある例ですよ(^^;)。案外、狭い分野なので
ななさんがあさみさんのリアルな先生の場合もある。で、ななさんの
レスが模範解答として用意してあったものだったら…ななさんの立場が
危なくなる可能性が、ほんの少しありますのでお気をつけ下さいね?

オイラは質問者は全然大事じゃないの。回答者の方が本当に大事だから(^^)


  2006-01-19 02:52:37  No: 93720

蛇足?
intCntの並びが intCnt = intCnt  + 2 ではなく
素数だったら凄く難しい問題ですよね(@w@;

1+3+5+7+11+13+17+19+・・・


  2006-01-19 02:55:43  No: 93721


素数の定義間違ってた>_<
2を忘れてた・・・


特攻隊長まるるう  2006-01-19 02:58:28  No: 93722

素数なら1も入らないみたいですけどw、そういう発想で応用問題を
解いてくれば加点されます(何?
http://www.geisya.or.jp/~mwm48961/math/m3prime2.htm


なな  2006-01-19 04:01:18  No: 93723

> レスが模範解答として用意してあったものだったら…ななさんの立場が
> 危なくなる可能性が、ほんの少しありますのでお気をつけ下さいね?

これは、私のオリジナルです。
#いやぁ〜、基本問題には、模範解答は付いていないんですよ。


  2006-01-19 04:24:33  No: 93724

真面目に書き込み。

1+3+5+・・・・・+nの合計が1000を超えたときのnの値と、その合計を表示しなさい

①1+3+5+・・・・・+n
    n = 1
    n = n + 2 これは思いつくと思います。

②合計が1000を超えたとき
    →言い換えると、合計が1000より大きくなるまで

Dim intCnt as Integer
Dim intValue as Integer

intCnt = 1
intValue = 0
Do Until intValue > 1000
    intValue = intValut + intCnt
    intCnt = intCnt +2
Loop

ななさん同様に、こんな感じになるはずです。
①が思いつかないならロジックを考えない方が安全。
②が思いつかないなら頭が固い。
For〜Next文が思い浮かんだ時点で厳しいかな・・・


GOD  2006-01-19 18:06:31  No: 93725

> For〜Next文が思い浮かんだ時点で厳しいかな・・・
>
↑はなんで?

    Dim n As Long
    Dim x As Long
    Dim sum As Long

    x = 1000

    sum = 0
    For n = 1 To x Step 2
        sum = sum + n
        If sum > x Then
            Exit For
        End If
    Next
    Debug.Print "n の値は " & n & " です。"
    Debug.Print "合計値は " & sum & " です。"

#むしろ計算で求まるなら↓を推奨したい。
http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx01/index.cgi?m=read&bnum=2463&num=2464


garyuuinn  2006-01-19 18:19:40  No: 93726

Loopを使えと言う問題じゃなければ
    Dim longCount As Double
    Dim longSum As Long
    Dim longValue As Long
    longCount = Sqr(1000)
    If Int(longCount) <> longCount Then
        longCount = Int(longCount) + 1
    End If
    longSum = longCount ^ 2
    longValue = longCount * 2 + 1

普通はこうかな、等差級数だし。。。


我龍院忠太  2006-01-19 18:23:19  No: 93727

間違って送った(^^;
garyuuinn  ->  我龍院忠太
しかもGODさんと被ってるのかな、もしかして。


GOD  2006-01-19 18:40:17  No: 93728

> For n = 1 To x Step 2
>
うはっ!間違ってた。orz
↑のじゃ1を超えるものが条件の時に^^;
For n = 1 To x + 2 Step 2


  2006-01-19 19:48:53  No: 93729

Forで回すとEnd条件が逆になってません?(@w@;


特攻隊長まるるう  2006-01-19 21:14:20  No: 93730

>Forで回すとEnd条件が逆になってません?(@w@;
GODさんのサンプルコードにEnd条件は2つありますが、
どちらのなにが逆だと言ってるのかが不明です。


ひねくれ者  2006-01-19 22:42:27  No: 93731

自分がひねくれ者であることが一発で伝わってしまうが・・・

Private Sub Form_Load()
    Label1.Caption = "答えA:" & keisan(1000)
End Sub

Public Function keisan(ByVal sumMax As Long) As Long
    If (sumMax < 1) Then
        keisan = 0
        Exit Function
    End If
    keisan = CLng(-Int(-Sqr(sumMax) + 1))
    Exit Function
End Function


ひねくれ者  2006-01-19 22:57:56  No: 93732

合計値出すの忘れた and 計算式が違った
わざと合計値の方はまじめに計算して出題者を惑わせてみる。

Private Sub Form_Load()
    Dim kekka As Long
    kekka = keisan(1000)
    Dim n As Long
    Dim sum As Long
    For n = 1 to kekka
       sum = sum + (n*2-1)
    Next
    Label1.Caption = "結果:" & kekka & vbCrlf & "合計:" & sum
End Sub

Public Function keisan(ByVal sumMax As Long, _
 ByRef sum As Long) As Long

    If (sumMax < 1) Then
        keisan = 0
        sum = 1
        Exit Function
    End If
    Dim retval As Long
    'さっきの式の +1 はバグ
    retval = CLng(-Int(-Sqr(sumMax)))
    Exit Function
End Function


GOD  2006-01-20 00:21:32  No: 93733

なぜか私の答えと他の回答者の答えが合ってない。orz
1000を超えた時の n の値って 63 じゃないの?
大体 65 とかでてますが^^;
(ひねくれ者 さんのはねろさんと同じことをやろうとしているのに途中までしか行ってないみたい。31)


ひねくれ者  2006-01-20 00:53:53  No: 93734

>1000を超えた時の n の値って 63 じゃないの?

 1 + 3 + 5 + ... (2n+1)

の n を出すコードな上にkeisanの第2引数宣言消し忘れてますね。
しかも切り捨ての処理が違ってた orz

これでOKかな。

Private Sub Form_Load()
    If isNumeric(Text1.Text)
        Dim kekka As Long
        Dim sum As Long
        kekka = keisan(Text1.Text)
        sum = ((kekka + 1) * (kekka + 1)) / 4
        Label1.Caption = "結果:" & kekka & vbCrlf & "合計:" & sum
    End If
End Sub

Public Function keisan(ByVal sumMax As Long) As Long
    If (sumMax < 1) Then
        keisan = 1
        Exit Function
    End If
    keisan = CLng(Int(Sqr(sumMax))) * 2 + 1
    Exit Function
End Function


もげ  2006-01-20 00:55:57  No: 93735

元質問者にちょんと宿題をやってほしくて手加減してるんでは:-)


もげ  2006-01-20 00:59:25  No: 93736

×ちょんと  ○ちゃんと

Function asamichan() As String
    Dim intValue As Integer
    Dim intCnt As Integer
    
    intCnt = 1
    intValue = 0
    Do
        intValue = intValue + intCnt
        Debug.Print CStr(intCnt) & "までの合計は" & CStr(intValue)
        If intValue >= 1000 Then
            Exit Do
        End If
        intCnt = intCnt + 2
    Loop
    asamichan = "正解:" & CStr(intCnt) & "まで合計したら" & CStr(intValue) & "になったよ。"
End Function


我龍院忠太  2006-01-20 01:00:27  No: 93737

>1000を超えた時の n の値って 63 じゃないの?
>大体 65 とかでてますが^^;

  1  +  3  +  5  +  7 ・・ 2n-1
2n-1 +  7  +  5  +  3 ・・ 1
1000 <=  n x (1 + 2n - 1)/2 = n^2
と言うことで、GODさんおっしゃる通り、
longValue = longCount * 2 - 1
でした、ボロボロだな。         orz

ついでに
    Dim intValue As Integer
    Dim intCnt As Integer
    intCnt = 1
    intValue = 1
    Do
        intCnt = intCnt + 2
        intValue = intValue + intCnt
        If intValue >= 1000 Then
            Exit Do
        End If
    Loop
    Debug.Print intCnt
    Debug.Print intValue
ですか。


  2006-01-20 01:08:19  No: 93738

訂正

intCnt = -1
intValue = 0
Do Until intValue > 1000
    intCnt = intCnt +2
    intValue = intValut + intCnt
Loop

intCnt=63
intValue = 1024

ループ回しすぎてました・・・


Seraph  2006-01-20 01:30:11  No: 93739

フツーに結果を調べたら

n=63
合計=1024

単なるループ構造の宿題というより
もっと別なことを教えようとしているのでは?

と、勘ぐる私もひねくれ者?!(^^;


ヤマ@文系  2006-02-02 13:07:31  No: 93740

楽しそうなのでコード書いてみました。
Dim intCnt As Integer

Do
intCnt = intCnt + 1
If 1000 <= (intCnt ^ 2) Then Exit Do
Loop
Debug.Print 2 * (intCnt) - 1

変数一個で終わりますよ。


ヤマ@文系  2006-02-02 13:09:45  No: 93741

If 1000 <(intCnt ^ 2) Then Exit Do

超えたときですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加