diff --git "a/j2518-\347\264\205\350\221\211\343\203\201\343\203\274\343\203\240\346\210\220\346\236\234\347\231\272\350\241\250\344\274\232\343\202\271\343\203\251\343\202\244\343\203\211.pdf" "b/j2518-\347\264\205\350\221\211\343\203\201\343\203\274\343\203\240\346\210\220\346\236\234\347\231\272\350\241\250\344\274\232\343\202\271\343\203\251\343\202\244\343\203\211.pdf" new file mode 100644 index 0000000..82b2de4 --- /dev/null +++ "b/j2518-\347\264\205\350\221\211\343\203\201\343\203\274\343\203\240\346\210\220\346\236\234\347\231\272\350\241\250\344\274\232\343\202\271\343\203\251\343\202\244\343\203\211.pdf" Binary files differ diff --git a/keisan7.rb b/keisan7.rb old mode 100755 new mode 100644 index ee351da..c37e4c5 --- a/keisan7.rb +++ b/keisan7.rb @@ -1,12 +1,10 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- require "curses" def keisan(shiki, ichi=0, ans=0.0) - suuji=[]; enzan=[]; yuusen={'+'=>1,'-'=>1,'*'=>2,'/'=>2} + suuji,enzan = [], [] + yuusen = {'+'=>1,'-'=>1,'*'=>2,'/'=>2 } tekiyou = ->{ - b=suuji.pop; a=suuji.pop; e=enzan.pop - suuji << (e=='+' ? a+b : e=='-' ? a-b : e=='*' ? a*b : a/b) - } + b, a, e, = suuji.pop, suuji.pop, enzan.pop + suuji << (e=='+' ? a+b : e=='-' ? a-b : e=='*' ? a*b : a/b)} yomu_atai = lambda do ichi += 1 while shiki[ichi]==' ' raise "式の途中で終わりました" unless shiki[ichi] @@ -50,20 +48,25 @@ tekiyou.call while enzan.any? [suuji[0], ichi] end - include Curses init_screen cbreak noecho curs_set(0) -nyuryoku=""; messeji="Enter=計算 / BS=削除 / Ctrl+L=クリア / q=終了"; kekka=""; ans=0.0 +nyuryoku="" +messeji="Enter=計算 / BS=削除 / Ctrl+L=クリア / q=終了" +kekka, ans ="", 0.0 begin loop do clear - setpos(0,0); addstr("curses電卓(+-*/() 小数)"[0,cols-1]) - setpos(1,0); addstr(messeji[0,cols-1]) - setpos(2,0); addstr(("> "+nyuryoku)[0,cols-1]) - setpos(3,0); addstr(("= "+kekka)[0,cols-1]) + setpos(0,0) + addstr("curses電卓(+-*/() 小数)"[0,cols-1]) + setpos(1,0) + addstr(messeji[0,cols-1]) + setpos(2,0) + addstr(("> "+nyuryoku)[0,cols-1]) + setpos(3,0) + addstr(("= "+kekka)[0,cols-1]) key=getch case key when 'q','Q' then break @@ -76,12 +79,12 @@ owari += 1 while shiki[owari]==' ' raise "式の後ろに余計な文字があります" if owari < shiki.length ans = kotae - kekka = kotae.to_s; nyuryoku=""; messeji="計算しました(ans=#{ans})" + kekka, nyuryoku, messeji = kotae.to_s, "", "計算しました (ans=#{ans} )" rescue => e - kekka = ""; nyuryoku=""; messeji="エラー: #{e.message}" + kekka, nyuryoku, messeji = "", "", "エラー: #{e.message}" end when 12 - nyuryoku=""; kekka=""; messeji="クリアしました" + nyuryoku, kekka, messeji = "", "", "クリアしました" when KEY_BACKSPACE,127,8 nyuryoku = nyuryoku[0...-1] when Integer diff --git "a/\343\202\271\343\203\251\343\202\244\343\203\211_\347\264\205\350\221\211" "b/\343\202\271\343\203\251\343\202\244\343\203\211_\347\264\205\350\221\211" new file mode 100644 index 0000000..130cdec --- /dev/null +++ "b/\343\202\271\343\203\251\343\202\244\343\203\211_\347\264\205\350\221\211" Binary files differ