|
|
|
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
| |
|
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は小数点が何分の何かを表す変数でよかったですか?
以上
| |
|
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のところでエラーになると思います。
|
|
2011/4/11(Mon) 18:43:00|NO.38331
>1023のところでエラーになると思います。
1023でエラーが出ました。
環境はwinxpsp3(HSP3.3β1)です。
|
|
2011/4/13(Wed) 20:30:37|NO.38368
>環境はwinxpsp3(HSP3.3β1)です。
いや書かなくていいと思いますよ
環境依存じゃないわけだし
電卓かぁ。ワタクシ少しソース作りましょうか
どうせ、ソフトウェアにしないから。だってWindowsのCALC.EXEあるから。
|
|