Lisp编程转换
早上好我再次需要一个lisp程序的帮助,以将摄氏度转换为华氏度,反之亦然,这些将需要在一个文件中的两个单独的程序中。以下是我需要的输入和输出:
输入:以摄氏度为单位输入温度:x
输出:x.x摄氏度等于xx。x华氏度。
第二个程序将简单地翻转:
输入:输入华氏温度:x
输出:xx。x华氏度相当于x.x摄氏度。
需要的算法是:C=5/9(F-32)
F=(9/5)+32
到目前为止,我已经将摄氏度设置为C,摄氏度到F的公式由C2F表示:
(defun C:CONV-TEMP ( / )
;; Celsius to Fahrenheit
(setq C (getreal "\nEnter
temperature in Celsius: ")
)
(setq C2F (+ (* (/ 9 5) C) 32)
)
(textscr)
(prompt (strcat (rtos F 2 1) "\ndegrees Celsius is equivalent to"
(rtos C2F 2 1) "degrees Fahrenheit."))
;;Fahrenheit to Celsius
(setq F (getreal "\nEnter
temperature in Fahrenheit: ")
)
(setq F2C (* (- F 32) (/ 5 9))
)
(textscr)
(prompt (strcat (rtos C 2 1) "\ndegrees Fahrenheit
equivalent to" (rtos F2C 2 1) "degrees Celsius."))
);eop
谢谢你的帮助/指导。
Acadstudent学生 请查找INITGET和GETKWORD函数。
此外,对于用户输入,是验证其有效性的良好编程实践:
(if (getsomething)
(progn
;your processing
)
) 我收到的输入列表格式不正确,但在调试之前,这是你的建议吗?
(defun C:CONV-TEMP ( / )
;; Celsius to Fahrenheit
(initget 1 "Yes No")
(if (="Yes" (getkword "\nConvert
Celsius to Fahrenheit? : " ))
(setq C (getint (+ 1 2 "\nEnter temperature in Celsius:
")
)
(setq C2F (+ (* (/ 9 5) C) 32)
)
(textscr)
(prompt (strcat (rtos F 2 1) "\ndegrees Celsius is equivalent to"
(rtos C2F 2 1) "degrees Fahrenheit."))
); Close first if statement
(if (="No")
(setq F (getreal "\nEnter temperature in Fahrenheit: ")
)
(setq F2C (* (- F 32) (/ 5 9))
)
(textscr)
(prompt (strcat (rtos C 2 1) "\ndegrees Fahrenheit
equivalent to" (rtos F2C 2 1) "degrees Celsius."))
(princ)
)
);close second if statement
);eop
这意味着你有一些不平衡的法兰西斯-请更加注意代码格式,以便能够自己注意到这些问题。
我已经修复了你的代码;请将其与您的进行比较,以了解我的更改(因为我没有对它们全部发表评论)。
(defun C:CONV-TEMP( / C C2F F F2C ) ;localize variables
(initget 1 "Yes No")
(if (= "Yes" (getkword "\nConvert Celsius to Fahrenheit? : " ))
(progn
;;Celsius to Fahrenheit
(setq C (getint "\nEnter temperature in Celsius: ")) ;why constrain to integer?!?
(setq C2F (+ (* (/ 9.0 5.0) C) 32)) ;ALWAYS use real values for division
(textscr)
(prompt (strcat "\n" (rtos C 2 1) " degrees Celsius is equivalent to " (rtos C2F 2 1) " degrees Fahrenheit.")) ;spaces!!!
); Close if branch
(progn
;;Fahrenheit to Celsius
(setq F (getreal "\nEnter temperature in Fahrenheit: "))
(setq F2C (* (- F 32) (/ 5.0 9.0))) ;ALWAYS use real values for division
(textscr)
(prompt (strcat "\n" (rtos F 2 1) " degrees Fahrenheit equivalent to " (rtos F2C 2 1) " degrees Celsius.")) ;spaces!!!
); Close else branch
)
(princ)
);eop 尊敬的学生:,
在得到问题的解决方案后,不要重新编辑你的帖子,可能其他人也在关注同一个问题。。。 学生,请不要再这样了!可能还有其他人将从这次(完整的)讨论中学习。或者,当线程引起更有经验的程序员的注意时,您也可以通过获得更好的建议而受益。
这到底是什么? 同时删除了两段代码摘录。
哎呀,很抱歉。我没有通读整条线索,我开始认为你是一个读心术的人,就像你在作品中只回答一声“喊叫”那样 我已经恢复了原来的帖子,所以这个帖子又有意义了。
页:
[1]
2