追踪这个算法,我的追踪是对的吗?

时间:2014-08-30 00:35:53

标签: algorithm debugging

对于我正在做的类作业问题,我应该跟踪(检查错误)以下算法(伪代码):

num <- 2
count <- 1
while count < 5
{
    count <- count * num

    if count / 2 < 2
        print "Hello"
    else
    while count < 7
    {
        count <- count + 1
    }

    print "The count is " + count + "."
}

当我追踪这段代码时,我得到了

num  count  output
2    1      Hello The count is 1.

我的问题是,我的追踪是对的吗?看起来我还有其他东西需要添加。

2 个答案:

答案 0 :(得分:0)

以下是您应该如何解决这个问题。

num = 2
count = 1

while 1 < 5
{
   2 = 1 * 2
   if 2 /2 < 2          //since 1 < 2  print Hello
       print "Hello"
   else                //This is skipped because the if was true
      while count < 7
      {
         count <- count + 1
      }
print "The count is " + count + "."      //This prints "The Count is 2
}

然后继续使用count = 2的while循环。

开始第二次迭代。

while 2 < 5
{
    4 = 2 * 2               

每次循环计数都会改变。

答案 1 :(得分:0)

在跟踪问题时,您需要记下程序中的所有值更改。

在您的计划中,我们有两个要跟踪的变量:countnum。从该计划中,我们可以找出2个事实:

  • 没有num;
  • 的作业
  • 所有输出语句都与count
  • 相关

因此,我们应该专注于跟踪count上的更改。

请注意这个块:

while count < 7
{
    count <- count + 1
}

可以替换为

if count < 7
{
    count = 7
}

该程序的工作流程可以用英语描述,如下所示:

  1. 检查count是否小于5,YES转到2,NO程序结束;
  2. 加倍count;
  3. 如果count / 2小于2,则YES转到4,NO转到5;
  4. 打印“Hello”,转到6;
  5. 如果count小于7,请将count设为7;
  6. 打印“计数为++。”“,转到1;
  7. 现在任务是使用1作为count的初始值,并逐步完成工作流程,直到程序终止。

    让我们一起做:

    1. count等于1,所以转到2;
    2. 现在count等于2;
    3. count / 2等于1,小于2,所以转到4;
    4. 打印
    5. Hello,转到6;
    6. 打印“The count is 2.”,转到1;
    7. count等于2,所以转到2;
    8. 现在count等于4;
    9. count / 2等于2,不小于,因此请转到5;
    10. count设置为7;
    11. 打印“The count is 7.”,转到1;
    12. count等于7,因此程序终止。
    13. 因此输出将是:

      HelloThe count is 2.The count is 7.