哲さんへ もりの 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行全体コピーしてこの掲示板に貼り付けてください。 そうすればこちらで調査できます。 |