cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 4996|回复: 12

[聊天] 【C编译器】新进展

[复制链接]
发表于 2012-5-20 09:37:23 | 显示全部楼层 |阅读模式
本帖最后由 Wudy 于 2012-5-20 10:31 编辑

进展有点慢。。


现已支持:
编译成字节码再虚拟机执行,一位数组,一级指针,浮点数,字符串常量,递归,
3个库函数:input(),output(),puts()
more...

下一步的工作:
多维数组,强大的库。

短时间内不会支持的:
++,--操作符,多级指针,函数指针,其他高级的内容


放几个已经完美测试的代码(windows平台)

1.八皇后问题
  1. int C[8];

  2. int tot = 0;

  3. void search( int cur )
  4. {
  5.         int i, j;
  6.         
  7.         if( cur == 8 )
  8.                 tot += 1;
  9.         else
  10.         {
  11.                 for(i = 0; i < 8; i += 1 )
  12.                 {
  13.                         int ok = 1;

  14.                         C[cur] = i;
  15.                         for( j = 0; j < cur; j += 1 )
  16.                                 if( C[cur] == C[j] || cur - C[cur] == j - C[j] || cur + C[cur]
  17.                                         == j + C[j] )
  18.                                         {
  19.                                                 ok = 0;
  20.                                                 break;
  21.                                         }
  22.                         if( ok )
  23.                                 search( cur + 1 );                                                
  24.                 }
  25.         }
  26. }

  27. void main()
  28. {
  29.         search( 0 );
  30.         output( tot );
  31. }
复制代码
2.高精度阶乘
  1. int f[100];

  2. void main()
  3. {
  4.         int i, j, n;
  5.         
  6.         n = input();
  7.         f[0] = 1;
  8.         for( i = 2; i <= n; i += 1 )
  9.         {
  10.                 int c = 0;
  11.                 for( j = 0; j < 100; j += 1 )
  12.                 {
  13.                         int s = f[j] * i + c;
  14.                         f[j] = s%10;
  15.                         c = s / 10;
  16.                 }
  17.         }
  18.         
  19.         for( j = 100 - 1; j >= 0 && f[j] == 0; j -= 1 )
  20.                 ;
  21.         
  22.         for( i = j; i >= 0; i -= 1 )
  23.                 output( f );

  24. }
复制代码
3.合并排序
  1. void merge_sort( int* A, int x, int y, int* T )
  2. {
  3.         if( y-x > 1)
  4.         {
  5.                 int m = x + (y-x)/2;
  6.                 int p = x, q = m, i = x;

  7.                 merge_sort( A, x, m, T );
  8.                 merge_sort( A, m, y, T );
  9.                 while( p < m || q < y )
  10.                 {
  11.                         if( q >= y || (p < m && A[p] <= A[q]) )
  12.                         {                                
  13.                                 T = A[p];
  14.                                 i += 1; p += 1;
  15.                         }
  16.                         else
  17.                         {
  18.                                 T = A[q];
  19.                                 i += 1; q += 1;
  20.                         }
  21.                 }
  22.                 for( i = x; i < y; i += 1 )
  23.                         A = T;
  24.         }
  25. }


  26. void main()
  27. {
  28.         int a[5];
  29.         int temp[5];
  30.         int i;

  31.         for( i = 0; i < 5; i += 1 )
  32.                 a[i] = input();

  33.         merge_sort( a, 0, 5, temp );

  34.         for( i = 0; i < 5; i += 1 )
  35.                 output( a[i] );
  36. }
复制代码
4.hello world
  1. void main()
  2. {
  3.         puts( "Hello World!" );
  4. }
复制代码
要等更完整后再发布,还是先发布一个尝鲜版?
发表于 2012-5-20 10:38:47 | 显示全部楼层
先发布一个尝鲜版
发表于 2012-5-20 10:44:15 | 显示全部楼层
i += 1是i++?
好怪...
Puts?
Printf会好点?cout也不错.
发表于 2012-5-20 10:57:58 | 显示全部楼层
进展有点慢。。


现已支持:
编译成字节码再虚拟机执行,一位数组,一级指针,浮点数,字符串常量,递归,
3个库函数:input(),output(),puts()
more...

下一步的工作:
多维数组,强大的库。

...
Wudy 发表于 2012-5-20 09:37
for 9860?
发表于 2012-5-20 11:03:11 | 显示全部楼层
既然可以用递归,那么快排试过没有?
发表于 2012-5-20 11:07:08 | 显示全部楼层
放几个已经完美测试的代码(windows平台)Wudy 发表于 2012-5-20 09:37 AM

难道...
发表于 2012-5-20 11:07:13 | 显示全部楼层
饿,看到合并了……
---------------------------------
结构体能不能实现呢?
---------------------------------
另外,位运算能不能用了?
 楼主| 发表于 2012-5-20 11:50:59 | 显示全部楼层
结构体太难,应该不会有了。
位运算有时间就加。
printf可变参数比较难解决。。
 楼主| 发表于 2012-5-25 22:18:20 | 显示全部楼层
预计明天可以发布尝鲜版
发表于 2012-5-26 14:31:51 | 显示全部楼层
预计明天可以发布尝鲜版
Wudy 发表于 2012-5-25 10:18 PM

Really?那就是今天么?
 楼主| 发表于 2012-5-26 19:58:11 | 显示全部楼层
10# 9750GII

出了点问题,要跳票了…
发表于 2013-3-28 13:51:33 | 显示全部楼层
跳到啥时候?
发表于 2013-3-30 10:16:41 来自手机 | 显示全部楼层
9750GII 发表于 2012-5-20 10:44
i += 1是i++?
好怪...
Puts?

cout是C++的,还是习惯printf。i++的字节占用更小,i+=的功能更多[废话]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-12-5 10:36 , Processed in 0.066834 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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