gpt4 book ai didi

ibm-midrange - CL 程序中的堆栈实现(OS400/iSeries)

转载 作者:行者123 更新时间:2023-12-04 05:05:16 27 4
gpt4 key购买 nike

我开始在 IBM 系统 i 上使用 CL 进行编程。我的任务是使用 CL 语言实现 RPN 计算器。通常,此计算器使用堆栈。但我不知道必须在 CL 中实现它。有人可以给我一些建议吗?也许 *PTR 变量是解决方案,但有人能给我一个如何使用它的例子吗?

提前致谢
JS

编辑:

CL 语言是我的导师强加的。

我的程序应该接收来自用户的符号(数字/数字,数学运算的符号)。
收到每个标志后,程序应该分析收到的内容,然后根据伪代码采取一些行动:

Do when new sign was entered:
if: entered sign is a number
then push it into stack
else if: entered sign is a sign of mathematical operation
then
- pop two elements from stack
- make operation using this elements and entered sign
- push result into stack

我的问题是如何实现或替代这个堆栈。需要按 LIFO 顺序到达元素,我不知道结构最终将包含多少个元素。

最佳答案

了解 CL 不适合于此。以下未经测试:

DCL &ARRAY *CHAR 50
DCL &PTR *PTR ADDRESS(&ARRAY)
DCL &ELEM *CHAR 10 STG(*BASED) BASPTR(&PTR)
DCL &i *DEC (9 0)
...
/* Loop through the array */
DOFOR VAR(&i) FROM(1) TO(5) BY(1)
CHGVAR %OFFSET(&PTR) (%OFFSET(&PTR) + 10)
/* &ELEM is the current array element */
ENDDO

发布一些代码;你尝试了什么?如果您不能发布任何代码,请发布伪代码并解释您希望代码做什么。

编辑:
上面的代码片段实现了一个数组。这与堆栈非常相似。 LIFO 就像跟踪最新的数组索引一样简单。在上面的代码片段中,CHGVAR 向指针添加了 10 个字节。它是 10 字节,因为每个数组元素/堆栈元素是 10 字节(DCL &ELEM)。这个特定的堆栈包含 5 个条目 - 5 次 10 = 50 (DCL &ARRAY)。加10字节是PUSH,减10字节是POP。当前的 &PTR 是最近的堆栈条目。

下一步应该是为大纲中的每个主要操作编写一个子程序。从 PUSH 开始。如果您不熟悉 IBM i 上的调试器,请使用 DMPCLPGM 查看运行中的代码的结果。尝试一下,然后如果您仍有问题,请发布您的代码并询问有关该代码的特定问题。编程就是编写代码,所以快来试试吧! :-)

关于ibm-midrange - CL 程序中的堆栈实现(OS400/iSeries),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com