14.演算子の処理を作る2




『演算部の残りを作る』
最後に残った演算部を作ります。下図の緑色の所が該当する部分です。


下にここまでのプログラムを示します。青色の部分が今回追加した所です。
今回は特に説明を行いません。上の図と比べてみてください。

DIM  BTNSUU( 15 )
ARRAY BTNSUU( 0  ) = ( 82 , 79 , 80 , 81 , 75 , 76 , 77 , 71 , 72 , 73 )
ARRAY BTNSUU( 10 ) = ( 78 , 74 , 55 , 181 , 156 )
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 14                      //配列をたどる
      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
  ENDIF
  G@PRINT( CH , 32 , 8 , STR( KEKKA ) ) //数字を表示する
  G@FLIP( )                             //画面を更新
ENDLOOP