visual basicの問題で、1+3+5+・・・・・+nの合計が1000を超えたときのnの値と、その合計を表示しなさいってゆう問題のコードを誰かおしえてくださいm(__)mたぶんFor〜Next文やDo〜Loop文を使うみたいです、よろしくお願いします。。
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に関する質問を行う掲示板であって、
以後、質問を行うようにしてください。
あなたのは、質問ではありません。
盗人に追い銭ですな。
会社の人なオイラには損だけしかないので真似できませんがw
他人が納得して損をする分には大歓迎です♪
ま、その問題を出した先生がVB系の掲示板の常連で
質問者を落第にしても、逆恨みなしって事で。
鋭すぎ、同じかどうかは分かりませんが、
口頭質問し落とせる立場にいます。
あはははは(乾)、よくある例ですよ(^^;)。案外、狭い分野なので
ななさんがあさみさんのリアルな先生の場合もある。で、ななさんの
レスが模範解答として用意してあったものだったら…ななさんの立場が
危なくなる可能性が、ほんの少しありますのでお気をつけ下さいね?
オイラは質問者は全然大事じゃないの。回答者の方が本当に大事だから(^^)
蛇足?
intCntの並びが intCnt = intCnt + 2 ではなく
素数だったら凄く難しい問題ですよね(@w@;
1+3+5+7+11+13+17+19+・・・
↑
素数の定義間違ってた>_<
2を忘れてた・・・
素数なら1も入らないみたいですけどw、そういう発想で応用問題を
解いてくれば加点されます(何?
http://www.geisya.or.jp/~mwm48961/math/m3prime2.htm
> レスが模範解答として用意してあったものだったら…ななさんの立場が
> 危なくなる可能性が、ほんの少しありますのでお気をつけ下さいね?
これは、私のオリジナルです。
#いやぁ〜、基本問題には、模範解答は付いていないんですよ。
真面目に書き込み。
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文が思い浮かんだ時点で厳しいかな・・・
> 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
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
普通はこうかな、等差級数だし。。。
間違って送った(^^;
garyuuinn -> 我龍院忠太
しかもGODさんと被ってるのかな、もしかして。
> For n = 1 To x Step 2
>
うはっ!間違ってた。orz
↑のじゃ1を超えるものが条件の時に^^;
For n = 1 To x + 2 Step 2
Forで回すとEnd条件が逆になってません?(@w@;
>Forで回すとEnd条件が逆になってません?(@w@;
GODさんのサンプルコードにEnd条件は2つありますが、
どちらのなにが逆だと言ってるのかが不明です。
自分がひねくれ者であることが一発で伝わってしまうが・・・
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
合計値出すの忘れた 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
なぜか私の答えと他の回答者の答えが合ってない。orz
1000を超えた時の n の値って 63 じゃないの?
大体 65 とかでてますが^^;
(ひねくれ者 さんのはねろさんと同じことをやろうとしているのに途中までしか行ってないみたい。31)
>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
元質問者にちょんと宿題をやってほしくて手加減してるんでは:-)
×ちょんと ○ちゃんと
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
>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
ですか。
訂正
intCnt = -1
intValue = 0
Do Until intValue > 1000
intCnt = intCnt +2
intValue = intValut + intCnt
Loop
intCnt=63
intValue = 1024
ループ回しすぎてました・・・
フツーに結果を調べたら
n=63
合計=1024
単なるループ構造の宿題というより
もっと別なことを教えようとしているのでは?
と、勘ぐる私もひねくれ者?!(^^;
楽しそうなのでコード書いてみました。
Dim intCnt As Integer
Do
intCnt = intCnt + 1
If 1000 <= (intCnt ^ 2) Then Exit Do
Loop
Debug.Print 2 * (intCnt) - 1
変数一個で終わりますよ。
If 1000 <(intCnt ^ 2) Then Exit Do
超えたときですね。
ツイート | ![]() |