什么是伪代码?


19

最近,在该站点和其他站点上,我都看到了很多有关伪代码的提及。但我不明白:

  • 什么是伪代码?例如,下面的Wikipedia文章说:“它使用编程语言的结构约定,但旨在供人类阅读而不是机器阅读。” 这是否意味着它实际上并未用于制作程序?

  • 为什么使用它?

  • 如何使用?
  • 它被认为是一种编程语言吗?(请参阅上面的维基百科报价)
  • 它是众所周知/使用过的吗?

老实说,我不知道从哪里开始。我已经用Google搜索了它,并且看到了有关该主题的Wikipedia文章,但是我仍然不完全了解它是什么。


7
请提供来自Wikipedia文章的具体报价和问题。您的所有问题在那里得到了回答。如果您听不懂这些单词或短语,请在问题中引用一个特定的单词或短语,以便我们进行解释。很难知道您在那篇文章中发现什么令人困惑。如果您可以参考使您感到困惑的特定内容,那将对您有所帮助,而不是在此处重复该文章。
S.Lott

@ S.Lott:已完成
动态

20
while (you.doNotUnderstand(pseudocode)) { q = you.askQuestion(); a = we.answer(q); you.digestAnswer(a) }
约阿希姆·绍尔

3
if (question.IsAnswered) then you.UnderstandPseudoCode <- true
e-MEE 2012年

1
它是自然语言和编程语言之间的中间地带–它比口头语言更正式,但不像真实的编程语言那么正式。
Ingo 2012年

Answers:


19

顾名思义,伪代码不是真正的代码,但看起来像代码。它可以帮助人们更好地理解问题域或解决方案,而不必在使用真实语言时添加所有必要的负担。

简而言之:它仅用于说明目的。

伪代码和编程伪代码
没有定义或固定的规则,每次可能有所不同。它不是一种(真实的)编程语言,没有人会认为它是一种。它不能被编译或用作真正的编程语言:如果您可以这样做,它将不再是伪代码。伪代码不需要是确定性的(计算机进行编译的必要条件),而是需要人类理解。要使用伪代码,您必须将其转换为您喜欢的编程语言。每次转换过程都可能不同,并且无法为其提供任何规则,因为伪代码就像是言论自由:它可以采用任何形式。

用法
通常使用,特别是在项目的设计阶段,以帮助理解解决问题的特定方法。它也常用于算法设计中,或在教师在板上画一些东西时使用。在所有这些情况下,都不需要编译代码,您只想了解问题/解决方案。


代码的类型伪代码可以是但不必是某种类型,即,您可以使用基于堆栈的伪代码来说明MSIL,可以使用命令式伪代码来说明Java,C#,C ++,Python,可以使用功能性伪代码来说明F#,Haskell,SQL等。

例子
我脑子里冒出了一切,因为伪代码可以当场发明:

XML伪代码,显示允许多个p元素的head + body结构:

<head ...
   <title ...
</
<body ...>
   (<p>...)+
</

命令式伪代码,以支持多重继承的语言显示钻石问题:

class A() { readFile(); }
class B() : A {}       // overrides readFile in A
class C() : A {}       // overrides readFile in A
class D() : B, C {}    // what definition of readFile should be used?

上面的两个示例显然类似于某种(类型的)语言,但是并不是真正的那种语言,并且可能无法编译。他们宁愿说明您要解释的内容。


14
可能值得补充的是,伪代码可以在任何抽象级别上运行:您可以以易于转换为真实非伪代码的方式描述算法的特定工作方式,或者可以给出非常高级的代码使用非常广泛定义的“方法”或“对象”的某些方法的概述。范围很广。
Joachim Sauer '02

8

什么是伪代码?例如,下面的Wikipedia文章说:“它使用编程语言的结构约定,但旨在供人类阅读而不是机器阅读。” 这是否意味着它实际上并未用于制作程序?

正是这样,它是以人类友好的形式编写的代码。它不能用于制作工作程序。

为什么制造/使用它?

因为伪代码可以快速编写和读取。由于它没有特定于语言的部分,因此阅读起来更加清晰。它也与语言无关,因此任何人都可以阅读(因此,许多教科书中都使用了它)

它被认为是一种编程语言吗?参见上面的维基百科报价。

不。一种编程语言不仅需要结构。它需要形式语义,而伪代码则缺乏。

它是众所周知/使用过的吗?

是。初级以上的任何人都应该知道如何读写伪代码。这对于团队阅读大量教科书和计划代码至关重要。


6

如果您已阅读Wiki文章,那么您的大多数问题都应该清楚。我将在这里尝试以更简单的方式回答他们。看一下以下两个示例:

第1部分-范例

代码1-客户注册-流程步骤示例:

  1. 客户进入注册屏幕
  2. 客户输入他/她的详细信息。
  3. 如果输入有效的详细信息,则将客户信息保存在数据库中
  4. 其他显示对话框,错误消息为100。

代码2-验证客户名称-编程功能示例

Function ValidateCustomerName(Name1)

If (Name1 is entered and Name2 is entered) then return 1

If (Name1 is not entered) 

   Send Error Message

   return 0

Endif

...

End Function

第2部分-现在您的问题

什么是伪代码?

这是一种编写算法或过程步骤的方法。

为什么制造/使用它?

它用于显示过程或算法步骤,而不必依赖于特定的编程语言或特殊符号。

它被认为是一种编程语言吗?

它是不可编译的,这是因为它没有特定的语法,因此不是编程语言。

如果是这样,它是否像Python一样强大?

可以使它像您希望的那样有能力。您可以编写如下语句:如果年龄有效...

它是众所周知/使用过的吗?

是。在考虑算法并为业务分析师提供规范时,这将很有帮助。


@Jae,感谢您的编辑。
NoChance 2012年

4

伪代码最好的例子是当我在Pascal编程时与FORTRAN程序员共享办公室。每当我们互相帮助时,我们都必须用伪代码编写它。他不需要写分号。在白板上,我们编写了一个伪代码,以便可以理解它,而不会陷入复杂的语法规则中。

对于伪代码,没有严格的构造。如果作者在if语句后知道一种使用“ {”的语言,则将其放在黑板上,如果他们知道python,则不会。目的是快速勾勒出解决问题的基本方法,而不是绝对正确的代码。

教师可以使用它为学生提供指导,而无需给出正确答案。一旦您了解更多,然后在草绘代码片段时自然应该使用一种语言的伪代码。


2

伪代码不是语言,不是约定。每本教科书或论文都将使用其自己的伪代码版本。与其他许多非正式的数学“语言”一样,最好的情况是在论文本身中进行非正式的描述,最坏的情况下,作者希望它足够“明显”。


最好的情况下,很明显不需要任何正式或非正式的描述;)。
亚伯2012年

@Abel,没有“明显的”形式主义这样的东西。即使是像十进制算术这样“明显”的东西也必须适当地引入。否则,不幸的是不可避免的混乱。没有至少附加一些正式的介绍,我从未见过明确的伪代码。
SK-logic

这个线程是关于伪代码的。形式主义与此无关。但是我的评论是“双关语”;)。
亚伯(Abel)2012年

@Abel,抽象语言也是一种形式主义(至少在或多或少的科学论文中使用时)。
SK-logic

2

什么是伪代码?

伪代码基本上是关于程序应如何完成操作的书面说明。伪代码是用您的口头语言编写的。您只需写下算法或过程的步骤,即可使您或其他人更容易阅读它或将其转换为真正的编程语言。

为什么制造/使用它?

它旨在帮助您在不使用编程语言的情况下指定过程,过程或算法的步骤。一种可能的替代方法是使用流程图。

它被认为是一种编程语言吗?

不,这不是编程语言,因为没有正式的规则。

它是众所周知/使用过的吗?

就个人而言,在编写算法或复杂过程时,我总是尝试使用伪代码。


0

我对伪代码的个人定义是“我在设计代码时用普通纸写在纸上的东西”

在通过伪代码“设计”进行编码之前,我将添加我的伪代码作为注释。然后,通过这些注释,我可以添加执行所描述任务的“实际”代码。

对于这种编码方法,可能有一个我不知道的正式名称,并且仅在做新的/复杂的事情时才使用它。


-4

正如我的编程讲师怎么说:

伪代码是任何编程语言的英语版本。


2
-1没有帮助。引言仅在伪代码的解释中有意义(此答案缺失)。否则,可能会产生误导。一个新手可能会怀疑:C#的方法都是英文的,所以这意味着我正在使用的C#是伪代码,对吧?在德国使用C#时,他们怎么称呼它?
doppelgreener 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.