新しく発言する EXIT インデックスへ
時計をつくったのですが。。。。。。

  時計をつくったのですが。。。。。。 N,Kobayashi 2006/07/08 13:32:48 
  TIME関数は秒以下の小数部分を持ちます(1/1... 白石 和夫 2006/07/08 18:25:16 
  │└ありがとうございます。 N,Kobayashi 2006/07/08 23:40:12 
  100REMTIMETEST012345????? 諏訪 雄治 2006/07/08 21:01:20 
  │└ありがとうございます。 N,Kobayashi 2006/07/08 23:49:33 
  │ └これを、試してください。 諏訪 雄治 2006/07/09 14:28:20 
  │  └早速、試してみます。 N, Kobayashi 2006/07/09 19:27:57 
  │   └毎秒のBEEPは、無理でした。残念 諏訪 雄治 2006/07/10 02:12:06 
  │    └BEEPの挿入場所で解決できないでしょうか? N, Kobayashi 2006/07/10 13:31:39 
  │     ├毎秒BEEPいけます。でも少しいじり過ぎまし... 諏訪 雄治 2006/07/10 17:38:52 
  │     └やはり、秒が抜ける。これは大丈夫。でも表... 諏訪 雄治 2006/07/11 02:00:06 
  │      └100REMTIMETEST2006-07-09 N, Kobayashi 2006/07/11 06:22:33 
  │       └100DO N, Kobayashi 2006/07/11 13:11:08 
  │        └これも試してみて。Windowsのインターバル割... 諏訪 雄治 2006/07/11 16:00:39 
  │         └試してみました。 N, Kobayashi 2006/07/11 18:40:35 
  │          └ありがとうございました。 N, Kobayashi 2006/07/11 19:09:46 
  グラフィックスを利用すれば、デジタル時計... 荒田浩二 2006/07/12 13:00:48 
   ├ありがとうございました。 N, Kobayashi 2006/07/12 16:22:06 
   ├良好ですね。スクロールの負荷がなくなって... 諏訪 雄治 2006/07/12 17:04:57 
   └みなさん、どうもありがとうございました。 N, Kobayashi 2006/07/12 18:50:17 
    └荒田さんのを少し変えてみました。2006/07/16 11:23:55 
     ├ありがとうございました。 N, Kobayashi 2006/07/16 12:36:49 
     └発想がすごいですね。 荒田浩二 2006/07/16 19:04:40 
      └実はこの方法は以前この掲示板で使ったこと...2006/07/16 19:47:15 

  時計をつくったのですが。。。。。。 N,Kobayashi 2006/07/08 13:32:48  ツリーへ

時計をつくったのですが。。。。。。 返事を書く
N,Kobayashi 2006/07/08 13:32:48
100 REM TIME TEST 012345?????
110 LET A=TIME-90
120 LET B=INT(A/60)
130 LET C=MOD(A,60)
140 PRINT USING" ##時": INT(B/60)
150 PRINT USING" ##分": MOD(B,60)
160 PRINT USING" ##秒": C
170 WAIT DELAY 0.955
180 BEEP
190 PRINT"岐阜県恵那市-----JAPAN"
200 GOTO 100
210 END


時計のプログラムをつくったのですが、ときどき「秒」が抜けたり、
59、0、1のように いきません。
どなたか ご教示ください。

  TIME関数は秒以下の小数部分を持ちます(1/1... 白石 和夫 2006/07/08 18:25:16  ツリーへ

Re: 時計をつくったのですが。。。。。。 返事を書く
白石 和夫 2006/07/08 18:25:16
TIME関数は秒以下の小数部分を持ちます(1/100秒の精度を持ちます)。
MOD関数はMOD(a,b)=a-INT(a/b)*bで定義されるので,MOD(A,60)は
整数にはなりません。PRINT USING "##"で表示すると小数点以下を四捨五入で丸めるので,小数部分が0.5より大きいと実際より先の秒を表示することになります。だから,その数値が60になることもあります。
170行のWAIT DELAY文の秒数0.955は微妙です。PRINT文の実行に要する時間はPRINT分の実行結果が増大するにつれて増加するので,実験的にちょうど1サイクルが1秒になるように決定するのは多分不可能です。
ループを利用して,TIME関数の小数部分を切り捨てた値が変化するのを待つことにすれば,新しい秒の始まりをとらえることができます。

100 LET t0=INT(TIME)
110 DO
120 DO UNTIL INT(TIME)>t0
130 WAIT DELAY 0.01
140 LOOP
150 LET t0=INT(TIME)
160 LET A=t0-90
170 LET B=INT(A/60)
180 LET C=MOD(A,60)
190 PRINT USING" ##時": INT(B/60)
200 PRINT USING" ##分": MOD(B,60)
210 PRINT USING" ##秒": INT(C)
220 BEEP
230 PRINT"岐阜県恵那市-----JAPAN"
240 LOOP
250 END

LET A=TIME-90
の意味がよく分からないのでそのままにしてあります。

  │└ありがとうございます。 N,Kobayashi 2006/07/08 23:40:12  ツリーへ

Re: TIME関数は秒以下の小数部分を持ちます(1/1... 返事を書く
N,Kobayashi 2006/07/08 23:40:12
ありがとう ございます。
秒以下のことを 考慮してませんでした。
それで「秒」が抜ける時があることが、理解出来ました。
LET A=TIME−90 の「−90」は、私のプログラムでは
「−90」を入れるとNTTの時報に合います。
ご多用のところ、ありがとう ございました。

  100REMTIMETEST012345????? 諏訪 雄治 2006/07/08 21:01:20  ツリーへ

Re: 時計をつくったのですが。。。。。。 返事を書く
諏訪 雄治 2006/07/08 21:01:20
100 REM TIME TEST 012345?????
110 LET A=INT(TIME)-90
120 LET B=INT(A/60)
130 LET C=MOD(A,60)
140 PRINT USING" ##時": INT(B/60)
150 PRINT USING" ##分": MOD(B,60)
160 PRINT USING" ##秒": C
170 WAIT DELAY 0.955
180 BEEP
190 PRINT"岐阜県恵那市-----JAPAN"
200 GOTO 100
210 END

上のように
根元の TIME に、INT() をつけて、もう一度試してみて。

  │└ありがとうございます。 N,Kobayashi 2006/07/08 23:49:33  ツリーへ

Re: 100REMTIMETEST012345????? 返事を書く
N,Kobayashi 2006/07/08 23:49:33
ありがとう ございます。
TIME関数は「秒以下の小数を持つ」ということを、失念して
いました。
それで、「秒」が抜けることが理解出来ました。
INT( )をつけて、もう一度試してみます。
ありがとう ございました。

  │ └これを、試してください。 諏訪 雄治 2006/07/09 14:28:20  ツリーへ

Re: ありがとうございます。 返事を書く
諏訪 雄治 2006/07/09 14:28:20
これを、試してください。

100 REM TIME TEST 012345?????
!−−− 出だし合わせ −−−
LET X=INT(TIME)
!−−− 時計の開始 −−− 白石先生のように、秒の境界を探す。
110 LET A=INT(TIME) ! NTTの時報に合わせるときは、
IF X=A THEN 110 ! コントロールパネルの日付と時刻で。
LET X=A ! TIME-90 は、23:58'30 ~23:59'59 に影響。
!−−−
120 LET B=INT(A/60)
130 LET C=MOD(A,60)
140 PRINT USING" ##時": INT(B/60)
150 PRINT USING" ##分": MOD(B,60)
160 PRINT USING" ##秒": C
190 PRINT"岐阜県恵那市-----JAPAN"
BEEP
WAIT DELAY 0.99 ! なぜか?ここに 0.95 以上の WAIT が
200 GOTO 110 ! 無いと、BEEP が時々鳴らない?白石先生に?
210 END ! 条件: Windows98SE 500MHz & basic Ver5.14

  │  └早速、試してみます。 N, Kobayashi 2006/07/09 19:27:57  ツリーへ

Re: これを、試してください。 返事を書く
N, Kobayashi 2006/07/09 19:27:57
早速、試してみます。
いろいろ自分ひとりでやっていますが、
よいプログラムが なかなかできません。
貴重なアドバイスを感謝します。
TIME−90が23:59:59で影響するとは、
思いませんでした。試していません。
ありがとう ございました。

  │   └毎秒のBEEPは、無理でした。残念 諏訪 雄治 2006/07/10 02:12:06  ツリーへ

Re: 早速、試してみます。 返事を書く
諏訪 雄治 2006/07/10 02:12:06
毎秒のBEEPは、無理でした。残念

100 REM TIME TEST 012345?????
!−−− 出だし合わせ −−−
LET X=INT(TIME)
!−−− 時計の開始 −−−
110 LET A=INT(TIME)
IF X=A THEN 110
LET X=A
120 LET B=INT(A/60)
130 LET C=MOD(A,60)
140 PRINT USING" ##時": INT(B/60)
150 PRINT USING" ##分": MOD(B,60)
160 PRINT USING" ##秒": C
190 PRINT"岐阜県恵那市-----JAPAN"
IF MOD(A,2)=0 THEN BEEP ! 毎秒は、無理でした。
WAIT DELAY 0.8 ! WAIT が無いとファンが回り電池の消耗早い。
200 GOTO 110 ! 0.8 以上では、秒の表示が、時々飛ぶ。
210 END ! 条件: Windows98SE 500MHz basic Ver5.90

  │    └BEEPの挿入場所で解決できないでしょうか? N, Kobayashi 2006/07/10 13:31:39  ツリーへ

Re: 毎秒のBEEPは、無理でした。残念 返事を書く
N, Kobayashi 2006/07/10 13:31:39
BEEP の挿入場所で解決できないでしょうか?

それから、私の「TIME−90」は、
解決しました。いろいろ考えましたが、
私のシステム(PC)が90秒進んでいました。
それでコントロール ハ゜ネルからPCの
クロックを合わせたら、「−90」は
解決しました。
アドバイスを ありがとう ございました。

  │     ├毎秒BEEPいけます。でも少しいじり過ぎまし... 諏訪 雄治 2006/07/10 17:38:52  ツリーへ

Re: BEEPの挿入場所で解決できないでしょうか? 返事を書く
諏訪 雄治 2006/07/10 17:38:52
毎秒BEEPいけます。でも少しいじり過ぎました。ごめん。

100 REM TIME TEST 012345?????
!−−− 出だし合わせ −−−
LET X$=TIME$
!−−− 時計の開始 −−−
110 LET A$=TIME$
IF X$=A$ THEN 110
LET X$=A$
PRINT " ";mid$(A$,1,2);"時"
PRINT " ";mid$(A$,4,2);"分"
PRINT " ";mid$(A$,7,2);"秒"
PRINT "岐阜県恵那市-----JAPAN"
BEEP
WAIT DELAY 0.95 ! やはり0.95以上ないとBEEPが抜ける。
200 GOTO 110
210 END ! 条件: Windows98SE 500MHz basic Ver5.90

  │     └やはり、秒が抜ける。これは大丈夫。でも表... 諏訪 雄治 2006/07/11 02:00:06  ツリーへ

Re: BEEPの挿入場所で解決できないでしょうか? 返事を書く
諏訪 雄治 2006/07/11 02:00:06
やはり、秒が抜ける。これは大丈夫。でも表示が貧しい。
失敗ばかりで、すみません。

100 REM TIME TEST 012345?????
!−−− 出だし合わせ −−−
LET X$=TIME$
!−−− 時計の開始 −−−
110 LET A$=TIME$
IF X$=A$ THEN 110
LET X$=A$
PRINT A$;" 岐阜県恵那市-----JAPAN"
BEEP
WAIT DELAY 0.95 ! やはり0.95以上ないとBEEPが抜ける。
200 GOTO 110 !
210 END ! 条件: Windows98SE 500MHz basic Ver5.90

  │      └100REMTIMETEST2006-07-09 N, Kobayashi 2006/07/11 06:22:33  ツリーへ

Re: やはり、秒が抜ける。これは大丈夫。でも表... 返事を書く
N, Kobayashi 2006/07/11 06:22:33
100 REM TIME TEST 2006-07-09
110 DO
120 DO UNTIL INT(TIME)>A
130 WAIT DELAY 0.01
140 LOOP
150 LET A=TIME
160 LET B=A/60
170 LET C=MOD(A,60)
180 LET D=B/60
190 LET E=MOD(B,60)
200 WAIT DELAY 0.911
210 PRINT"***************"
220 PRINT USING"##.#############時": D
230 PRINT USING"##.############分": E
240 PRINT USING"##.##秒":C
250 BEEP
260 LOOP
270 END

これでも秒が抜ける。
どうしてか、わかりませんん。

PC(システム)のクロックが
影響しているかもしれません?

  │       └100DO N, Kobayashi 2006/07/11 13:11:08  ツリーへ

Re: 100REMTIMETEST2006-07-09 返事を書く
N, Kobayashi 2006/07/11 13:11:08
100 DO
110 LET A$=TIME$
120 PRINT A$
130 PRINT"********************"
140 BEEP
150 WAIT DELAY 0.955
160 LOOP
170 END


「TIME$」を 教えていただき
ありがとう ございました。

PCの時計が 影響しているということも
わかって 感謝しています。

  │        └これも試してみて。Windowsのインターバル割... 諏訪 雄治 2006/07/11 16:00:39  ツリーへ

Re: 100DO 返事を書く
諏訪 雄治 2006/07/11 16:00:39
これも試してみて。Windows のインターバル割り込みが、
時間を扱うプログラムを、難しくしています。
秒抜けだけは、無いと思います。
PRINT A$ だけにすれば、BEEP抜けも無くなる感じですが、
これが、よく分からない。


LET A$=TIME$
DO
LET X$=A$
DO UNTIL X$<>A$
WAIT DELAY 0.000001
LET A$=TIME$
LOOP
BEEP
PRINT A$
PRINT "********************"
LOOP
END



LET A=INT(TIME)
DO
LET t0=A
DO UNTIL t0<>A
WAIT DELAY 0.000001
LET A=INT(TIME)
LOOP
BEEP
LET B=INT(A/60)
LET C=MOD(A,60)
PRINT USING " ##時": INT(B/60)
PRINT USING " ##分": MOD(B,60)
PRINT USING " ##秒": C
PRINT "岐阜県恵那市-----JAPAN"
LOOP
END

  │         └試してみました。 N, Kobayashi 2006/07/11 18:40:35  ツリーへ

Re: これも試してみて。Windowsのインターバル割... 返事を書く
N, Kobayashi 2006/07/11 18:40:35
試してみました。
秒が抜けないですね。

ありがとう ございました。

  │          └ありがとうございました。 N, Kobayashi 2006/07/11 19:09:46  ツリーへ

Re: 試してみました。 返事を書く
N, Kobayashi 2006/07/11 19:09:46
ありがとう ございました。
   DO UNTIL X$<>A$
WAIT DELAY 0.000001
ここが 重要なところですね。
感謝、感謝です。


  グラフィックスを利用すれば、デジタル時計... 荒田浩二 2006/07/12 13:00:48  ツリーへ

Re: 時計をつくったのですが。。。。。。 返事を書く
荒田浩二 2006/07/12 13:00:48
グラフィックスを利用すれば、デジタル時計ふうの表示ができます。

REM 時計表示
SET WINDOW 0,1,0,1
SET TEXT FONT " ",14
LET x=0.1
LET y=0.9
LET t0=INT(TIME)
DO
LET t=INT(TIME)
IF t<>t0 THEN
LET h=INT(t/3600)
LET m=MOD(INT(t/60),60)
LET s=MOD(t,60)
beep
clear
PLOT TEXT ,AT x,y ,USING "%%時 %%分 %%秒 岐阜県恵那市・・・・・JAPAN" : h,m,s
WAIT DELAY 0.9 ! PCの性能によって、数値を下げる
END IF
LET t0=t
LOOP
END

   ├ありがとうございました。 N, Kobayashi 2006/07/12 16:22:06  ツリーへ

Re: グラフィックスを利用すれば、デジタル時計... 返事を書く
N, Kobayashi 2006/07/12 16:22:06
ありがとう ございました。

早速 試してみましたが、良好です。

   ├良好ですね。スクロールの負荷がなくなって... 諏訪 雄治 2006/07/12 17:04:57  ツリーへ

Re: グラフィックスを利用すれば、デジタル時計... 返事を書く
諏訪 雄治 2006/07/12 17:04:57
良好ですね。スクロールの負荷がなくなって、
さらに、高速化しているようです。
IF THEN から、行番号が、取れて気持ちがいい。
私も、文字列で、真似てみました。

REM 時計表示
SET WINDOW 0,10,0,10
SET TEXT FONT " ",14
LET w$=TIME$
DO
LET t$=TIME$
IF w$<>t$ THEN
beep
clear
PLOT TEXT ,AT 1,9, USING "##時 ##分 ##秒":left$(t$,2),mid$(t$,4,2),right$(t$,2)
PLOT TEXT ,AT 4,9 :"岐阜県恵那市-----JAPAN"
LET w$=t$
WAIT DELAY 0.95 !要調整。大きすぎると秒抜け、小さすぎるとBEEP抜け。
END IF
LOOP
END

   └みなさん、どうもありがとうございました。 N, Kobayashi 2006/07/12 18:50:17  ツリーへ

Re: グラフィックスを利用すれば、デジタル時計... 返事を書く
N, Kobayashi 2006/07/12 18:50:17
みなさん、どうも ありがとう ございました。

感謝しています。

    └荒田さんのを少し変えてみました。2006/07/16 11:23:55  ツリーへ

Re: みなさん、どうもありがとうございました。 返事を書く
2006/07/16 11:23:55
荒田さんのを少し変えてみました。
目にやさしい表示になるかな?

REM 時計表示
SET WINDOW 0,1,0,1
SET TEXT FONT " ",14
LET x=0.1
LET y=0.9
LET t0=INT(TIME)
DO
LET t=INT(TIME)
IF t<>t0 THEN
LET h=INT(t/3600)
LET m=MOD(INT(t/60),60)
LET s=MOD(t,60)
beep
SET TEXT COLOR 0
PLOT TEXT ,AT x,y ,USING "%%時 %%分 %%秒" : h0,m0,s0
SET TEXT COLOR 1
PLOT TEXT ,AT x,y ,USING "%%時 %%分 %%秒 岐阜県恵那市・・・・・JAPAN" : h,m,s
LET h0=h
LET m0=m
LET s0=s
WAIT DELAY 0.9 ! PCの性能によって、数値を下げる
END IF
LET t0=t
LOOP
END

     ├ありがとうございました。 N, Kobayashi 2006/07/16 12:36:49  ツリーへ

Re: 荒田さんのを少し変えてみました。 返事を書く
N, Kobayashi 2006/07/16 12:36:49
ありがとう ございました。
良好です。

     └発想がすごいですね。 荒田浩二 2006/07/16 19:04:40  ツリーへ

Re: 荒田さんのを少し変えてみました。 返事を書く
荒田浩二 2006/07/16 19:04:40
発想がすごいですね。
私も投稿後、画面を CLEAR するより、
SET AREA COLOR 0 と PLOT AREA を使い白く長方形に塗った方が
ちらつきを抑えられると気づいたのですが、
白く印字するというのは思いつきませんでした。
昔のタイプライターの修正用リボンを思い出しました。
勉強になりました。ありがとうございました。

      └実はこの方法は以前この掲示板で使ったこと...2006/07/16 19:47:15  ツリーへ

Re: 発想がすごいですね。 返事を書く
2006/07/16 19:47:15
実はこの方法は以前この掲示板で使ったことがあります。
十進BASICは計算速度は文句なしなのですが描画速度が気になっていました。
特に、グラフィック画面上でクリックだけでデータ処理するプログラムを作ったのですが
データを順送りで表示し直すために待ち時間が気になりました。
それで、テストをして上書き消去の方法が最も早いことがわかりました。
また、表示の時はいくつか並べてPrintするより文字関数で1文字列にまとめてから表示すると速度を改善できます。
私のPCのスペックが低いのも原因でしょうが表示に問題があるときは試してみてください。


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