明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1764|回复: 7

[基础] 初学lisp习题遇到难题,几天无解

[复制链接]
发表于 2010-7-8 11:15 | 显示全部楼层 |阅读模式

习题中有个题是:

利用repeat循环,提示用户输入a,b值后,自动将他们从小到大连乘,并将结果显示。

问题:代码运行发现当大数在21以上就会出现连乘值为负数的问题,例如a=3,b=22,结果xx=-261357568.

请各位高人指点。谢谢

 

 

(defun c:t72-1()
  ;提示用户输入两个数值,自动从小到大累计连乘
  (setq a (getint "请输入整数起始值:"))
  (setq b (getint "请输入整数结束值值:"))
  (if (< a b)
    (progn
    (setq nums a)
    (setq nume b)
    )
    (progn
      (setq nums b)
    (setq nume a)
      )
    )
  (setq xx 1)
  (setq n (+ 1 (- nume nums)))
  (setq xxadd nums)
  (repeat n
    (setq xx (* xx xxadd))
    (setq xxadd (1+ xxadd))
    )
  ;本句改写(princ "\n总和sum=:") (princ sum)
  (setq str1 (strcat (itoa nums) "到"))
  (setq str2 (strcat (itoa nume) "连乘值=" ))
  (setq str3 (strcat (itoa xx)))
  (alert (strcat str1 str2 str3))
  (prin1)
  )
(prompt "<t72-1>repeat循环连乘用法范例")
(prin1)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-7-8 11:32 | 显示全部楼层

命令: (getint "\n数值")

数值111111111111111111

需要 -32768 和 32767 之间的整数.

 

整數 (INT)
沒有小數位的數值,32位元有號數,範圍從+2,147,483,647到-2,147,483,648

實數 (REAL)
帶小數位的數值,以倍精度浮點格式儲存(最少14位小數)  e.g.     12.5 
當數值在1與-1之間時,必須加上前導零  e.g.     0.05 
可以科學記號表示 : 在E或e後加上次方值  e.g.     4.1e-6

 楼主| 发表于 2010-7-8 11:56 | 显示全部楼层
谢谢,您的意思是对xx变量定义吗
发表于 2010-7-8 12:13 | 显示全部楼层

你这里的 xx  是整型,所以有个最大值范围 可以用实数替换一下

 楼主| 发表于 2010-7-8 15:01 | 显示全部楼层

我把

 

(setq xx 1)

 

 

改为(setq xx 1.0)

但还是出现参数错误,请不吝赐教。

 楼主| 发表于 2010-7-8 15:08 | 显示全部楼层

翻书解决了:

如果(setq xx 1.0)  ;设定xx为实数

 

那么对应的(setq str3 (strcat (itoa xx)))语句应改为(setq str3 (strcat (rtos xx)))

 

注意:itoa对应整数,rtos对应实数。

谢谢你啊。

发表于 2010-7-8 19:54 | 显示全部楼层
这些小的数据错误在 错误跟踪 窗口里很容易发现的,自己摸索最深刻很多的 呵呵
 楼主| 发表于 2010-7-9 10:20 | 显示全部楼层
错误跟踪不会用啊,请指点哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 18:39 , Processed in 0.260669 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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