吾爱光设

会员须知
会员须知
实用帮助
实用帮助
查看: 2577|回复: 4

[求助] [已解决]zpl有没有判断复数实数的函数

[复制链接]
  • TA的每日心情
    慵懒
    2024-11-7 10:42
  • 签到天数: 494 天

    [LV.9]以坛为家II

    9

    主题

    30

    回帖

    2

    积分

    小白

    积分
    2
    发表于 2024-3-13 11:10 | 显示全部楼层 |阅读模式
    zpl有没有判断复数实数的函数 类似matlab中 if  isreal(a),
    或者没有的话 zpl有什么方法可以判断嘛

    最佳答案
    2024-3-14 08:56
    yjcao 发表于 2024-3-14 08:39
    将1+2i导入Zemax里面跑了一下,出现报错了。“语法错误: 未知符号 2I.”

    因为1+2i中有i,得用字符串的形式才行,数值是不支持“i”的,给你改一下:



    INPUT "请输入一个复数:", NUM_STRING$  # 主函数用于产生要判断的数,除了用INPUT输出这个数,也可以用BROWSE命令从文件中导入这个数。
    GOSUB JUDGE # 建立一个判断复数的子函数
    END

    SUB JUDGE  # 判断复数的子函数,做成一个单独的模块方便迁移和修改      
    NUM$=NUM_STRING$
    count=SLEN(NUM$)   # 获取字符串的长度,用于控制循环遍历的次数  
    FOR i,1,count,1 #从1开始,到count次结束,每次加+1
        temp$ = $LEFTSTRING(NUM$, 1) # 切割字符串为单个字符
        NUM$ = $RIGHTSTRING(NUM$, count-i) # 切割首字符后剩下的部分为新的字符串,用于下一轮再取第一个字符
        IF temp$ $=="i"  THEN GOTO 1 #只要有i,表明是虚数,跳出循环直接判断
    NEXT
    LABEL 1

    IF i>count # 表明遍历全部结束也没有找到虚数
        PRINT NUM_STRING$,"是实数"
    ELSE      #表明找到了虚数,提前结束了循环
        PRINT NUM_STRING$,"是虚数"
    ENDIF
    RETURN


    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-10-28 15:58
  • 签到天数: 482 天

    [LV.9]以坛为家II

    4

    主题

    49

    回帖

    17

    积分

    新手

    积分
    17
    发表于 2024-3-13 22:02 | 显示全部楼层
    最近正好在学习ZPL,用的是16版的,手册我一直在看,没有发现有函数可以实现判断复数具体是实数还是虚数的函数,不过你可以自己用ZPL写一个这样的函数。

    我抛个砖:
    因为虚数是 a+bi的形式,实数是a的形式,所以判断虚数更容易。
    将数值转换成字符串,然后遍历看字符串中是否有“i”应该就可以。
    假设待判断的数值为num,程序可以写成如下:
    NUM = 123 #判断NUM是实数还是虚数,该初始值自行赋值,但是系统不支持数值形式的虚数,需要以字符串的形式表示虚数
    NUM_STRING$ = $STR(NUM) #将复数转化成字符串
    count=SLEN(NUM_STRING$)   # 获取字符串的长度,用于控制循环遍历的次数  
    FOR i,1,count,1 #从1开始,到count次结束,每次加+1
        temp$ = $LEFTSTRING(NUM_STRING, 1) # 切割字符串为单个字符
        NUM_STRING$ = $RIGHTSTRING(NUM_STRING, count-i) # 切割首字符后剩下的部分为新的字符串,用于下一轮再取第一个字符
        IF temp$ $=="i"  THEN GOTO 1 #只要有i,表明是虚数,跳出循环直接判断
    NEXT
    LABEL 1
    IF i>count # 表明遍历全部结束也没有找到虚数
        PRINT NUM,"是实数"
    ELSE      #表明找到了虚数,提前结束了循环
        PRINT NUM,"是虚数"
    ENDIF

    评分

    参与人数 1金币 +4 收起 理由
    + 4
    赞一个!

    查看全部评分

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-10-29 11:54
  • 签到天数: 763 天

    [LV.10]以坛为家III

    26

    主题

    549

    回帖

    94

    积分

    入门

    积分
    94
    发表于 2024-3-14 08:39 | 显示全部楼层
    芝麻开花cjl 发表于 2024-3-13 22:02
    最近正好在学习ZPL,用的是16版的,手册我一直在看,没有发现有函数可以实现判断复数具体是实数还是虚数的 ...

    将1+2i导入Zemax里面跑了一下,出现报错了。“语法错误: 未知符号 2I.”
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情

    2024-11-7 18:06
  • 签到天数: 180 天

    [LV.7]常住居民III

    26

    主题

    337

    回帖

    40

    积分

    新手

    积分
    40
    发表于 2024-3-14 08:49 来自手机 | 显示全部楼层
    yjcao 发表于 2024-3-14 08:39
    将1+2i导入Zemax里面跑了一下,出现报错了。“语法错误: 未知符号 2I.”

    那就提前声明一下i
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-10-28 15:58
  • 签到天数: 482 天

    [LV.9]以坛为家II

    4

    主题

    49

    回帖

    17

    积分

    新手

    积分
    17
    发表于 2024-3-14 08:56 | 显示全部楼层    本楼为最佳答案   
    yjcao 发表于 2024-3-14 08:39
    将1+2i导入Zemax里面跑了一下,出现报错了。“语法错误: 未知符号 2I.”

    因为1+2i中有i,得用字符串的形式才行,数值是不支持“i”的,给你改一下:



    INPUT "请输入一个复数:", NUM_STRING$  # 主函数用于产生要判断的数,除了用INPUT输出这个数,也可以用BROWSE命令从文件中导入这个数。
    GOSUB JUDGE # 建立一个判断复数的子函数
    END

    SUB JUDGE  # 判断复数的子函数,做成一个单独的模块方便迁移和修改      
    NUM$=NUM_STRING$
    count=SLEN(NUM$)   # 获取字符串的长度,用于控制循环遍历的次数  
    FOR i,1,count,1 #从1开始,到count次结束,每次加+1
        temp$ = $LEFTSTRING(NUM$, 1) # 切割字符串为单个字符
        NUM$ = $RIGHTSTRING(NUM$, count-i) # 切割首字符后剩下的部分为新的字符串,用于下一轮再取第一个字符
        IF temp$ $=="i"  THEN GOTO 1 #只要有i,表明是虚数,跳出循环直接判断
    NEXT
    LABEL 1

    IF i>count # 表明遍历全部结束也没有找到虚数
        PRINT NUM_STRING$,"是实数"
    ELSE      #表明找到了虚数,提前结束了循环
        PRINT NUM_STRING$,"是虚数"
    ENDIF
    RETURN


    评分

    参与人数 1金币 +3 收起 理由
    + 3
    很给力!

    查看全部评分

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

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

    本版积分规则

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-11-7 20:54 , Processed in 0.125000 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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