MARIE语言实现三角形面积计算:除法逻辑问题求助
问题分析
你现在有两个核心问题:
- 输出时机错误:除法循环里每次减完2就立刻执行输出,导致所有中间递减的数值都被打印出来;
- 除法逻辑偏差:你误以为把乘积一直减2到0就是结果,但实际上三角形面积是乘积除以2的商——比如3*4=12,除以2得6,而不是减到0。
修正方案
调整除法逻辑:新增一个计数器变量,每次从乘积里减2,同时计数器加1,直到乘积变为0,最后输出计数器的值(这才是正确的商)。另外把输出操作移到循环结束后,只打印一次最终结果。
修正后的MARIE代码:
/len = length, hei = height /get and store input input store LEN input store HEI /乘法循环:计算底乘高,结果存入NUM LOOP, load LEN add NUM store NUM / 高度减1,判断是否继续循环 load HEI subt ONE store HEI skipcond 400 / HEI大于0时继续循环 jump LOOP /初始化除法用的计数器 load ZERO store COUNT /除法循环:统计减2的次数,次数即为NUM/2的结果 LOOP1, load NUM subt TWO store NUM / 计数器加1 load COUNT add ONE store COUNT / 判断乘积是否还能继续减2 load NUM skipcond 400 jump LOOP1 /输出最终的三角形面积 load COUNT output /程序结束 halt LEN, DEC 0 HEI, DEC 0 ONE, DEC 1 NUM, DEC 0 TWO, DEC 2 ZERO, DEC 0 COUNT, DEC 0
关键修改说明
- 新增
ZERO和COUNT变量,专门用于除法计数; - 除法循环不再中途输出,而是用计数器记录减2的次数,这个次数就是正确的面积值;
- 仅在循环全部结束后输出一次结果,避免打印无关的中间值。
测试用例验证:底为3、高为4时,乘法得到NUM=12,除法循环执行6次后COUNT变为6,最终输出6,完全符合预期。
内容的提问来源于stack exchange,提问作者damingo
相关产品推荐
相关产品推荐

