5

以下代码是我认为符合伪代码的示例,因为它不以任何语言执行,但逻辑是正确的。

string checkRubric(gpa, major)
    bool brake = false
    num lastRange
    num rangeCounter
    string assignment = "unassigned"
    array bus['business']= array('person a'=>array(0, 2.9), 'person b'=>array(3, 4))
    array cis['computer science']= array('person c'=>array(0, 2.9), 'person d'=>array(3, 4))
    array lib['english']= array('person e'=>array(0, 4))
    array rubric = array(bus, cis, lib)

foreach (rubric as fieldAr)
    foreach (fieldAr as field => advisorAr)
        if (major == field)
            foreach (advisorAr as advisor => gpaRangeAr)
                    rangeCounter = 0
                foreach (gpaRangeAr as gpaValue)
                    if (rangeCounter < 1)
                        lastRange = gpaValue
                    else if (gpa >= lastRange && gpa <= gpaValue)
                        assignment = advisor
                        brake = true
                        break
                    endif
                    rangeCounter++
                endforeach
                if (brake == true)
                    break
                endif
            endforeach
            if (brake == true)
                break
            endif
        endif
    endforeach
    if (brake == true)
        break
    endif
endforeach
return assignment

在过去的几周里,我一直在尝试为伪代码的实际含义创建一个清晰的定义。它是相对于程序员还是有实际的明确语法?我说伪代码是任何不执行的代码,你呢?谢谢(欢迎链接到这个主题)

4

8 回答 8

7

伪代码没有固定的定义。这是您希望听众理解的任何符号,以表达您的观点。重要的想法是它旨在供人类阅读,而不是计算机,因此不必精确。您可以包括对您的说明很重要的细节,而忽略不重要的细节。

于 2010-03-22T02:52:17.570 回答
3

无耻地从维基百科上撕下来:

伪代码是使用编程语言的结构约定的计算机编程算法的紧凑且非正式的高级描述,但旨在供人类阅读而不是机器阅读。伪代码通常会省略对人类理解算法不是必需的细节,例如变量声明、系统特定代码和子例程。

有很多代码没有执行。这并不意味着它是伪代码。您的“伪代码”有很多非程序员无法理解的额外内容。您的“伪代码”语言不是伪代码,而是非常非常接近实际语言。

于 2010-03-22T02:51:11.970 回答
1

理论上,伪代码应该与实现无关。它以通俗易懂的语言提出了要做什么的逻辑步骤。它旨在用于人类解释,而不是机器执行。

OP 的示例比伪代码更接近实际代码。例如,++并非在所有语言中都可以找到。它在其他人身上也可能有非常不同的含义。

于 2010-03-22T02:52:23.240 回答
1

好吧,如果我不编译/链接我的 C++ 代码,它就不会执行,所以我不认为“不执行的代码”是一个可以接受的定义。

同样,脚本语言不被执行,它们经常被解释。

我对伪代码的定义是:

“[简明] 与语法无关的代码,用于传达函数、行为或算法。”

于 2010-03-22T02:53:33.043 回答
1

伪代码是对算法或程序的任何紧凑的、人类可读的解释。由于您的程序对我来说不可读,我会说它不是伪代码。下面是一个伪代码示例:

定义总和(x):
    结果 = 0
    对于 x 中的每个条目:
        将当前条目添加到结果
    报告结果

或者,以稍微不同的风格:

总和(x):
   设 x 为数组
   令 result 为表示结果的整数,初始为 0

   对于 x 中的项目:
       结果 += 项目

   返回结果

您可以使用特定语法的元素(事实上,我的伪代码看起来很像 Python),但它需要被广大受众理解,并且不应被语法所阻碍。例如,我使用“+=”,但这是因为它非常紧凑和方便,而不是因为它是必需的。如果您发现“endforeach”在您的说明中有用且方便,那就没问题了;但是,我认为这样的东西不属于伪代码,因为它看起来比有用或解释性更有限。

于 2010-03-22T03:01:57.043 回答
1

程序大纲,以易于转换为实际编程语句的形式编写。

Pseudocode cannot be compiled nor executed, and there are no real formatting or syntax rules. It is simply one step - an important one - in producing the final code. The benefit of pseudocode is that it enables the programmer to concentrate on the algorithms without worrying about all the syntactic details of a particular programming language.

于 2012-05-29T05:42:52.393 回答
0

我的两分钱:

我说伪代码是任何不执行的代码,你呢?谢谢(欢迎链接到这个主题)

这不是我在考虑它的定义时所想到的。伪代码是您的程序将采取的步骤来完成比描述算法更详细的任务。

我发现关于如何编写伪代码极其重要的一件事是,每个人都必须理解它,以便每个人都能将其“移植”到自己想要的语言。换句话说,它必须与语言无关。

作为建设性的批评,出于各种原因,我不会将您的示例视为伪代码,但特别是因为您使用的是类似于特定编程语言的语法和约定。我说伪代码应该与编程语言无关,以便由不同的人移植到几种实际的编程语言。

编辑:可能我要添加到我的定义中的另一条规则是,它必须类似于人类语言而不是编程语言。如,等于而不是==分配而不是=。这背后的原因是,例如,赋值和相等运算符在不同的语言中是不同的。

于 2010-03-22T02:51:50.420 回答
0

如果您想快速清晰地表达自己的想法,那么您可以在白板上写下伪代码。在实践中,对我来说,它很像一种无类型的脚本语言,但语法要求要宽松得多。对我来说,它看起来很像 C,因为坦率地说,大多数程序员都熟悉某种语言,它是 C 语法的变体,所以直觉对更多人来说更容易(它曾经看起来像 Pascal,但那是因为那是我最早使用的语言之一在学校学习)。

于 2010-03-22T03:03:59.360 回答