易码技术论坛

 找回密码
 加入易码
搜索
楼主: yan

[工具] 编译器Y2.26最终版 08/5/10更新

[复制链接]
发表于 2008-4-12 22:22:11 | 显示全部楼层
支持!!

yan继续加油!!
发表于 2008-4-13 13:35:09 | 显示全部楼层
又更新~~支持!!!
 楼主| 发表于 2008-4-13 15:08:57 | 显示全部楼层
添加一个抽象库:stack.y和queue.y
 楼主| 发表于 2008-4-13 15:10:44 | 显示全部楼层

举个例子:
  1. /* 银行业务模拟,统计指定一段时间内客户平均等待时间等 */
  2. #include <adt/queue.y>

  3. #define SIM_TIME        100                //simulation time
  4. #define ARRIVAL_P        3277                //arrival probability 0.1 = 3277 / 32767
  5. #define MIN_SERVICE_T        5                //min service time
  6. #define MAX_SERVICE_T        15                //max service time

  7. struct CUSTOMER
  8. {
  9.         int customerNum;
  10.         int arrivalTime;
  11.         int serviceTime;
  12. };

  13. struct CUSTOMER cur;

  14. struct SIMDATA
  15. {
  16.         int queue;//队列指针
  17.         struct CUSTOMER &activeCustomer;//指针
  18.         int time;
  19.         int numCustomers;
  20.         int numServed;
  21.         long totalWaitTime;
  22.         long totalLineLength;
  23. };

  24. char traceFlag = 1;//是否跟踪?

  25. /* 初始化 */
  26. void InitSim(struct SIMDATA &simData, int queuebuf)
  27. {
  28.         simData.queue = queuebuf;
  29.         &simData.activeCustomer = simData.numServed = simData.totalLineLength = 0;
  30. }

  31. /* 有顾客到达并排队 */
  32. void EnQueueCustomer(struct SIMDATA &simData)
  33. {
  34.         struct CUSTOMER c;

  35.         c.customerNum = ++simData.numCustomers;
  36.         c.arrivalTime = simData.time;
  37.         c.serviceTime = rand() % (MAX_SERVICE_T - MIN_SERVICE_T + 1) + MIN_SERVICE_T;
  38.         EnQueue(&c);
  39.         if (traceFlag)
  40.         {
  41.                 printf("%d 分,顾客%d到达并排队\n", simData.time, c.customerNum);
  42.                 getchar();
  43.         }
  44. }

  45. /* 有顾客到前台接受服务 */
  46. void ServeCustomer(struct SIMDATA &simData)
  47. {
  48.         DeQueue(cur);
  49.         &simData.activeCustomer = cur;
  50.         simData.numServed++;
  51.         simData.totalWaitTime = simData.totalWaitTime + simData.time - cur.arrivalTime;
  52.         if (traceFlag)
  53.         {
  54.                 printf("%d 分,顾客%d到前台服务\n", simData.time, cur.customerNum);
  55.                 getchar();
  56.         }
  57. }

  58. /* 顾客服务结束离开 */
  59. void DismissCustomer(struct SIMDATA &simData)
  60. {
  61.         if (traceFlag)
  62.         {
  63.                 printf("%d 分,顾客%d完成并离开\n", simData.time, simData.activeCustomer.customerNum);
  64.                 getchar();
  65.         }
  66.         &simData.activeCustomer = 0;
  67. }

  68. /* 事件运行 */
  69. void ProcessQueue(struct SIMDATA &simData)
  70. {
  71.         if (!(&simData.activeCustomer))
  72.         {
  73.                 if (!QueueEmpty()) ServeCustomer(simData);
  74.         }
  75.         else if (!simData.activeCustomer.serviceTime)
  76.         {
  77.                 DismissCustomer(simData);
  78.         }
  79.         else
  80.         {
  81.                 simData.activeCustomer.serviceTime--;
  82.         }
  83.         simData.totalLineLength = simData.totalLineLength + QueueDepth();
  84. }

  85. void PrintResults(struct SIMDATA &simData)
  86. {
  87.         printf("结果:\n");
  88.         printf("总共服务时间: %d 分\n", SIM_TIME);
  89.         printf("顾客到达几率: 0.%d\n", 10 * ARRIVAL_P / 32767);
  90.         printf("最短服务时间: %d 分\n", MIN_SERVICE_T);
  91.         printf("最长服务时间: %d 分\n", MAX_SERVICE_T);
  92.         getchar();
  93.         SetScreen(1);
  94.         printf("结果:\n");
  95.         printf("总共服务顾客: %d 人\n", simData.numServed);
  96.         if(!simData.numServed) simData.numServed = 1;
  97.         printf("顾客平均等待: %d 分\n", simData.totalWaitTime / simData.numServed);
  98.         printf("平均队伍长度: %d 人\n", simData.totalLineLength / SIM_TIME);
  99.         getchar();
  100. }

  101. void fullErr()
  102. {
  103.         printf("队列溢出!\n");
  104.         getchar();
  105.         exit(0);
  106. }

  107. void nullErr()
  108. {
  109.         printf("队列空!\n");
  110.         getchar();
  111.         exit(0);
  112. }

  113. void main()
  114. {
  115.         struct SIMDATA simData;
  116.         char buf[10000];

  117.         SetScreen(1);
  118.         InitQueue(buf, sizeof(buf), sizeof(struct CUSTOMER), fullErr, nullErr);//初始化队列
  119.         InitSim(simData, buf);//初始化
  120.         for (simData.time = 0; simData.time < SIM_TIME; simData.time++)
  121.         {
  122.                 if (rand() < ARRIVAL_P) EnQueueCustomer(simData);//有顾客排队
  123.                 ProcessQueue(simData);
  124.         }
  125.         PrintResults(simData);
  126. }
复制代码
发表于 2008-4-13 20:32:37 | 显示全部楼层
又更新了~~
刚下完还得重下~~
YAN的速度不一般~~
发表于 2008-4-13 21:01:33 | 显示全部楼层
速度真快啊
发表于 2008-4-14 13:48:40 | 显示全部楼层
原帖由 yan 于 2008-4-12 20:49 发表
汗,gameghost不是做了一个了么?


GG的是A2008版的~
   能做T1200的么~?
 楼主| 发表于 2008-4-15 21:40:13 | 显示全部楼层
就别指望我了,有源代码包,希望有人能完成这个任务。
 楼主| 发表于 2008-4-15 21:40:57 | 显示全部楼层
再次更新!
这次支持了不定参数的函数了,很容易写scanf,sscanf等函数了。
举个例子:
  1. #include <GetArg.y>

  2. void fun1(char n)//不定参数的函数fun1有且只有一个参数n(值为参数个数)
  3. {
  4.         char i;
  5.         long arg[9];

  6.         #attr(fun1, -1, -1, -1, 7, -1, -1, -1, -1, 0);//修改函数fun1为不定参数函数,其中的7表示该函数(fun1)为void型,如果为8表示long型,#attr用法请看帮助->语法->命令
  7.         GetArg(arg, n);//从数据栈中取出n个参数
  8.         printf("fun1: %d个参数\n", n);
  9.         for (i = 0; i < n; i++)
  10.         {
  11.                 printf("%d ", arg[i]);
  12.         }
  13.         printf("\n");
  14.         getchar();
  15. }

  16. long fun2(char n)
  17. {
  18.         char i;
  19.         long arg[9];

  20.         #attr(fun2, -1, -1, -1, 8, -1, -1, -1, -1, 0);//修改函数fun2为不定参数函数,其中的8表示该函数(fun2)为long型
  21.         GetArg(arg, n);//从数据栈中取出n个参数
  22.         printf("fun2: %d参数\n", n);
  23.         for (i = 0; i < n; i++)
  24.         {
  25.                 printf("%d ", arg[i]);
  26.         }
  27.         printf("\n");
  28.         getchar();
  29. }

  30. void main()
  31. {
  32.         SetScreen(1);
  33.         fun1(10);//一个参数
  34.         fun1(30, 20, 14);//三个参数
  35.         fun1();//没有参数
  36.         fun2(18, 90);
  37.         fun2(156, 987, 2120, 103);
  38.         fun2();
  39. }
复制代码

[ 本帖最后由 yan 于 2008-4-16 13:54 编辑 ]
发表于 2008-4-15 22:26:28 | 显示全部楼层
这次更新得太实用了,强烈支持!
发表于 2008-4-16 09:11:09 | 显示全部楼层
不定参数,支持啊,他支持了!
发表于 2008-4-16 11:54:45 | 显示全部楼层
支持下~~~~
发表于 2008-4-16 13:48:03 | 显示全部楼层
支持
就是用法有些古怪
 楼主| 发表于 2008-4-16 13:51:41 | 显示全部楼层
那也是没办法的事。。。
发表于 2008-4-16 14:25:13 | 显示全部楼层
支持。http://lav.ys168.com/全力顶你
发表于 2008-4-16 20:12:52 | 显示全部楼层
乘机宣传.....
发表于 2008-4-16 20:14:27 | 显示全部楼层
支持。
http://iava.5d6d.com
全力顶你
发表于 2008-4-17 16:22:32 | 显示全部楼层
汗,都来这个!

不能水
我支持下
发表于 2008-4-20 18:39:20 | 显示全部楼层
支持个~~
发表于 2008-4-21 11:54:51 | 显示全部楼层
真的吗????????????/
要是真的那就:支持一下哦~~
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-5-6 14:48 , Processed in 0.012466 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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