易码技术论坛

 找回密码
 加入易码
搜索
查看: 356016|回复: 5

[教程] [原] 经典 LAVA1.0 FAQ

[复制链接]
发表于 2006-9-15 19:58:36 | 显示全部楼层
good
发表于 2006-9-23 15:51:26 | 显示全部楼层
求PI的方法真是经典啊!
最大可以算到多少位呢?
发表于 2006-9-27 07:15:59 | 显示全部楼层
最多800位。
发表于 2006-12-4 10:31:45 | 显示全部楼层
LAVA1.0编译器(Lee),就是电脑端的。
谁有这个?给我发一个!找了一上午也没找到!
我的邮箱:lms207@126.com
发表于 2006-12-4 12:38:08 | 显示全部楼层
 楼主| 发表于 2006-9-15 19:46:34 | 显示全部楼层 |阅读模式
怎样得到long型范围内的随机数?

(rand()<<15)+rand()


如何让Lava写文件而不改变文件大小?

把fopen函数中的后一个参数设为"r+"就可以了。


怎样获取文件长度?

length = fseek(fp,0,SEEK_END) ;


LAVA最多能同时打开几个文件?

最多3
返回的fp值依次为128,129,130 ,再打开就是0了。


PAC格式的文件头?

offset0~3 "PAC "文件类型标示
offset4~F 0 作用未知,应该是保留位
offset10~11 int 文件数目
offset12~15 long 第一文件长度
offset16~41 44Byte 第一文件绝对路径
offser42~n 第一文件数据
然后又是第二文件 长度、路径、数据一直到文件结束。



为什么有时在WQX上使用Delay(n) 会死机,在虚拟机上却没有异样?

Delay(n) n 不能小于4


怎样用TextOut显示变量&怎样实现GVB中 STR$ 的功能?
用sprintf 函数。
原型: void sprintf(int str,int format,...);
功能: 把一个格式字符串输出str所指内存区域
说明: 与printf不同的是,输出到字符串而不是屏幕
示例:
void main()
{
char str[30];
int x,y;
x=100;
y=123;
sprintf(str,"x=%d,y=%d",x,y);
TextOut(10,10,str,0x41);
getchar();
}


为什么无论在GVMIde(GGV) 还是 LAVA1.0编译器(Lee)中编译 int s[2]={-1,0}; 均显示“语法错误” ;在LAVA3.2Ide 和星端LAVA编译器(YAN)中编译却能通过?

早期的编译器对于初始化数据不允许以减号打头,用新的LavaXIde就没有问题了。
解决办法: int s[2] = { 0xffff , 0 };


LAVA1.0 不支持浮点,没有开方函数。怎样求一整数的平方根?

下面给出一个求整数根的经典算法。也是在WQX上运行最快,较为实用的开方函数。
  1. int sqrt(long M)
  2. {
  3. int N, i;
  4. long tmp,ttp;  
  5. if(M==0) return 0;
  6. N=0;
  7. tmp =(M>>30);  
  8. M=M<<2;
  9. if(tmp > 1)  
  10. {
  11.   N++;
  12.   tmp=tmp-N;
  13. }
  14. for(i=15;i>0;i--)  
  15. {
  16.   N=N<<1;  
  17.   tmp=(tmp<<2)-(M<0)*2+((M&0x7fffffff)>>30);  
  18.   ttp=(N<<1)+1;
  19.   M=M<<2;
  20.   if(tmp>=ttp)  
  21.   {
  22.   tmp=tmp-ttp;
  23.   N++;
  24.   }
  25. }
  26. return N;
  27. }
  28. void main()
  29. {
  30. int t;
  31. printf("10000的平方根为%d",sqrt(10000));
  32. getchar();
  33. }
复制代码





                                         未完待续...


===================================

以下附上求n位圆周率和用厄拉多塞筛法求10000以内素数的源码
  1. //求n位圆周率
  2. #define ENTER_KEY 0x0d
  3. #define ESC_KEY 0x1b
  4. int f[2801];
  5. char numberc[]="bnmghjtyu";
  6. char to_number(char c)
  7. {
  8.       int i;
  9.       for (i=0;i<9;i++)
  10.            if (c==numberc[ i ]) {
  11.                 c=i+&#39;1&#39;;
  12.                 break;
  13.            }
  14.       return c;
  15. }      
  16. int get_num(int bits)
  17. {
  18.       int i,t,d;
  19.       
  20.       t=0;
  21.       i=0;
  22.       for (;;) {
  23.            d=to_number(getchar());
  24.            if (d>=&#39;0&#39; && d<=&#39;9&#39; && i<bits) {
  25.                 putchar(d);
  26.                 t=t*10+(d&0xf);
  27.                 i++;
  28.            } else if (d==ENTER_KEY && i)
  29.                 break;
  30.       }
  31.       return t;
  32. }
  33. void main()
  34. {  
  35.       int t;
  36.       long b,c,d,e,g;
  37.       printf("请输入位数:");
  38.       c=((get_num(3)+3)&0xfffc)*14/4;
  39.       if (c>2800) c=2800;
  40.       putchar(&#39;\n&#39;);
  41.       for(;b-c;) f[b++]=10000/5;
  42.         for(;;) {
  43.            d=0;
  44.            if (!(g=c<<1)) break;
  45.            b=c;
  46.            for (;;) {
  47.                 d=d+f[ b ]*10000;
  48.                 f[ b ]=d%--g;
  49.                 d=d/g--;
  50.                 if (--b==0) break;
  51.                 d=d*b;
  52.            }
  53.            c=c-14;
  54.            t=e+d/10000;
  55.            if (t<10) printf("000%d",t);
  56.            else if (t<100) printf("00%d",t);
  57.            else if (t<1000) printf("0%d",t);
  58.            else printf("%d",t);
  59.            e=d%10000;
  60.            if (Inkey()==ESC_KEY) exit(0);
  61.       }
  62.       getchar();
  63. }
复制代码
  1. // 求10000以内素数
  2. void main()
  3. {  
  4.   char num[10001];
  5.   int i,j;
  6.   memset(num,0,10000);
  7.   for(i=2;i<10000;i++)
  8.   {
  9.       if(!num[ i ])
  10.       {
  11.         printf("%d ",i);
  12.         for(j=2;j<=10000/i;j++) num[i*j]=1;
  13.       }
  14.   }
  15. }
复制代码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-24 14:55 , Processed in 0.011183 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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