HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0410
mxdiego9電卓を作っています。小数点が、うまく動作しません。4未解決


mxdiego9

リンク

2011/4/10(Sun) 17:11:57|NO.38302

初心者です。
電卓を作っているのですが、
小数点を、打つところがうまく動作しないので、
修正を、お願いします。
(長いスクリプトで、しかも分かりずらくてすみません)

screen 0,500,350 title "電卓!" *buttons objsize 49,49 buttonx=100 buttony=110 font "",20 :pos buttonx ,buttony :button "MC", *mc :pos buttonx+50 ,buttony :button "7" , *_7 :pos buttonx+100,buttony :button "8" , *_8 :pos buttonx+150,buttony :button "9" , *_9 :pos buttonx+200,buttony :button "÷", *÷ :pos buttonx+250,buttony :button "C" , *cr :pos buttonx ,buttony+50 :button "RM", *rm :pos buttonx+50 ,buttony+50 :button "4" , *_4 :pos buttonx+100,buttony+50 :button "5" , *_5 :pos buttonx+150,buttony+50 :button "6" , *_6 :pos buttonx+200,buttony+50 :button "X" , *_X :pos buttonx+250,buttony+50 :button "BACK" ,*BACK :pos buttonx ,buttony+100:button "M-" ,*m_ :pos buttonx+50 ,buttony+100:button "1" , *_1 :pos buttonx+100,buttony+100:button "2" , *_2 :pos buttonx+150,buttony+100:button "3" , *_3 :pos buttonx+200,buttony+100:button "-" , *__ :pos buttonx+250,buttony+100:button "√" ,*√ :pos buttonx ,buttony+150:button "M+" , *mp :pos buttonx+50 ,buttony+150:button "0" , *_0 :pos buttonx+100,buttony+150:button "+/-" , *p__ :pos buttonx+150,buttony+150:button "." , *_t :pos buttonx+200,buttony+150:button "+" , *_p :pos buttonx+250,buttony+150:button "=" , *_e goto *main *mc memory=0 goto *main *_7 back_1=a if t=0:a=a*10+7 if t=1:a=a+(7/tt):tt=tt*10 goto *main *_8 back_1=a if t=0:a=a*10+8 if t=1:a=a+(8/tt):tt=tt*10 goto *main *_9 back_1=a if t=0:a=a*10+9 if t=1:a=a+(9/tt):tt=tt*10 goto *main *÷ b=a:a=0.0:c=4 stop *cr back_1=a a=0.0 t=0 goto *main *rm back_1=a a=memory goto *main *_4 back_1=a if t=0:a=a*10+4 if t=1:a=a+4/tt:tt=tt*10 goto *main *_5 back_1=a if t=0:a=a*10+5 if t=1:a=a+5/tt:tt=tt*10 goto *main *_6 back_1=a if t=0:a=a*10+6 if t=1:a=a+6/tt:tt=tt*10 goto *main *_X b=a:a=0.0:c=3 stop *back a=back_1 goto *main *m_ memory=memory-a goto *main *_1 back_1=a if t=0:a=a*10+1 if t=1:a=a+1/tt:tt=tt*10 goto *main *_2 back_1=a if t=0:a=a*10+2 if t=1:a=a+2/tt:tt=tt*10 goto *main *_3 back_1=a if t=0:a=a*10+3 if t=1:a=a+3/tt:tt=tt*10 goto *main *__ b=a:a=0.0:c=2 stop *√ back_1=a if a<0:a=0.0 a=sqrt(a) goto *main *mp memory=memory+a goto *main *_0 back_1=a if t=0:a=a*10+0 if t=1:a=a+0/tt:tt=tt*10 goto *main *p__ back_1=a a*(-1) goto *main *_t t=1 tt=10 stop *_p b=a:a=0.0:c=1 stop *_e if c=1:a=b+a if c=2:a=b-a if c=3:a=a*b if c=4:a=a/b c=0 goto *main *main font "",40 objmode 2, pos 50,50 a_mojiretu=str(a) mesbox a_mojiretu,400,50,4*screen_botan stop




この記事に返信する


takaya

リンク

2011/4/10(Sun) 17:42:34|NO.38303

こんな感じでしょうか?
しかし、これでは普通の電卓のように8+7+6=などようなことをするときに
8+7=15+6=としなければいけませんよ(笑)


screen 0,500,350 title "電卓!" a=0.0 *buttons objsize 49,49 buttonx=100 buttony=110 font "",20 :pos buttonx ,buttony :button "MC", *mc :pos buttonx+50 ,buttony :button "7" , *_7 :pos buttonx+100,buttony :button "8" , *_8 :pos buttonx+150,buttony :button "9" , *_9 :pos buttonx+200,buttony :button "÷", *÷ :pos buttonx+250,buttony :button "C" , *cr :pos buttonx ,buttony+50 :button "RM", *rm :pos buttonx+50 ,buttony+50 :button "4" , *_4 :pos buttonx+100,buttony+50 :button "5" , *_5 :pos buttonx+150,buttony+50 :button "6" , *_6 :pos buttonx+200,buttony+50 :button "X" , *_X :pos buttonx+250,buttony+50 :button "BACK" ,*BACK :pos buttonx ,buttony+100:button "M-" ,*m_ :pos buttonx+50 ,buttony+100:button "1" , *_1 :pos buttonx+100,buttony+100:button "2" , *_2 :pos buttonx+150,buttony+100:button "3" , *_3 :pos buttonx+200,buttony+100:button "-" , *__ :pos buttonx+250,buttony+100:button "√" ,*√ :pos buttonx ,buttony+150:button "M+" , *mp :pos buttonx+50 ,buttony+150:button "0" , *_0 :pos buttonx+100,buttony+150:button "+/-" , *p__ :pos buttonx+150,buttony+150:button "." , *_t :pos buttonx+200,buttony+150:button "+" , *_p :pos buttonx+250,buttony+150:button "=" , *_e goto *main *mc memory=0 goto *main *_7 back_1=a if t=0:a=a*10+7 if t=1:a=a+(7.0/tt):tt=tt*10 goto *main *_8 back_1=a if t=0:a=a*10+8 if t=1:a=a+(8.0/tt):tt=tt*10 goto *main *_9 back_1=a if t=0:a=a*10+9 if t=1:a=a+(9.0/tt):tt=tt*10 goto *main *÷ b=a:a=0.0:c=4 tt=1 t=0 stop *cr back_1=a a=0.0 t=0 goto *main *rm back_1=a a=memory goto *main *_4 back_1=a if t=0:a=a*10+4 if t=1:a=a+4.0/tt:tt=tt*10 goto *main *_5 back_1=a if t=0:a=a*10+5 if t=1:a=a+5.0/tt:tt=tt*10 goto *main *_6 back_1=a if t=0:a=a*10+6 if t=1:a=a+6.0/tt:tt=tt*10 goto *main *_X b=a:a=0.0:c=3 tt=1 t=0 stop *back a=back_1 goto *main *m_ memory=memory-a goto *main *_1 back_1=a if t=0:a=a*10+1 if t=1:a=a+1.0/tt:tt=tt*10 goto *main *_2 back_1=a if t=0:a=a*10+2 if t=1:a=a+2.0/tt:tt=tt*10 goto *main *_3 back_1=a if t=0:a=a*10+3 if t=1:a=a+3.0/tt:tt=tt*10 goto *main *__ b=a:a=0.0:c=2 tt=1 t=0 stop *√ back_1=a if a<0:a=0.0 a=sqrt(a) goto *main *mp memory=memory+a goto *main *_0 back_1=a if t=0:a=a*10+0 if t=1:a=a+0.0/tt:tt=tt*10 goto *main *p__ back_1=a a*(-1) goto *main *_t t=1 tt=10 stop *_p b=a:a=0.0:c=1 tt=1 t=0 stop *_e if c=1:a=b+a if c=2:a=b-a if c=3:a=a*b if c=4:a=a/b c=0 tt=1 t=0 goto *main *main font "",40 objmode 2, pos 50,50 a_mojiretu=str(a) mesbox a_mojiretu,400,50,4*screen_botan stop

;(セミコロン)でコメント行(実行されない行)を加えることができます
これをしとくことによって回答者も回答しやすくなります。

見ていくのに時間がかかりました(笑)
ttは小数点が何分の何かを表す変数でよかったですか?

以上



HK2

リンク

2011/4/10(Sun) 18:43:11|NO.38310

はじめまして。

電卓の画面を毎回mesboxで表示させているようですが、その方法はよくありません。
mesboxは画面上にメッセージボックスを新しく作る命令なので、
このスクリプトでは見えませんが、裏で重なっています。
こちらでは200回ほどボタンをしていくと、表示がおかしくなりました。
1000回ほどボタンを押されるとエラーになると思います。

起動時にmesboxを1度呼び出して、その後の更新はobjprmを使ってください。
mesboxを呼びだした直後のstatの値をどこかの変数に保存して、objprmのp1に入れてください。


repeat 2000 pos 5,5 string=str(cnt) mesbox string,100,100,4 title str(cnt) wait 0 loop

このスクリプトではmesboxを何度も呼び出してHSPを落としています。
また、だんだんとタイトルバーの数字が進むのが遅くなってきます。
pos 5000,5に変更して早く進めると、タイトルが1023になったところでエラーになります。
pos 5,5の状態ではあまりにも時間がかかりそうなのでやっていませんが、
1023のところでエラーになると思います。



skyblue

リンク

2011/4/11(Mon) 18:43:00|NO.38331

>1023のところでエラーになると思います。
1023でエラーが出ました。
環境はwinxpsp3(HSP3.3β1)です。



backdrop

リンク

2011/4/13(Wed) 20:30:37|NO.38368

>環境はwinxpsp3(HSP3.3β1)です。
いや書かなくていいと思いますよ
環境依存じゃないわけだし

電卓かぁ。ワタクシ少しソース作りましょうか
どうせ、ソフトウェアにしないから。だってWindowsのCALC.EXEあるから。



ONION software Copyright 1997-2023(c) All rights reserved.