15.機能の追加
DIM BTNSUU( 16 ) ARRAY BTNSUU( 0 ) = ( 82 , 79 , 80 , 81 , 75 , 76 , 77 , 71 , 72 , 73 ) ARRAY BTNSUU( 10 ) = ( 78 , 74 , 55 , 181 , 156 , 14 ) CH=G@SETUP(320,240,16,1) //画面の準備 CH2=G@CHRLOAD("DENTAKU.BMP") //電卓の画像を読み込み G@COLOR(0,0,1) //文字を黒色にする SUU1 = 0 //画面に表示する数字 ENZAN1 = 10 LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) //電卓の画像を画面に貼る I@KEYGET2( ) //キーボートのチェック IF I@KEYBTN2( 1 ) == 1 THEN //ボタンは押された BT = I@KEYBTN2( 0 ) //ボタンの種類を変数BTに代入 FOR I = 0 TO 15 //配列をたどる IF BTNSUU( I ) == BT THEN //ボタンの種類を配列から調べる BREAK //ボタンが分かったのでFOR〜NEXTを抜ける ENDIF NEXT //最後まで見つからなければI=10で終わる IF I < 10 THEN //「I<10」ならば数字が押された IF ( 214748364 > SUU2 )OR(( 214748364 == SUU2 )AND( I<=7 )) THEN //オーバーフローしない? SUU2 = SUU2 * 10 + I //桁の処理 KEKKA = SUU2 //表示する値を設定 RENZOKU = 1 //演算子の連続投入でない ENDIF ENDIF IF ( 10 <= I ) AND ( I <= 14 ) THEN //演算子が押された IF RENZOKU == 0 THEN ENZAN1 = I ELSE IF ENZAN1 == 10 THEN SUU1 = SUU1 + SUU2 ENDIF IF ENZAN1 == 11 THEN SUU1 = SUU1 - SUU2 ENDIF IF ENZAN1 == 12 THEN SUU1 = SUU1 * SUU2 ENDIF IF ENZAN1 == 13 THEN SUU1 = SUU1 / SUU2 ENDIF IF I == 14 THEN KEKKA = SUU1 //表示する値を設定 SUU1 = 0 ENZAN1 = 10 ELSE KEKKA = SUU1 //表示する値を設定 ENZAN1 = I ENDIF SUU2 = 0 RENZOKU = 0 //演算子の連続投入になるかも ENDIF ENDIF IF ( I == 15 ) THEN //「BK」が押された SUU2 = SUU2 / 10 //桁の処理 KEKKA = SUU2 //表示する値を設定 RENZOKU = 1 //演算子の連続投入でない ENDIF ENDIF G@PRINT( CH , 32 , 8 , STR( KEKKA ) ) //数字を表示する G@FLIP( ) //画面を更新 ENDLOOP
『”CE”機能』
「BK」を押すと最後に押した数字をキャンセルしましたが、打ち込んだ数字を全てキャンセルしたい場合もあると思います。一般的な電卓では「CE」ボタンを押すとこの機能を実現します。
実現方法は、「CE」を押したら数字を変数SUU2を「0」に初期化してあげる事にします。
「CE」の機能は「Deleteキー」に割り当てます。
DIM BTNSUU( 17 ) ARRAY BTNSUU( 0 ) = ( 82 , 79 , 80 , 81 , 75 , 76 , 77 , 71 , 72 , 73 ) ARRAY BTNSUU( 10 ) = ( 78 , 74 , 55 , 181 , 156 , 14 , 211 ) CH=G@SETUP(320,240,16,1) //画面の準備 CH2=G@CHRLOAD("DENTAKU.BMP") //電卓の画像を読み込み G@COLOR(0,0,1) //文字を黒色にする SUU1 = 0 //画面に表示する数字 ENZAN1 = 10 LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) //電卓の画像を画面に貼る I@KEYGET2( ) //キーボートのチェック IF I@KEYBTN2( 1 ) == 1 THEN //ボタンは押された BT = I@KEYBTN2( 0 ) //ボタンの種類を変数BTに代入 FOR I = 0 TO 16 //配列をたどる IF BTNSUU( I ) == BT THEN //ボタンの種類を配列から調べる BREAK //ボタンが分かったのでFOR〜NEXTを抜ける ENDIF NEXT //最後まで見つからなければI=10で終わる IF I < 10 THEN //「I<10」ならば数字が押された IF ( 214748364 > SUU2 )OR(( 214748364 == SUU2 )AND( I<=7 )) THEN //オーバーフローしない? SUU2 = SUU2 * 10 + I //桁の処理 KEKKA = SUU2 //表示する値を設定 RENZOKU = 1 //演算子の連続投入でない ENDIF ENDIF IF ( 10 <= I ) AND ( I <= 14 ) THEN //演算子が押された IF RENZOKU == 0 THEN ENZAN1 = I ELSE IF ENZAN1 == 10 THEN SUU1 = SUU1 + SUU2 ENDIF IF ENZAN1 == 11 THEN SUU1 = SUU1 - SUU2 ENDIF IF ENZAN1 == 12 THEN SUU1 = SUU1 * SUU2 ENDIF IF ENZAN1 == 13 THEN SUU1 = SUU1 / SUU2 ENDIF IF I == 14 THEN KEKKA = SUU1 //表示する値を設定 SUU1 = 0 ENZAN1 = 10 ELSE KEKKA = SUU1 //表示する値を設定 ENZAN1 = I ENDIF SUU2 = 0 RENZOKU = 0 //演算子の連続投入になるかも ENDIF ENDIF IF ( I == 15 ) THEN //「BK」が押された SUU2 = SUU2 / 10 //桁の処理 KEKKA = SUU2 //表示する値を設定 RENZOKU = 1 //演算子の連続投入でない ENDIF IF ( I == 16 ) THEN //「CE」が押された SUU2 = 0 //数字を「0」に初期化する KEKKA = SUU2 //表示する値を設定 RENZOKU = 0 //演算子の連続投入でない ENDIF ENDIF G@PRINT( CH , 32 , 8 , STR( KEKKA ) ) //数字を表示する G@FLIP( ) //画面を更新 ENDLOOP
『”C”機能』
電卓を起動直後の状態まで完全に初期化する機能を追加する。
一般的な電卓では「C」ボタンを押すとこの機能を実現します。
実現方法は、「C」を押したら「0+」と押した状態になるように変数を初期化してあげる事にします。
「CE」の機能は「Endキー」に割り当てます。
DIM BTNSUU( 18 ) ARRAY BTNSUU( 0 ) = ( 82 , 79 , 80 , 81 , 75 , 76 , 77 , 71 , 72 , 73 ) ARRAY BTNSUU( 10 ) = ( 78 , 74 , 55 , 181 , 156 , 14 , 211 , 207 ) CH=G@SETUP(320,240,16,1) //画面の準備 CH2=G@CHRLOAD("DENTAKU.BMP") //電卓の画像を読み込み G@COLOR(0,0,1) //文字を黒色にする SUU1 = 0 //画面に表示する数字 ENZAN1 = 10 LOOP G@CHRCOPY( CH2 , CH , 0 , 0 ) //電卓の画像を画面に貼る I@KEYGET2( ) //キーボートのチェック IF I@KEYBTN2( 1 ) == 1 THEN //ボタンは押された BT = I@KEYBTN2( 0 ) //ボタンの種類を変数BTに代入 FOR I = 0 TO 17 //配列をたどる IF BTNSUU( I ) == BT THEN //ボタンの種類を配列から調べる BREAK //ボタンが分かったのでFOR〜NEXTを抜ける ENDIF NEXT //最後まで見つからなければI=10で終わる IF I < 10 THEN //「I<10」ならば数字が押された IF ( 214748364 > SUU2 )OR(( 214748364 == SUU2 )AND( I<=7 )) THEN //オーバーフローしない? SUU2 = SUU2 * 10 + I //桁の処理 KEKKA = SUU2 //表示する値を設定 RENZOKU = 1 //演算子の連続投入でない ENDIF ENDIF IF ( 10 <= I ) AND ( I <= 14 ) THEN //演算子が押された IF RENZOKU == 0 THEN ENZAN1 = I ELSE IF ENZAN1 == 10 THEN SUU1 = SUU1 + SUU2 ENDIF IF ENZAN1 == 11 THEN SUU1 = SUU1 - SUU2 ENDIF IF ENZAN1 == 12 THEN SUU1 = SUU1 * SUU2 ENDIF IF ENZAN1 == 13 THEN SUU1 = SUU1 / SUU2 ENDIF IF I == 14 THEN KEKKA = SUU1 //表示する値を設定 SUU1 = 0 ENZAN1 = 10 ELSE KEKKA = SUU1 //表示する値を設定 ENZAN1 = I ENDIF SUU2 = 0 RENZOKU = 0 //演算子の連続投入になるかも ENDIF ENDIF IF ( I == 15 ) THEN //「BK」が押された SUU2 = SUU2 / 10 //桁の処理 KEKKA = SUU2 //表示する値を設定 RENZOKU = 1 //演算子の連続投入でない ENDIF IF ( I == 16 ) THEN //「CE」が押された SUU2 = 0 //数字を「0」に初期化する KEKKA = SUU2 //表示する値を設定 RENZOKU = 0 //演算子の連続投入でない ENDIF IF ( I == 17 ) THEN //「C」が押された KEKKA = 0 //表示する値を設定 SUU1 = 0 SUU2 = 0 ENZAN1 = 10 RENZOKU = 0 //演算子の連続投入でない ENDIF ENDIF G@PRINT( CH , 32 , 8 , STR( KEKKA ) ) //数字を表示する G@FLIP( ) //画面を更新 ENDLOOP