tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル電卓 連続計算
記事No6683
投稿日: 2007/12/15(Sat) 16:32
投稿者9月
はじめまして、9月です。
私は今大学生なのですが、情報の授業で、VBで電卓を作る、という課題が出されました。
途中までは授業中に作成して続きを自分でやる、というものなのですが、どうしても連続計算(1+2+3=6など)する機能がつけられません。
授業で作ったものをあまりいじらずに、付け加える形で、計算機能を加えることはできないでしょうか?
数字と演算に関するコードは、

    Dim R1 As Integer '現在のレジスター
    Dim R2 As Integer '保存用レジスター
    Dim Op As Integer '演算子
    Dim CL As Boolean 'クリア指示


    Private Sub 数字キー(ByVal k As Integer)
        If CL Then
            R1 = 0
            CL = False
        End If
        R1 = R1 * 10 + k
        TextReg.Text = R1
    End Sub

    Private Sub 演算キー(ByVal o As Integer)
        Op = o
        R2 = R1
        CL = True
    End Sub

    Private Sub 計算()
        Select Case Op
            Case 1
                R1 = R2 + R1
            Case 2
                R1 = R2 - R1
            Case 3
                R1 = R2 * R1
            Case 4
                R1 = R2 \ R1
        End Select
        CL = True
        TextReg.Text = R1
    End Sub

です。
演算キーは、+−×÷のクリックイベント、計算は=のクリックイベントに対応しています。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: 電卓 連続計算
記事No6684
投稿日: 2007/12/15(Sat) 17:39
投稿者花ちゃん
掲示板を間違えていませんか?

大学生の方に足し算の計算式を教えるのもどうかと思うのですが、ヒントだけ

合計=合計+押したキーの値

[ツリー表示へ]
タイトルRe^2: 電卓 連続計算
記事No6685
投稿日: 2007/12/16(Sun) 01:20
投稿者9月
お返事ありがとうございます。

> 掲示板を間違えていませんか?

申し訳ありません、注意書きを読んだつもりになってました。
失礼いたしました。

> 大学生の方に足し算の計算式を教えるのもどうかと思うのですが、ヒントだけ
> 合計=合計+押したキーの値

仰っていることは理解できるし、自分でもそれは思いついたのですが、どこに何を加えたらいいのかが、よくわからないのです。
勉強不足で申し訳ありません。
もう一度自分でよく考えてみます。

[ツリー表示へ]
タイトルRe: 電卓 連続計算
記事No6689
投稿日: 2007/12/17(Mon) 11:57
投稿者るしぇ
>Private Sub 数字キー(ByVal k As Integer)
の引数が n → k になったのと、多少、関数内の式の順番が変わってる以外
全く同じロジックだわw
http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx02/index.cgi?m=look&bnum=3117
※↑直接は飛べないみたい。アドレスを解析して過去ログから見つけてください。
前期・後期で同じ問題にしてるのかな?
…掲示板なんかで質問するより、先輩か友達にでも聞いたほうが早いよ?。

>    Private Sub 演算キー(ByVal o As Integer)
に If 文で3行加えるだけで、それなりに連続計算はできます。
# それで課題をクリアできるかどうかは知りませんが、
そこを変更しても、電卓としてイマイチなロジックなので回答はしません。

[ツリー表示へ]
タイトルRe^2: 電卓 連続計算
記事No6694
投稿日: 2007/12/17(Mon) 16:23
投稿者9月
るしぇ様、過去ログ紹介も含め、返信ありがとうございました。

> 前期・後期で同じ問題にしてるのかな?
> …掲示板なんかで質問するより、先輩か友達にでも聞いたほうが早いよ?。
はい、仰るとおりそれが出来たら一番だったのですが、この授業が少々特殊な授業で、先輩や友達に履修している人が見つからなかったのです。

> If 文で3行加えるだけで、それなりに連続計算はできます。
より正確なものを作るのは今の自分には難しそうなので、今回はそのやり方に挑戦してみたいと思います。
自分なりに考えてみたのですが、それは

If 以前に演算子が保存されていたら
  演算子を実行(計算()?)

ということでしょうか?
"以前に演算子が保存されていたら"の部分がどのようにプログラミングすればよいのかわからないのと、そもそも考え方が間違っているのかどうかすらわからない状態なのですが…どうなのでしょうか?
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: 電卓 連続計算
記事No6695
投稿日: 2007/12/17(Mon) 17:55
投稿者るしぇ
>"以前に演算子が保存されていたら"の部分がどのようにプログラミング
>すればよいのかわからない
そんなのステップ実行すれば分かるよね?
1行ずつ実行してどの時点でどういう値を覚えていれば計算できるか?
これは花ちゃんが言ってる
>大学生の方に足し算の計算式を教えるのもどうかと思うのですが
足し算のやり方が分かれば、分かるレベルの話。

例えるなら、
プログラムを離れて、ある人からカードを1枚ずつ渡されるとする。
それぞれのカードには、数字1つか演算子1つが書かれてる。
『渡された順に計算してください』って言われたらできるよね?
最初に『1』のカード。次に『+』のカード。。。
9月さんは脳みそにそれを覚えて計算できるはず。
そこを変数に置き換えればプログラムは完成。
足し算が分かればできる。できない方がおかしい。

それと、裏技的に考えるなら、
グローバル(プログラムを通じて)で使用されている変数は、R1,R2,Op,CL
のたった4つしかないんだから、どれかで判定できないと、何か追加しない
といけないって話になって、ボクの言ってることと合わなくなる。
>1+2+3
だけでなく、他の四則演算も実行して、ボタンを押す毎に R1,R2,Op,CL が
どう変化するか全部書き出してみるといいよ。

それでも分からなければ、単位を落とすべきだよね?
できない人を合格にしたら試験の意味が無いでしょう?

[ツリー表示へ]
タイトルRe^4: 電卓 連続計算
記事No6697
投稿日: 2007/12/18(Tue) 14:58
投稿者9月
お返事ありがとうございます。

おかげさまで、なんとか自力で連続計算機能を付け加えることができました。
If文は全く使わなかったので、おそらくるしぇ様が提示していたのとは、別の方法なのでしょうが…。

あと、単位の話ですが、勉強って単位や試験のためにするものじゃありませんよ(笑)
それらは、勉強するきっかけです。

いろいろとありがとうございました。

[ツリー表示へ]
タイトルRe^5: 電卓 連続計算
記事No6698
投稿日: 2007/12/18(Tue) 16:18
投稿者るしぇ
もう一度、お読みください。
http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban
>6.掲示板ご利用に際し
> 4. 投稿後の対応
>  (4) 解決した場合の報告は、どのようにして解決したかを必ず報告して下さい。

まぁ、回答者がなかなかコードを書かないのに質問者だけってのは理不尽に
感じるかもしれないけど、書かれたコードの持つ意味が違うからね。
>If文は全く使わなかったので、おそらくるしぇ様が提示していたのとは、
>別の方法なのでしょうが…。
そういう事も含めて、『○○のようにして解決しました』という具体的な
報告を書くと、それに対していいところや不備の指摘が受けられます。

[ツリー表示へ]