易码技术论坛

 找回密码
 加入易码
搜索
查看: 105018|回复: 2

[原创][求助]BAS倒计时程序,谁有好的算法啊~~~

[复制链接]
发表于 2006-3-19 13:35:00 | 显示全部楼层
我不知道楼主做这个软件有什么作用~~~~~~~~~~
发表于 2006-3-23 18:11:00 | 显示全部楼层
我记得有个公式,你可以看看GGV上算星期的那个Bas软件,超快。
 楼主| 发表于 2006-3-18 18:58:30 | 显示全部楼层 |阅读模式
前段时间我编了一个BAS倒计时程序,但算法很笨,谁有好的算法啊?
我用的方法是三层for循环数天,15秒可计算391天(NC3000)
谁有更好的方法?
附程序:



使用说明:
由于本程序是在NC3000上写的所以只保证可在NC3000 GVBASIC+上正常使用,其他机器需要改PEEK值。(键位我用了NC3000那个酷似手机导航键的键)

功能键:
前一事件/后一事件:[跟读]/[变速]
跳转:[F3]
刷新(防止异常错误):[复读]
全部数据预读取:[P]
事件时间差:[录音]
加锁解码:[红外通讯]
当前时间查看:[发音]
退出:[跳出]
设置方法:
第1行:Z、DC为计算两个事件时间差对应的事件编号。
       L为想上锁的事件编号
第8行:AI=初始事件编号-1,MAX=最大事件个数-1
第9~67行:事件资料,YEA对应年,MOU对应月,DAY对应天,HOUR对应小时,MIN对应分钟

================分隔线================
附源代码:(红色部分为时间计算程序的代码)

0 POKE 1024,0:REM .|Power By zhang740|
1 Z=0C=1=99:K=LK=PEEK(1024)
2 REM 定义事件个数
3 DIM AS$(13),YEA(13),MOU(13),DAY(13),HOUR(13),MIN(13),VI(13),DAYX(13)
4 IF PK<>0 THEN GRAPHRINT " ","警告:","本程序无法正常工作!","请在Gvbasic+中运行!":END
5 REM =============
6 REM 注:8行的AI=初始-1,MAX=最大个数-1
7 REM =============
8 AI=0:MAX=1:TEXT
9 REM 第1个
10 AS$(0)="中考一模"
11 YEA(0)=2006:MOU(0)=04AY(0)=12:HOUR(0)=00:MIN(0)=00
12 REM 第2个
13 AS$(1)="中考"
14 YEA(1)=2006:MOU(1)=06AY(1)=29:HOUR(1)=08:MIN(1)=00
15 REM 第3个
16 AS$(2)="----"
17 YEA(2)=0000:MOU(2)=00:DAY(2)=00:HOUR(2)=00:MIN(2)=00
18 REM 第4个
19 AS$(3)="----"
20 YEA(3)=0000:MOU(3)=00:DAY(3)=00:HOUR(3)=00:MIN(3)=00
21 REM 第5个
22 AS$(4)="----"
23 YEA(4)=0000:MOU(4)=00:DAY(4)=00:HOUR(4)=00:MIN(4)=00
25 REM 第6个
26 AS$(5)="----"
27 YEA(5)=0000:MOU(5)=00:DAY(5)=00:HOUR(5)=00:MIN(5)=00
30 REM 第7个
31 AS$(6)="----"
32 YEA(6)=0000:MOU(6)=00:DAY(6)=00:HOUR(6)=00:MIN(6)=00
35 REM 第8个
36 AS$(7)="----"
37 YEA(7)=0000:MOU(7)=00:DAY(7)=00:HOUR(7)=00:MIN(7)=00
40 REM 第9个
41 AS$(8)="----"
42 YEA(8)=0000:MOU(8)=00:DAY(8)=00:HOUR(8)=00:MIN(8)=00
45 REM 第10个
46 AS$(9)="----"
47 YEA(9)=0000:MOU(9)=00:DAY(9)=00:HOUR(9)=00:MIN(9)=00
50 REM 第11个
51 AS$(10)="----"
52 YEA(10)=0000:MOU(10)=00:DAY(10)=00:HOUR(10)=00:MIN(10)=00
55 REM 第12个
56 AS$(11)="----"
57 YEA(11)=0000:MOU(11)=00:DAY(11)=00:HOUR(11)=00:MIN(11)=00
60 REM 第13个
61 AS$(12)="----"
62 YEA(12)=0000:MOU(12)=00:DAY(12)=00:HOUR(12)=00:MIN(12)=00
65 REM 第14个
66 AS$(13)="----"
67 YEA(13)=0000:MOU(13)=00:DAY(13)=00:HOUR(13)=00:MIN(13)=00
80 REM ============
88 REM 以下代码勿改
89 REM ============
90 N$(AI)=MID$(STR$(YEA(AI)),3,2)
91 Y$(AI)=STR$(MOU(AI)):IF LEN(Y$(AI))<2 THEN Y$(AI)="0"+Y$(AI)
92 R$(AI)=STR$(DAY(AI)):IF LEN(R$(AI))<2 THEN R$(AI)="0"+R$(AI)
95 MIN$(AI)=STR$(MIN(AI)):IF LEN(MIN$(AI))=1 THEN MIN$(AI)="0"+MIN$(AI)
96 AD$="倒计时"+CHR$(144+AI)+AS$(AI)
97 LOCATE 1,1RINT;AD$:SC$="还有:":IF AI=K THEN DD$="Sorry,该事件已加密!   ":99
98 DD$="至"+N$(AI)+"/"+Y$(AI)+"/"+R$(AI)+" "+STR$(HOUR(AI))+":"+MIN$(AI)+SC$+"Loading"
99 LOCATE 2,1:PRINT;DD$,"      ","     ";:IF PK<>0 THEN END
100 REM 数据准备
104 IF AI=K THEN FOR WW=1 TO 500:NEXT WW:GOTO 155
105 GOSUB 1000
110 ET=DAYX(AI)*24*3600+HOUR(AI)*3600+MIN(AI)*60
120 ER=ET-((PEEK(1020)+1)*24*3600+PEEK(1015)*3600+PEEK(1016)*60+PEEK(1017)/2)
125 IF SC$<>"已过:" THEN IF ER<0 THEN SC$="已过:":98
130 LOCATE 3,1:PRINT;ABS(ER);"s≈";INT(ABS(ER)/8640)/10;
140 LOCATE 4,1:PRINT "≈";ABS(INT(ER*10/3600)/10);"h";
145 LOCATE 5,1:PRINT "≈";ABS(INT(ER/60));"min";
150 IF PEEK(199)=143 THEN 200:ELSE IF LK=1 THEN LK=0:SF=0:SX=0:96
155 IF PEEK(192)=251 THEN IF AI<MAX THEN AI=AI+1:K=L:KK=1:90
156 IF PEEK(194)=251 THEN IF AI>0 THEN AI=AI-1:K=L:KK=1:90
157 IF PEEK(191)=251 THEN 8
158 IF PEEK(199)=155 THEN END
159 IF AI=K THEN IF PEEK(199)=161 THEN K=99:KK=38:90
160 IF KK=38 THEN IF PEEK(199)<>161 THEN K=L:KK=1:90
161 IF PEEK(199)=162 THEN GOTO 3000
164 IF AI=K THEN IF KK<>38 THEN 155
165 IF PEEK(199)=240 THEN GOTO 3600
166 IF PEEK(199)=158 THEN GOTO 3800
170 GOTO 120
200 PN=PEEK(1018):PY=PEEK(1019):PR=PEEK(1020):PS=PEEK(1015):PF=PEEK(1016):PM=PEEK(1017)/2
210 PN$=MID$(STR$(PN+1881),3,2):PY$=STR$(PY+1):PR$=STR$(PR+1):PS$=STR$(PS):PF$=STR$(PF)
220 PM$=STR$(PM)
230 IF SX=1 THEN 245 ELSE PP$=PN$+"/"+PY$+"/"+PR$:SX=1
240 LOCATE 1,1:PRINT;PP$;K=1
245 PX$=PS$+":"+PF$+":"+PM$
246 LOCATE 1,10:PRINT;PX$;K=1
250 GOTO 160
260 LOCATE 2,1:PRINT;DD$;:RETURN
999 END
1000 REM 日期计算
1005 IF VI(AI)=5 THEN 2300
1010 LN=PEEK(1018)+1881:LY=PEEK(1019)+1:LR=PEEK(1020)+1:DAYX=0:IO=99
1020 IF LN>YEA(AI)THEN 2000
1030 IF LN=YEA(AI)THEN IF LY>MOU(AI)THEN 2000
1040 IF LN=YEA(AI)THEN IF LY=MOU(AI)THEN IF LR>DAY(AI)THEN 2000
1050 FOR LN=LN TO YEA(AI)
1055 IF LY=13 THEN LY=1
1060 FOR LY=LY TO 12
1070 IF LY=4 OR LY=6 OR LY=9 OR LY=11 THEN II=30:ELSE IF LY=2 THEN II=28:ELSE II=31
1075 IF LR=IO THEN LR=1
1080 IO=II+1:FOR LR=LR TO II
1090 DAYX=DAYX+1
1100 IF LY=2 THEN IF LR=28 THEN IF INT(LN/4)=LN/4 THEN DAYX=DAYX+1
1110 IF LN=YEA(AI)THEN IF LY=MOU(AI)THEN IF LR=DAY(AI)THEN 1200
1120 NEXT
1130 NEXT
1140 NEXT
1200 VI(AI)=5:DAYX(AI)=DAYX+PEEK(1020):RETURN
2000 DAYX=0
2005 FOR LN=LN TO YEA(AI)STEP-1
2010 IF LY=0 THEN LY=12
2020 FOR LY=LY TO 1 STEP-1
2030 IF LY=4 OR LY=6 OR LY=9 OR LY=11 THEN II=30:ELSE IF LY=2 THEN II=28:ELSE II=31
2040 IF LR=0 THEN LR=II
2050 FOR LR=LR TO 1 STEP-1
2060 DAYX=DAYX+1
2070 IF LY=2 THEN IF LR=28 THEN IF INT(LN/4)=LN/4 THEN DAYX=DAYX+1
2080 IF LN=YEA(AI)THEN IF LY=MOU(AI)THEN IF LR=DAY(AI)THEN 2200
2090 NEXT
2100 NEXT
2110 NEXT
2200 VI(AI)=5:DAYX(AI)=PEEK(1020)-DAYX+2:RETURN
2300 RETURN

3000 REM 比较
3001 IF DAYX(Z)=0 THEN AI=Z:GOSUB 1000
3002 IF DAYX(DC)=0 THEN AI=DC:GOSUB 1000
3010 GRAPH
3020 LOCATE 1,1:PRINT "事件:";AS$(Z),"事件:";AS$(DC):LOCATE 1,19:PRINT "到"
3050 ET=(DAYX(Z)*24*3600+HOUR(Z)*3600+MIN(Z)*60)-(DAYX(DC)*24*3600+HOUR(DC)*3600+MIN(DC)

*60)
3055 ET=ABS(ET)
3060 LOCATE 3,1:PRINT;ET;"s≈";INT(ET/8640)/10;"D";
3065 LOCATE 4,1:PRINT "≈";INT(ET*10/3600)/10;"h","≈";INT(ET/60);"min";
3070 IF PEEK(199)<>162 THEN POKE 199,13:8
3080 :
3500 GOTO 3070
3600 REM 预算
3610 YS=AI:AI=0:GRAPH
3620 PRINT "***全部数据计算中***"
3622 LOCATE 3,7:PRINT;AI+1;"/";MAX+1"";INT((AI+1)/(MAX+1)*100);"%":BOX 30,50,130,60,0
3625 FOR AI=0 TO MAX:GOSUB 1000
3630 YX=100*((AI+1)/(MAX+1))+30
3640 LOCATE 3,7:PRINT;AI+1;"/";MAX+1"";INT((AI+1)/(MAX+1)*100);"%":BOX 30,50,YX,60,1
3645 :
3647 IF PEEK(199)=155 THEN 3660
3650 NEXT
3660 AI=YS:TEXT:POKE 199,13:GOTO 9
3800 REM 直接跳转
3810 TEXT:POKE 199,156
3820 LOCATE 1,1:KK$="跳转到(1-"+STR$(MAX+1)+"):":PRINT;KK$:INPUT "";AI:AI=AI-1
3830 IF AI<0 OR AI>MAX THEN PRINT "数据错误!";:KK$=INKEY$:3800
3840 GOTO 9

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-6-18 01:50 , Processed in 0.009364 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表