---
# System prepended metadata

title: マイクラ検定 問題4 改良バージョン
tags: [マイクラ検定答え]

---

    os.loadAPI('h2touchpanel')
    local result=0
    local numsave={}
    local symsave={}
    local count=0

    local buttons = {}
    buttons[1] = {name = '1', cmd = function() pass(1) end }
    buttons[2] = {name = '2', cmd = function() pass(2) end }
    buttons[3] = {name = '3', cmd = function() pass(3) end }
    buttons[4] = {name = '4', cmd = function() pass(4) end }
    buttons[5] = {name = '5', cmd = function() pass(5) end }
    buttons[6] = {name = '6', cmd = function() pass(6) end }
    buttons[7] = {name = '7', cmd = function() pass(7) end }
    buttons[8] = {name = '8', cmd = function() pass(8) end }
    buttons[9] = {name = '9', cmd = function() pass(9) end }
    buttons[10] = {name = '0', cmd = function() pass(0) end }
    buttons[11] = {name = '+', cmd = function() symbol('+') end }
    buttons[12] = {name = '-', cmd = function() symbol('-')  end }
    buttons[13] = {name = '×', cmd = function() symbol('×')  end }
    buttons[14] = {name = '÷', cmd = function() symbol('÷')  end }
    buttons[15] = {name = '=', cmd = function() enter() end }

    
    function pass(num)
        numsave[#numsave+1]=num
        --押した順番の通りに数字が配列numsave[]の中に保存される。
        --例:) 1番目:1 2番目:2 3番目:4 ...
        count=count+1
        --カウントが一つ増える。
    end
    
    function symbol(name)
        symsave[#symsave+1]= name
        --押した順番通りの記号がsymsave[]の中に保存される。
        --例:) 1番目:+ 2番目:- 3番目:÷ ...
        count=count+1
        --カウントが一つ増える。
    end
    
    function enter()
        result=numsave[1]
        --最初の数字を変数resultに入れておく。
        local value
        --変数valueの定義
        for i=1,(count-1)/2 do
        --1+1と入力したときcountは3となり、正しい計算をボタンで入力すると奇数になるので「-1」し、
        --1+1は計算回数1回(count = 3)、1＋1＋1は計算回数2回(count = 5)となるのでそれぞれ÷2をする。
            value=result
            --最初の数字を変数valueに入れておく。
            if symsave[i]=='+' then
                result=result+numsave[i+1]
            elseif symsave[i]=='-' then
                result=result-numsave[i+1]
            elseif symsave[i]=='×' then
                result=result*numsave[i+1]
            elseif symsave[i]=='÷' then
                result=result/numsave[i+1]
            end
            print(value,symsave[i],numsave[i+1],'=',result)
            --最初の数、計算記号、次の数、＝、今回の計算結果が表示される。
        end
        print(result,' end')
        result = 0
        numsave = {}
        symsave = {}
        count = 0
    end

    local monitor = peripheral.wrap('top')
    local option = {topPos = 1, bottomPos = 10}
    local panel = h2touchpanel.makePanel(buttons, 3, 5, monitor, option)
    panel:draw()
    while true do
        local event, btn = panel:pullButtonPushEvent()
        btn:run()
        panel:drawPushedButtonEffect(btn, 0.5)
    end