易码技术论坛

 找回密码
 加入易码
搜索
查看: 1538785|回复: 27

BASIC小技巧

[复制链接]
发表于 2005-3-19 17:46:00 | 显示全部楼层
可以在程序中预先腾出一块空间来存储数据,这样poke ,clear,peek不就行了。想要多大就留多大,也挺好用的!
 楼主| 发表于 2005-3-13 16:56:00 | 显示全部楼层
还有一些基本技巧..
〖BASIC小技巧〗
1.IF 语句后的行号前可以不加GOTO.如IF A>0 THEN 100
2.在BASIC里.如果(A=1)成立则结果为1.不成立为0.所以可以优化一些语句.
例:IF X=0 THEN X=1
    IF X=1 THEN X=0
可化为X=X=0
3.按键判别的化简
也用到了2中的方法.但又用了一个 ON A GOTO1,2,3
例 A$=INKEY$
   IF A$="b" THEN GOTO 100
   IF A$="n" THEN GOTO 200
   IF A$="m" THEN GOTO 300
化简后:A=ASC( INKEY$ ):ON (A=98)+(A=110)*2+(A=109)*3 GOTO 100,200,300
可能当选择多时效果更好.
4.四舍五入
其实这很简单.
A=INT(A+.5)
5.在BASIC中可以留一个"0 : "这一行.方便跳行想去8000就在0那打7999(请确定那是空行),一下就跳过去了.
                                                                                                            BY:谷虫(cc90042938)
 楼主| 发表于 2005-3-13 17:33:00 | 显示全部楼层
大家可以把自己的心得写在这里.大家一起共享!
发表于 2005-3-15 17:17:00 | 显示全部楼层
要防止out of memory(这个单词楼主拼错了哦……汗……)
尽量避免对字符串的定义就是A$=""这种
因为每次执行此类语句BASIC都会新开一块内存存放这个字符串变量
即使你是A$=A$+""这样
BASIC照样会新开一块内存
这类语句一多~自然很容易 out of memory
发表于 2005-3-19 21:45:00 | 显示全部楼层
首先把各变量储存为“*.dat”文件;然后CLEAR;最后在读取“*.dat”。这样也许会更好一些!

参考:

10 L=10

20 OPEN "SU" FOR OUTPUT AS #1

30 WRITE #1,L:CLOSE #1

40 CLEAR

50 OPEN "SU" FOR INPUT AS #1

60 INPUY #1,L

70 END

[em07][em07]
发表于 2005-3-20 10:48:00 | 显示全部楼层
那样不是又要占16k!
 楼主| 发表于 2005-3-20 14:57:00 | 显示全部楼层
你的时间:2600至少4秒.
我的时间:2秒.
速度就是优势.
发表于 2005-3-20 16:48:00 | 显示全部楼层
就是吗。
时间就是金钱。
发表于 2005-3-22 19:14:00 | 显示全部楼层
必要的处理用汇编完成.....
[fly]够强吧[/fly]
发表于 2005-3-25 12:17:00 | 显示全部楼层
我的建议是在BASIC中不要使用字符串
在NC2600中
$1200-$19bf这里没有用到,相对比较稳定,可以使用这个区域的内存
有人会问为什么无故 出现NEXT WITHOUT FOR 这里说明一下出错原因:
看程序
10 FOR I=0 TO 100
20 IF I>50 THEN GOTO 40
30 NEXT
40 FOR I=0 TO 7
50 PRINT "会出错哦";
60 NEXT
这就会出现NEXT WITHOUT FOR的错误
如果这个循环要求速度不太高的话,应该使用GOTO代替
哎,不像LAVA,gvb只有count没有break呵呵
造成RETURN WITHOUT GOSUB的原因
有可能为:
10 FOR I=0 TO 100
20 GOSUB 100
30 NEXT
100 TEMP=I
110 FOR I=0 TO 7
120 PRINT "出错拉!";
130 REM 再次使用了FOR,而且是同一个变量,这时虽然不会出现NEXT WITHOUT FOR的错误,但会出现RETURN WITHOUT GOSUB的错误
140 NEXT
150 RETURN
还有关于屏幕最最右下角的那个位置(LOCATE 5,20 汗)
基本笨蛋都知道需要POKE进去,但有些问POKE进去就是显示不出来,为什么呢~?
大家一般的做法都是POKE 803,xxRINT ;
这样不会出错
POKE 803,xxOCATE 5,1RINT ;
也不会出错
但是如果这样就会出错了
POKE 803,xxOCATE 5,1RINT "AAA";
这样的话就显示不出来了
 楼主| 发表于 2005-3-25 20:29:00 | 显示全部楼层
我的建议是在BASIC中不要使用字符串
这个.....我看怎么也不可能啊.....
PS:  L兄潜水多日......欢迎.....
发表于 2005-3-26 16:41:00 | 显示全部楼层
可能啊~当你需要显示字符串的时候~你用POKE的方法直接从内存中读数据到字符缓存再刷新即可~
发表于 2005-5-21 14:40:00 | 显示全部楼层
用POKE是很好的办法,因为……
我不会6502……
对了,谁会6502啊,咋用6502OPEN DAT文件啊?
发表于 2005-6-19 20:14:00 | 显示全部楼层
要用那个数据就读哪个,并同一变量保存。虽然速度慢,但不会溢出。
发表于 2005-8-11 11:03:00 | 显示全部楼层
用poke 很好
不过706到800那一段不太好
nc1020我是用5200到5400那段
pc1000我是用10000到12000那一段
可能回对名片产生影响
发表于 2005-8-16 08:51:00 | 显示全部楼层
以下是引用cc90042938在2005-3-13 16:56:58的发言:[BR]还有一些基本技巧..
〖BASIC小技巧〗
1.IF 语句后的行号前可以不加GOTO.如IF A>0 THEN 100
2.在BASIC里.如果(A=1)成立则结果为1.不成立为0.所以可以优化一些语句.
例:IF X=0 THEN X=1
    IF X=1 THEN X=0
可化为X=X=0
3.按键判别的化简
也用到了2中的方法.但又用了一个 ON A GOTO1,2,3
例 A$=INKEY$
   IF A$="b" THEN GOTO 100
   IF A$="n" THEN GOTO 200
   IF A$="m" THEN GOTO 300
化简后:A=ASC( INKEY$ ):ON (A=98)+(A=110)*2+(A=109)*3 GOTO 100,200,300
可能当选择多时效果更好.
4.四舍五入
其实这很简单.
A=INT(A+.5)
5.在BASIC中可以留一个"0 : "这一行.方便跳行想去8000就在0那打7999(请确定那是空行),一下就跳过去了.
                                                                                                            BY:谷虫(cc90042938)

这个对我们改程序十分不方便~~~~~~~~~~~~~~~
看死啦啦晕思
发表于 2005-8-16 14:22:00 | 显示全部楼层
什么叫不方便?你说什么方便?电脑改?
发表于 2005-8-17 10:58:00 | 显示全部楼层
用来读写DAT文件的BAS程序 [attachment:3913]
发表于 2005-9-25 11:32:00 | 显示全部楼层
看得我都对GVB没信心了!

其实,如果你水平很高的话,完全可以去学LAVA,不用再像我一样为一个POKE而烦恼……
发表于 2005-10-7 22:31:00 | 显示全部楼层
建议~

学汇编~`用汇编写就没那么多事了
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-20 13:08 , Processed in 0.012720 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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