首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内循环后不能低于或第10行指令

内循环后不能低于或第10行指令
EN

Stack Overflow用户
提问于 2018-10-16 23:12:38
回答 1查看 133关注 0票数 1

我一直在研究N.Wirth的“算法和数据结构”。他用他创造的语言编码他的算法: Oberon。我读完了这本书,但我对用Oberon编码的第19页的算法有一个疑问:

代码语言:javascript
复制
PROCEDURE Power (VAR W: Texts.Writer; N: INTEGER);
    VAR i, k, r: INTEGER;
    d: ARRAY N OF INTEGER;
    BEGIN
        FOR k := 0 TO N-1 DO
            Texts.Write(W, "."); r := 0;
            FOR i := 0 TO k-1 DO
                r := 10*r + d[i]; d[i] := r DIV 2; r := r MOD 2;
                Texts.Write(W, CHR(d[i] + ORD("0")))
            END;
            d[k] := 5; Texts.Write(W, "5"); Texts.WriteLn(W)
        END
    END Power

The resulting output text for N = 10 is
.5
.25
.125
.0625
.03125
.015625
.0078125
.00390625
.001953125
.0009765625

我不明白第10行d[k] := 5; Texts.Write(W, "5"); Texts.WriteLn(W)中的说明是怎么做的:

( 1)你为什么要d[k] := 5?程序已经打印了所需的所有输出(d[0] to d[k-1])。

2)你为什么要在那之后打印一个5呢?(Texts.Write(W, "5"))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-04 16:41:16

计算利用的事实是,最后一个数字将始终是5。

  1. 除非执行完成,否则变量d[k]将在外部循环的下一个回合中读取,而当r在内循环的最后一个回合中变为10*r + d[i]时。
  2. Texts.Write(W, "5")语句所需的计算量(略微)比Texts.Write(W, d[i])少。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52845168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档