乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 153|回复: 8

如何在一段时间内重新分配一个变量值?

[复制链接]

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 00:16:15 | 显示全部楼层 |阅读模式
嗨,
我不知道这个主题是否是合适的术语....但是我正在尝试这样做:
我必须在一段时间内重新计算变量“x ”,直到它等于相同的“x ”
我在autolisp和c++中包含了类似的代码,以供参考。
为什么在autolisp的函数中得不到相同的结果?
谢谢。
  1. //(while (not (equal x
  2. //                     (setq x
  3. //                            (*
  4. //                              x
  5. //                              (1+ (/ (- (* x y) (sin x)) (- (* x (cos x)) (sin x))))))
  6. //                     0.00001)))
  7. // here is what I want to verify and if my code is right ?
  8. while (!equal_real(x, x=(x * ((((x * y) - sin(x)) / ((x * cos(x)) - sin(x))) + 1)), 0.00001))
  9. //(setq        r   (/ larc (* 2 (abs x)))
  10. //        fle (- r (sqrt (- (expt r 2) (expt (/ lc 2) 2)))))
  11.                                 r = ((2 * fabs(x)) / larc);
  12.                                 fle = (r - sqrt((pow(r, 2) - pow((lc / 2), 2))));

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 10:00:57 | 显示全部楼层
我认为这是因为范围。
(OBTW,对我来说现在是凌晨,我还没有完全睁开眼睛,所以要小心这篇文章。)
我认为你必须使用指针。
顺便说一句,这个代码真让我头疼。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 10:32:01 | 显示全部楼层

w00t!咖啡煮好了,我已经喝了半杯了!(我现在可以尝试用更智慧的方式回答你。- *Pttthhht,我“聪明”,我不管你是谁,真搞笑!)
当您将var传递给过程时,您是在按值传递。所以当你试图通过另一个过程来改变主过程中的变量时,你需要在你的支持过程中使用指针或者引用来改变这个变量。
我的编程方法是使用更通用的支持程序格式。如果可能的话,我使用程序来“测试”并且从不“改变”数据。然而,由于lisp处理变量作用域的方式,在主过程之外改变变量有时会是一个很好且方便的技巧。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 10:38:43 | 显示全部楼层


我看了一下代码,并发回了结果...
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 11:31:45 | 显示全部楼层
根据以下代码片段的结果,我认为正在发生的事情是赋值在进行比较之前发生,因此条件始终为真。如果您考虑一下,情况会是这样,这是合乎逻辑的。赋值(x=x*y)必须在任何事情都可以与其结果进行比较之前发生。
  1. #include
  2. #include [i]
  3. using namespace std;
  4. int main(int argc, char *argv[]) {
  5.   float x = 1.0;
  6.   float y = 0.1;
  7.   while(x != (x = x * y)) {
  8.     y += 0.1;
  9.   }
  10.   cout
  11. #include [i]
  12. #include
  13. using namespace std;
  14. int main(int argc, char *argv[]) {
  15.   float x = 1.0;
  16.   float y = 0.1;
  17.   for( ; ; ) {
  18.     float xPrime = x * y;
  19.     if(fabs(x - xPrime) < 0.00001)
  20.       break;
  21.     x = xPrime;
  22.     y += 0.1;
  23.   }
  24.   cout << "x == " << x << endl;
  25.   system("PAUSE");
  26.         return EXIT_SUCCESS;
  27. }

回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 11:41:34 | 显示全部楼层
下面是equal_real函数代码3]
我需要迭代来找到(x)的值
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 11:55:13 | 显示全部楼层
让代码工作,这是我最终使用的内容:
  1. ads_real xPrime;
  2.   for( ; ; ) {
  3.     xPrime = (x * ((((x * y) - sin(x)) / ((x * cos(x)) - sin(x))) + 1));
  4.     if(fabs(x - xPrime) < 0.00001)
  5.       break;
  6.     x=xPrime;
  7.   }
  8. //(setq        r   (/ larc (* 2 (abs x)))
  9. //        fle (- r (sqrt (- (expt r 2) (expt (/ lc 2) 2)))))
  10.                                 r = (larc / (2 * fabs(x)));
  11.                                 fle = r - sqrt((pow(r,2) - pow(lc/2,2)));
  12. // print value - test only
  13. //acdbRToS(fle, 2, 3, fmtval);
  14. //acutPrintf("FLE value is %s\n", fmtval);

另外,我在以下行上犯了一个错误:
  1. r = ((2 * fabs(x)) / larc);

并且应该像这样:
  1. r = (larc / (2 * fabs(x)));

一个小的计算,最终给了我X和Y的-1.#IND00000000000值....不好
谢谢查克,为路易斯使用的观点
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 12:42:28 | 显示全部楼层
不客气。我很高兴你明白了。
回复

使用道具 举报

61

主题

792

帖子

35

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1015
发表于 2005-11-26 20:15:29 | 显示全部楼层


我仍然,有括号抽搐....并继续在数值计算中使用它们,在最新的代码中,我避免了它们......

larc/r*180
代替 [即使它们可以毫无问题地使用a]
((larc / r) * 180)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 14:42 , Processed in 0.226103 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表