The Buzzard 发表于 2022-7-6 11:18:04

 
谢谢李,
我考虑过这样的事情,这就是为什么如果你注意到我的程序默认为1。但它仍然不会阻止用户输入任意值。因此,发出错误警报是很好的。我也在考虑将程序放入CAB提到的其他两个值中,但我需要好好玩玩。
 
顺便问一下,你下载了最新的补丁吗?我通过调整矢量图像来减小程序大小,使其以相同的方式工作,而不会在每个帧中产生相同图像的所有冗余。仅此一次修复,程序就从582KB降到了119KB。
 
我将在周末尝试一些东西,看看我能提高多少。我接受这篇文章的唯一原因是在这个论坛上没有关于这个主题的帖子。据我所知,这是CADTutor上唯一的欧姆定律计算器。我只是觉得这是值得的,因为它不是太复杂,使。
 
无论如何,我会在周末完成你提到的修复。我想从Lisp程序的状态中休息几个小时。
 
然后抓住你,
秃鹰

Lee Mac 发表于 2022-7-6 11:20:04

 
嘿,别着急,伙计-只是一件小事。
 
是的,我使用了最新的修正-更简洁的压缩形式。
 
也许你不需要那么复杂的编码来检查这样的事情,如果你不想在不应该的地方检查零,那么只需要一个“vl catch all apply”检查就足够了。

The Buzzard 发表于 2022-7-6 11:24:54

 
由于我没有花时间学习VL,所以不知道如何使用它。
我相信我可以用不同的方式取得好成绩。
 
感谢您的反馈。

SEANT 发表于 2022-7-6 11:26:16

我还要借此机会说,做得很好。非常流畅的用户界面。
 
这个帖子的主题和聊天区最近的一些帖子让我想知道任何编程语言对复数的支持程度。
 
Fortran和C++似乎具有内在的支持。我找不到任何其他语言的证据,包括现代语言。NET,具有本机支持。幸运的是,为复数数据和运算创建自定义包似乎并不困难。

The Buzzard 发表于 2022-7-6 11:31:27

 
谢谢你,肖特,
我仍在改进。我很快就会发布。

The Buzzard 发表于 2022-7-6 11:33:17

大家注意,
 
欧姆定律计算器的第3版已经发布在本帖的第一篇帖子上。详见帖子1。
 
驾驶室,
听从你的建议,毫无问题地解决了问题。我现在让程序计算剩下的两个值。代码似乎按照您提到的方式运行良好。
 
李,
修复了错误:被零除。我为此添加了一个函数。如果你还有什么发现,请告诉我。
 
谢谢
秃鹰

The Buzzard 发表于 2022-7-6 11:37:14

注:编译后的FAS和VLX版本现在也已添加到第一篇文章中。

CAB 发表于 2022-7-6 11:41:06

来得太晚了,但只是很快。
 
这是编写此函数的另一种方法,我使用了4种不同的方法来测试SNF:
虽然是同一个主体,但只有一个条件为真,因此COND语句将处理它。
 
(defun OLC_DCO ()                                                            ;Define function
(cond
   ((vl-string-position (ascii SFN) "123") ; one way to test
   (setq P (RTOS P 2 1))                                             ;Set P ~ (Power), Return to string, Decimal, 1 zero
   (set_tile "ANS" (strcat "Power = " P " watt(s)"))                   ;Set tile ANS, Concatenate string, evaluate P
   )
   ((member SFN '("4" "5" "6")) ; another way to test
    (setq I (RTOS I 2 1))                                                    ;Set I ~ (Current), Return to string, Decimal, 1 zero
    (set_tile "ANS" (strcat "Current = " I " amp(s)"))
   )
   ((vl-string-search SFN "789") ; another way to test
    (setq E (RTOS E 2 1))                                             ;Set E ~ (Voltage), Return to string, Decimal, 1 zero
    (set_tile "ANS" (strcat "Voltage = " E " volt(s)"))               ;Set tile ANS, Concatenate string, evaluate E
   )
   ((vl-position SFN '("10" "11" "12")) ; another way to test
    (setq R (RTOS R 2 1))                                             ;Set R ~ (Resistance), Return to string, Decimal, 1 zero
    (set_tile "ANS" (strcat "Resistance = " R " ohm(s)"))               ;Set tile ANS, Concatenate string, evaluate R
   )
)
)
还有另一种方法。
 
 
 

(defun OLC_DCO (/ lst data)
(setq lst '(("Power = " P " watt(s)")
             ("Current = " I " amp(s)")
             ("Voltage = " E " volt(s)")
             ("Resistance = " R " ohm(s)")))
(setq data (nth (fix(/ (1- (atoi SNF)) 3)) lst))
(set (cadr data) (rtos (eval id) 2 1))
(set_tile "ANS" (strcat (car data)(eval id)(caddr data)))
)
请注意,将变量(如“R”)中的值从字符串切换为实数,再切换回字符串是不好的做法
在调试和更新例程时非常混乱。不过,在我的例子中,我并没有改变这一点。
此外,全局变量也不好。并非总是可以避免的,但您应该尝试将其本地化。
 
 
今晚就这些。PS未测试!
 
 
 
去打网球。。。。

The Buzzard 发表于 2022-7-6 11:43:49

 
再次感谢您的帮助。
但我想我确实定位了所有的变量?
 

;;; F02 - Main Function - Main Dialog Page.                                    ;Describe function
(defun OLC_MDP (/ P I E R IMG SFN KV1 KV2 KV3 KV4 w h)                         ;Define function, Declare local variables

The Buzzard 发表于 2022-7-6 11:45:56

 
 
驾驶室
我现在明白你的意思了。我应该将变量本地化为它们所尊重的函数。知道了。
 
我会再检查一遍,然后进行相应的修复。
 
谢谢
页: 1 [2]
查看完整版本: 欧姆';s定律计算器