新しく発言する EXIT インデックスへ
哲さんへ

  哲さんへ もりの 2004/01/25 23:52:49 
  掛け算はいま追加中ですが、バグが取れなく...2004/01/26 08:12:46 
   └掛け算も追加した改良版です。2004/01/26 09:31:21 
    └後半です2004/01/26 09:34:30 
     └-----!掛け算の行から7行目の2004/01/26 09:44:15 
      └哲さんありがとう もりの 2004/01/26 17:45:07 
       └もう少し修正してみました。2004/01/26 18:01:21 
        └!2004/01/26 18:03:19 
         └externalはここには もりの 2004/01/26 18:08:28 
          └と言われてもどこだか?2004/01/26 18:20:37 
           └33行目のfunction もりの 2004/01/26 18:33:30 
            └33ではなく もりの 2004/01/26 18:34:19 
             └確認のためこの掲示板からコピーして実行し...2004/01/26 19:24:00 

  哲さんへ もりの 2004/01/25 23:52:49  ツリーへ

哲さんへ 返事を書く
もりの 2004/01/25 23:52:49
掛け算のもできますか?

  掛け算はいま追加中ですが、バグが取れなく...2004/01/26 08:12:46  ツリーへ

Re: 哲さんへ 返事を書く
2004/01/26 08:12:46
掛け算はいま追加中ですが、バグが取れなくて悩んでます。
割り算はかなり面倒なので、誰か追加して貰えないでしょうか?

   └掛け算も追加した改良版です。2004/01/26 09:31:21  ツリーへ

Re: 掛け算はいま追加中ですが、バグが取れなく... 返事を書く
2004/01/26 09:31:21
掛け算も追加した改良版です。
=でもEnterでも使えます。
掲示板に入りきらないので前半と後半に分けて書きます。
***前半***
!  [筆算プログラム]
!
!数値と+−*=を入れて行けば計算確認できます。
!どの段階でも不適切なキーを押すと初期状態に戻ります。
!行番号19のすく前の最後の丸、文字は勝手に書き換えてください。
!
! cval:数値保存配列 cal$:演算子 
! ichr$:入力文字 jchr$:一時保存文字 comp$:比較文字列
!
!   ***前処理***
DECLARE EXTERNAL FUNCTION prob$
DECLARE EXTERNAL FUNCTION ans$
SET ECHO "OFF"
LET txtsize=32        !文字、画面の大きさを指定
LET width=(txtsize+5)*15
LET height=(txtsize+5)*15
SET BITMAP SIZE width, height
SET WINDOW 10, -3, 10, -3  !座標系と桁、行を一致させる
SET TEXT FONT "MS ゴシック",txtsize
SET AREA COLOR 0
DIM cval(8)
!
! ***メイン処理***
10 CLEAR
  MAT cval=ZER
  LET lin=1
  LET comp$=""
  PLOT TEXT ,AT 9,-1 : "5桁までの計算(+−*=)"
  LET cval$=prob$(1)       !問題1行目
  LET lprb=LEN(cval$)-1
  LET cal$=RIGHT$(cval$,1)
  IF lprb<1 OR cal$="?" OR cal$="=" OR cal$=CHR$(13) THEN 10
  LET cval(1)=Val(LEFT$(cval$,lprb))
  PLOT TEXT ,AT 5,2 : cal$
  LET cval$=prob$(2)       !問題2行目
  LET r$=RIGHT$(cval$,1)
  IF r$="+" OR r$="-" OR r$="?" THEN 10
  LET cval$=LEFT$(cval$,LEN(cval$)-1)
  LET cval(2)=Val(cval$)
  !
  PLOT LINES: 5,1.9; -1,1.9    !答え
  LET c=0
  IF cal$="+" THEN
   LET cval(3)=cval(1)+cval(2)
   LET a$=LTRIM$(STR$(cval(3)))
  ELSEIF cal$="-" THEN
   LET cval(3)=cval(1)-cval(2)
   LET a$=LTRIM$(STR$(cval(3)))
  ELSEIF cal$="*" THEN      !掛け算
   LET lc=LEN(cval$)
   LET cval(lc)=0
   FOR c=0 TO lc-1
     LET m$=MID$(cval$,lc-c,1)
     LET cval(3+c)=cval(1)*VAL(m$)
     LET cval(lc+3)=cval(lc+3)+cval(3+c)*10^c
     PRINT cval(3+c)
     LET a$=LTRIM$(STR$(cval(3+c)))
     LET an$=ans$(a$,c+3,c)
   NEXT c
   LET cval(3)=cval(lc+3)
  ELSE
   LET lcal$="/"        !割り算の処理???
  END IF
  !
  LET lin=c+3
  PLOT LINES: 8,lin-1.1; -1,lin-1.1
  LET a$=LTRIM$(STR$(cval(3)))
  LET an$=ans$(a$,lin,0)
  SET LINE COLOR 4
  DRAW circle WITH SCALE(3)*SHIFT(3,3)  !丸を書く
  SET LINE COLOR 1
  SET TEXT COLOR 4
  PLOT TEXT ,AT 8,10:"良くできました!"
  SET TEXT COLOR 1
  CHARACTER INPUT CLEAR:ichr$  
19 GOTO 10
  END

    └後半です2004/01/26 09:34:30  ツリーへ

Re: 掛け算も追加した改良版です。 返事を書く
2004/01/26 09:34:30
後半です
  !
  !
  EXTERNAL FUNCTION prob$(i)  !***問題*** i:行
  LET num$="0123456789"
  FOR c=1 to 6
   CHARACTER INPUT CLEAR:ichr$
   LET nord=ORD(ichr$)
   LET n=POS(num$,ichr$)-1
   LET lcomp=LEN(comp$)
   IF n>-1 AND lcomp<5 THEN
     LET comp$=comp$ & ichr$
     PLOT AREA: 4,i ; -1,i ; -1,i-1; 4,i-1; 4,i ; 4,i
     FOR d=1 TO c
      PLOT TEXT,AT c-d,i : MID$(comp$,d,1)
     NEXT d
   ELSEIF ichr$="=" OR ichr$=CHR$(13) OR ichr$="+" OR ichr$="-" OR ichr$="*" THEN
     LET comp$=comp$ & ichr$
     EXIT FOR
   ELSE
     LET comp$="?"
     EXIT FOR
   END IF
  NEXT c
  LET prob$=comp$
  END FUNCTION
  !
  EXTERNAL FUNCTION ans$(a$,lin,d)  !***答え***
  LET ld=LEN(a$)
  FOR c=1 to ld
   PLOT TEXT ,AT c+d-0.7,lin : "□"
20  CHARACTER INPUT CLEAR:ichr$
   SET TEXT COLOR 0
   PLOT TEXT ,AT c+d-0.7,lin : "□"
   PLOT TEXT ,AT c+d-1,lin :jchr$
   PLOT TEXT ,AT c+d-1,lin :"X"
   SET TEXT COLOR 1
   PLOT TEXT ,AT c+d-1,lin :ichr$
   IF ichr$=MID$(a$,ld-c+1,1) THEN 29
   LET jchr$=ichr$
   SET TEXT COLOR 4
   PLOT TEXT ,AT c+d-1,lin :"X"
   SET TEXT COLOR 1
   GOTO 20
29 NEXT c
  END FUNCTION  

     └-----!掛け算の行から7行目の2004/01/26 09:44:15  ツリーへ

Re: 後半です 返事を書く
2004/01/26 09:44:15
-----!掛け算 の行から7行目の
PRINT cval(3+c)
を消してください。答えが表示されてしまいます。

      └哲さんありがとう もりの 2004/01/26 17:45:07  ツリーへ

Re: -----!掛け算の行から7行目の 返事を書く
もりの 2004/01/26 17:45:07
哲さんありがとう
ためしてみます
^^

       └もう少し修正してみました。2004/01/26 18:01:21  ツリーへ

Re: 哲さんありがとう 返事を書く
2004/01/26 18:01:21
もう少し修正してみました。
!  [筆算プログラム]
!
!数値と+−*=を入れて行けば計算確認できます。
!どの段階でも不適切なキーを押すと初期状態に戻ります。
!行番号19のすく前の最後の丸、文字は勝手に書き換えてください。
!
! cval:数値保存配列 cal$:演算子 
! ichr$:入力文字 jchr$:一時保存文字 comp$:比較文字列
!
!   ***前処理***
DECLARE EXTERNAL FUNCTION prob$
DECLARE EXTERNAL SUB ans$
SET ECHO "OFF"
LET txtsize=36        !文字、画面の大きさを指定
LET width=(txtsize+5)*15
LET height=(txtsize+5)*15
SET BITMAP SIZE width, height
SET WINDOW 10, -3, 10, -3  !座標系と桁、行を一致させる
SET AREA COLOR 0
SET LINE WIDTH 2
DIM cval(8)
!
! ***メイン処理***
10 CLEAR
  MAT cval=ZER
  LET lin=1
  LET comp$=""
  LET lprb=0
  LET cal$=""
  SET TEXT FONT "MS ゴシック",INT(txtsize/4*3)
  PLOT TEXT ,AT 9,-1 : "5桁までの筆算練習(+−*=)"
  SET TEXT FONT "MS ゴシック",txtsize
  LET cval$=prob$(1,lprb,cal$)       !問題1行目
  LET lprb=LEN(cval$)-1
  LET cal$=RIGHT$(cval$,1)
  IF lprb<1 OR cal$="?" OR cal$="=" OR cal$=CHR$(13) THEN 10
  LET cval(1)=Val(LEFT$(cval$,lprb))
  PLOT TEXT ,AT lprb,2 : cal$
  LET cval$=prob$(2,lprb,cal$)       !問題2行目
  LET r$=RIGHT$(cval$,1)
  IF r$="+" OR r$="-" OR r$="?" THEN 10
  LET cval$=LEFT$(cval$,LEN(cval$)-1)
  LET cval(2)=Val(cval$)
  !
  PLOT LINES: 5,1.95; -1,1.95    !答え
  LET c=0
  IF cal$="+" THEN
   LET cval(3)=cval(1)+cval(2)
  ELSEIF cal$="-" THEN
   LET cval(3)=cval(1)-cval(2)
  ELSEIF cal$="*" THEN      !掛け算
   LET lc=LEN(cval$)
   LET cval(lc)=0
   FOR c=0 TO lc-1
     LET m$=MID$(cval$,lc-c,1)
     LET cval(3+c)=cval(1)*VAL(m$)
     LET cval(lc+3)=cval(lc+3)+cval(3+c)*10^c
     LET a$=LTRIM$(STR$(cval(3+c)))
     CALL ans$(a$,c+3,c)
   NEXT c
   LET cval(3)=cval(lc+3)
  ELSE
   LET lcal$="/"        !割り算の処理???
  END IF
  !
  LET lin=c+3
  PLOT LINES: lin,lin-1.05; -1,lin-1.05
  LET a$=LTRIM$(STR$(cval(3)))
  CALL ans$(a$,lin,0)
  SET LINE COLOR 4
  !DRAW circle WITH SCALE(3)*SHIFT(3,3)  !丸を書く
  SET LINE COLOR 1
  SET TEXT COLOR 4
  PLOT TEXT ,AT 7,10:"良くできました!"
  SET TEXT COLOR 1
  CHARACTER INPUT CLEAR:ichr$  
19 GOTO 10
  END

        └!2004/01/26 18:03:19  ツリーへ

Re: もう少し修正してみました。 返事を書く
2004/01/26 18:03:19
  !
  !
  EXTERNAL FUNCTION prob$(i,lprb,cal$)  !***問題*** i:行
  LET num$="0123456789"
  FOR c=1 to 6
   CHARACTER INPUT CLEAR:ichr$
   LET nord=ORD(ichr$)
   LET n=POS(num$,ichr$)-1
   LET lcomp=LEN(comp$)
   IF n>-1 AND lcomp<5 THEN
     LET comp$=comp$ & ichr$
     PLOT AREA: 4,i ; -1,i ; -1,i-1; 4,i-1; 4,i ; 4,i
     FOR d=1 TO c
      PLOT TEXT,AT c-d,i : MID$(comp$,d,1)
     NEXT d
     IF lprb<c THEN LET lprb=c
     PLOT TEXT ,AT lprb,2 : cal$
   ELSEIF ichr$="=" OR ichr$=CHR$(13) OR ichr$="+" OR ichr$="-" OR ichr$="*" THEN
     LET comp$=comp$ & ichr$
     EXIT FOR
   ELSE
     LET comp$="?"
     EXIT FOR
   END IF
  NEXT c
  LET prob$=comp$
  END FUNCTION
  !
  EXTERNAL SUB ans$(a$,lin,d)  !***答え***
  LET ld=LEN(a$)
  FOR c=1 to ld
   PLOT TEXT ,AT c+d-0.7,lin : "□"
20  CHARACTER INPUT CLEAR:ichr$
   SET TEXT COLOR 0
   PLOT TEXT ,AT c+d-0.7,lin : "□"
   PLOT TEXT ,AT c+d-1,lin :jchr$
   PLOT TEXT ,AT c+d-1,lin :"X"
   SET TEXT COLOR 1
   PLOT TEXT ,AT c+d-1,lin :ichr$
   IF ichr$=MID$(a$,ld-c+1,1) THEN 29
   LET jchr$=ichr$
   SET TEXT COLOR 4
   PLOT TEXT ,AT c+d-1,lin :"X"
   SET TEXT COLOR 1
   GOTO 20
29 NEXT c
  END SUB  

         └externalはここには もりの 2004/01/26 18:08:28  ツリーへ

Re: ! 返事を書く
もりの 2004/01/26 18:08:28
externalはここには
かけませんと
エラーになってしまいます
直せますか?

          └と言われてもどこだか?2004/01/26 18:20:37  ツリーへ

Re: externalはここには 返事を書く
2004/01/26 18:20:37
と言われてもどこだか?
EXTERNALは4箇所しかありませんが、1行全部書き込むとかしてください。

           └33行目のfunction もりの 2004/01/26 18:33:30  ツリーへ

Re: と言われてもどこだか? 返事を書く
もりの 2004/01/26 18:33:30
33行目のfunction
のfでカ^ソルが点滅して
とまってしまうのです

            └33ではなく もりの 2004/01/26 18:34:19  ツリーへ

Re: 33行目のfunction 返事を書く
もりの 2004/01/26 18:34:19
33ではなく
3行目です

             └確認のためこの掲示板からコピーして実行し...2004/01/26 19:24:00  ツリーへ

Re: 33ではなく 返事を書く
2004/01/26 19:24:00
確認のためこの掲示板からコピーして実行しましたが、正常に動作しました。
コピーした時、1行の中に改行が入ったりミスが入ったりする可能性もあるので、
エラーの出た1行全体コピーしてこの掲示板に貼り付けてください。
そうすればこちらで調査できます。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。