再投稿です。
このコードの説明をお願いします。
特にiが演算子に来る理由を知りたいです。
B = Inputbox("式を入力してください。")
Y = Len(B)
i = 0
For i = 0 To Y - 1
A(i) = Mid(B,i+1,1)
z = i + 1
For j = 0 To i - 1
x = CStr(x) + CStr(A(j))
Next
Next
For k = z To Y - 1
X2 = CStr(X2) + CStr(A(k))
Next
ans = CDbl(x) + CDbl(X2)
MsgBox"答えは"&CDbl(ans)&"です",,"答え"
End If
例 B=11+11の場合
まず、for文、Len関数、Mid関数でBの文字(数字だけど文字扱い)を一つの文字にして、配列に入れる。
B = Inputbox("式を入力してください。")
Y = Len(B)
i = 0
For i = 0 To Y - 1
A(i) = Mid(B,i+1,1)
次に、切り取った文字で0から演算子(この場合は+)までを計算
z = i + 1
For j = 0 To i - 1 ※よくわからにのはここ。iが演算子にくるから0~i-1で左側 の計算が成立する部分。(そういう風に説明されました)
そもそもなんで、iが演算子の場所に来るかがわからな い。
x = CStr(x) + CStr(A(j)) これで、文字列を統合し11になる
Next
Next Nextをここに二つ持ってくる意味もわからない
次に左側の計算をする。
For k = z To Y - 1 ※zはi+1をして、演算子の一つ右側になる らしい。
X2 = CStr(X2) + CStr(A(k)) Y-1で右側の計算が成立するのもよくわ からない
右側の文字列も統合
Next
出た答えを数字に直し足し算。
ans = CDbl(x) + CDbl(X2)
MsgBox"答えは"&CDbl(ans)&"です",,"答え"
この場合だと、答えは33になる
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/06 03:58
回答3件
0
説明の追加ありがとうございました。だいぶ内容が理解できました。
このコードを見た人たちがみな混乱したように、質問者様も混乱されていることがよくわかりました。
質問者様の指摘は至極まっとうで、疑問を持つ点として正しいです。
ひょっとして、全体はこんな感じじゃないですかね。
これなら理解できそうでしょうか?
lang
1 2Dim B As String 3Dim X As String 4Dim X2 As String 5Dim i As Integer 6Dim Y As Integer 7Dim Z As Integer 8Dim ans As Double 9Dim A() As String 10 11B = InputBox("式を入力してください。") 12 13Y = Len(B) 14 15ReDim A(0 To Y - 1) 16 17For i = 0 To Y - 1 18 A(i) = Mid(B, i + 1, 1) 19 If A(i) = "+" Then 20 Z = i + 1 21 For j = 0 To i - 1 22 X = CStr(X) + CStr(A(j)) 23 Next 24 End If 25Next 26 27For i = Z To Y - 1 28 X2 = CStr(X2) + CStr(A(i)) 29Next 30 31ans = CDbl(X) + CDbl(X2) 32MsgBox B & " の答えは " & ans & " です", , "答え" 33
投稿2015/07/06 05:37
総合スコア3111
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/06 05:59
2015/07/06 06:35
2015/07/06 07:00
2015/07/06 07:09
2015/07/06 07:10
2015/07/06 07:14
2015/07/06 07:21
2015/07/06 07:39
2015/07/06 07:47
2015/07/06 07:55
2015/07/06 08:20
2015/07/06 08:28 編集
2015/07/06 14:40
2015/07/06 15:05
2015/07/06 17:49
2015/07/07 00:40
2015/07/07 00:41
2015/07/07 00:43
2015/07/07 00:55
2015/07/07 01:14
2015/07/07 02:13
2015/07/07 02:16
2015/07/07 03:22
2015/07/07 03:32
2015/07/07 04:06
2015/07/07 04:50
2015/07/07 05:04
2015/07/07 06:18
2015/07/07 07:00
2015/07/07 08:53
2015/07/08 02:39
2015/07/08 02:45
2015/07/08 03:20
2015/07/08 03:33
2015/07/08 04:04
2015/07/08 04:10
2015/07/08 05:46
2015/07/08 09:12
2015/07/09 04:03
2015/07/09 04:19
2015/07/09 05:01
2015/07/09 07:55
2015/07/10 01:26
2015/07/10 02:15
2015/07/10 04:52
2015/07/12 12:19
0
コメントの流れから
最終的に演算子2つ以上、加減乗除混合の計算をしたいのだと思います。
その場合、演算子の優先順位も考慮しなくてはならず(1 + 2*3 = 7のような)、
ちゃんとした計算結果を返すアルゴリズムを考えるのは常人にはつらいです。
で、世の中には電卓ソフトがあるので、
わざわざ自分で考えなくても当然そういうアルゴリズムがあります。
たいてい普通の数式(中置記法)を「逆ポーランド記法」に変換して計算しているはずです。
中置記法から逆ポーランド記法への変換は「操車場アルゴリズム」というものが有ります。
というわけで、最終的には
1.入力を受け取り、
2.処理しやすいように逆ポーランド記法に変換し、
3.変換結果を元に計算し、
4.計算結果を表示する。
となると思います。
これの実現には、
1.逆ポーランド記法に変換するプログラムを作る
2.逆ポーランド記法を受け取って計算するプログラムを作る
3.2つを合わせる
という段階を踏むといいと思います。
(まあ自分で組まなくてもvbsならEval関数で計算したい文字列を突っ込めば計算結果を返してくれますが)
投稿2015/07/07 03:07
総合スコア13521
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。