伪码-伪代码的定义以及实现

article/2025/8/28 2:51:51

伪代码的写法

伪代码(Pseudocode)是一种算法描述语言。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java,etc)实现。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。 介于自然语言与编程语言之间。

它以编程语言的书写形式指明算法的职能。相比于程序语言(例如Java, C++,C, Dephi 等等)它更类似自然语言。它是半角式化、不标准的语言。我们可以将整个算法运行过程的结构用接近自然语言的形式(这里,你可以使用任何一种你熟悉的文字,中文,英文 等等,关键是你把你程序的意思表达出来)描述出来. 使用伪代码, 可以帮助我们更好的表述算法, 不用拘泥于具体的实现.

人们在用不同的编程语言实现同一个算法时意识到,他们的实现(注意:这里是实现,不是功能)很不同。尤其是对于那些熟练于不同编程语言的程序员要理解一个(用其他编程语言编写的程序的)功能时可能很难,因为程序语言的形式限制了程序员对程序关键部分的理解。这样伪代码就应运而生了。

当考虑算法功能(而不是其语言实现)时,伪代码常常得到应用。计算机科学在教学中通常使用虚拟码,以使得所有的程序员都能理解。

综上,简单的说,让人便于理解的代码。不依赖于语言的,用来表示程序执行过程,而不一定能编译运行的代码。在数据结构讲算法的时候用的很多。

语法规则

例如,类Pascal语言的伪代码的语法规则是: 在伪代码中,每一条指令占一行(else if,例外)。指令后不跟任何符号(Pascal和C中语句要以分号结尾)。书写上的“缩进”表示程序中的分支程序结构。这种缩进风格也适用于if-then-else语句。用缩进取代传统Pascal中的begin和end语句来表示程序的块结构可以大大提高代码的清晰性;同一模块的语句有相同的缩进量,次一级模块的语句相对与其父级模块的语句缩进。

算法的伪代码语言在某些方面可能显得不太正规,但是给我们描述算法提供了很多方便,并且可以使我们忽略算法实现中很多麻烦的细节。通常每个算法开始时都要描述它的输入和输出,而且算法中的每一行都给编上号码,在解释算法的过程中会经常使用算法步骤中的行号来指代算法的步骤。算法的伪代码描述形式上并不是非常严格,其主要特性和通常的规定如下:

1) 算法中出现的数组、变量可以是以下类型:整数、实数、字符、位串或指针。通常这些类型可以从算法的上下文来看是清楚的,并不需要额外加以说明。

2) 在算法中的某些指令或子任务可以用文字来叙述,例如,"设x是A中的最大项",这里A是一个数组;或者"将x插入L中",这里L是一个链表。这样做的目的是为了避免因那些与主要问题无关的细节使算法本身杂乱无章。

3) 算术表达式可以使用通常的算术运算符(+,-,*,/,以及表示幂的^)。逻辑表达式可以使用关系运算符=,≠,<,>,≤和≥,以及逻辑运算符与(and),或(or),非(not)。

4) 赋值语句是如下形式的语句:a<-b 。

这里a是变量、数组项,b是算术表达式、逻辑表达式或指针表达式。语句的含义是将b的值赋给a。

5) 若a和b都是变量、数组项,那么记号a<->b 表示a和b的内容进行交换。

6) goto语句具有形式

goto label(goto标号)

它将导致转向具有指定标号的语句。

7) 条件语句有以下两种形式:

if c then s或者

if c then s

else s′

这里c是逻辑表达式,s和s′是单一的语句或者是被括在do和end之间的语句串。对于上述两种形式,假若c为真,则s被执行一次。假若c为假,则在第一种形式中,if语句的执行就完成了,而在第二种形式中,执行s′。在所有的情况下,控制就进行到了下一个语句,除非在s或s′中的goto语句使控制转向到其它地方。

8) 有两种循环指令:while和for。

while语句的形式是

while c do

s

end

这里c是逻辑表达式,而s是由一个或更多个语句组成的语句串。当c为真时,执行s。在每一次执行s之前,c都被检查一下;假若c为假,控制就进行到紧跟在while语句后面的语句。注意,当控制第一次达到while语句时,假若c为假,则s一次也不执行。

for语句的形式是

for var init to limit by incr do

s

end

这里var是变量,init、limit和incr都是算术表达式,而s是由一个或多个语句组成的语句串。初始时,var被赋予init的值。假若incr≥0,则只要var≤limit,就执行s并且将incr加到var上。(假若incr<0,则只要var≥limit,就执行s并且将incr加到var上)。incr的符号不能由s来该改变。

9) exit语句可以在通常的结束条件满足之前,被用来结束while循环或者for循环的执行。exit导致转向到紧接在包含exit的(最内层)while或者for循环后面的一个语句。

10) return用来指出一个算法执行的终点;如果算法在最后一条指令之后结束,它通常是被省略的;它被用得最多的场合是检测到不合需要的条件时。return的后面可以紧接被括在引号的信息。

11) 算法中的注释被括在/* */之中。诸如read和output之类的各种输入或者输出也在需要时被用到。

伪代码实例

伪代码只是像流程图一样用在程序设计的初期,帮助写出程序流程。简单的程序一般都不用写流程、写思路,但是复杂的代码,最好还是把流程写下来,总体上去考虑整个功能如何实现。写完以后不仅可以用来作为以后测试,维护的基础,还可用来与他人交流。但是,如果把全部的东西写下来必定可能会让费很多时间,那么这个时候可以采用伪代码方式。比如:

IF 九点以前 THEN

do 私人事务;

ELSE 9点到18点 THEN

工作;

ELSE

下班;

END IF



作者:W3Cschool
链接:https://www.jianshu.com/p/814771a96ff5
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


http://chatgpt.dhexx.cn/article/3sgvv85R.shtml

相关文章

伪代码教程

伪代码教程 起一篇伪代码基础教程 伪代码(Pseudo code)是一种介于计算机语言和自然语言间的文字和符号&#xff0c;是表达算法的简单而有效的方法。伪代码不需要关注底层是如何实现的&#xff0c;本身就是算法框架的逻辑模型。 一、赋值语句 赋值号 A ← B A\leftarrow B A←…

伪代码怎么编写?

20230522 补充一下&#xff1a; 建议学习PUML的语法&#xff0c;这个和伪代码很相似&#xff0c;也可以看到业务流程图 问 根据IDEA项目代码生成伪代码的工具 答 目前没有根据IDEA项目代码自动生成伪代码的工具。伪代码是一种描述程序算法的语言&#xff0c;通常不是具体的编…

【笔记】伪代码编写

在线LaTeX编写工具overleaf极大的方便了暂时需要为论文编写伪代码的需要&#xff1a;Overleaf, Online LaTeX Editor 该工具只需要简单注册就可以使用。 首先进入overleaf主页&#xff0c;然后完成注册和登录&#xff1a; 接着&#xff0c;需要创建用于储存LaTeX的文件夹&…

伪代码与代码区别

伪码&#xff08;Pseudocode&#xff09;是一种算法描述语言。使用伪码的目的是使被描述的算法可以容易地以任何一种编程语言&#xff08;Pascal&#xff0c;C&#xff0c;Java等&#xff09;实现。因此&#xff0c;伪代码必须结构清晰、代码简单、可读性好&#xff0c;并且类似…

伪代码书写方式

伪代码是描述算法过程的一种语言&#xff0c;它可以直接用中文或者英文等自然语言表示&#xff0c;也可以直接上代码&#xff0c;但常用经典的语法表示(讲的就是这种)。日常生中,别人能通过你的描述明白相应算法就行。 小规范 1、不需要声明变量&#xff0c;变量名可以一定程…

伪代码学习与应用

目录 0. 前言1. 伪代码的基础语法2. 在word中插入伪代码2.1 Aurora和Miktex安装2.2 插入伪代码 参考链接伪代码模板模板一模板二模板三模板四 疑难杂症1. 显示中文&#xff1f;2. 特殊字符&#xff1f;3. 换行&#xff1f; 0. 前言 上一次接触伪代码可能还是在现代数字信号处理…

2D激光slam四种算法建图效果对比

slam算法对照 通过麦克纳姆轮机器人小车构建地图对比Gmapping、Hector、Karto、Cartographer四种算法的优缺点 真实场景图如下图所示&#xff1a; 具体步骤为&#xff1a; 1、打开地图构建命令 roslaunch turn_on_wheeltec_robot mapping.launch2、打开rviz rviz3、打开控制…

SLAM——hector-slam算法原理解析

1、hector-slam代码框架概述 下载源码&#xff1a;git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git 原理解读参照&#xff1a;https://blog.csdn.net/weixin_40047925/article/details/80679496 其中包含了许多用于仿真的文件&#xff0c;hector slam算法主…

激光SLAM算法学习(三)——3D激光SLAM

3D激光SLAM 1、3D激光SLAM的介绍 3D激光SLAM的输入: IMU数据 3D激光雷达数据 里程计数据 3D激光SLAM的输出: 3D点云地图 机器人的轨迹 or PoseGraph 2、3D激光SLAM的发展 3D激光SLAM的帧间匹配方法——点云配准算法 Point-to-Plane ICP Feature-based Method 3D激光SLAM的回…

SLAM 算法的一些简单的介绍和理解,有的是从别的地方找到的资料,感觉很有道理。

SLAM&#xff08;Simultaneous localization and mapping&#xff09;,我们要达到的目的就是估计机器人&#xff08;传感器-比如相机&#xff09;的位置轨迹&#xff0c;然后创建地图。locating和map两者互相依赖&#xff0c;密不可分。然而我们 已知的信息一个是 observation&…

2021年开源SLAM算法

1.TANDEM&#xff1a;Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo 慕尼黑工业大学Daniel Cremers团队&#xff0c;实时单目跟踪稠密建图纯视觉SLAM&#xff0c;采用Realsense D455(深度传感器IMU&#xff0c;但只用RGB) 项目地址&#xff1a;https…

激光SLAM技术总结(3)3D激光SLAM算法原理

目录 1. 3D激光SLAM简介 2. 3D激光雷达SLAM 3. 高精度V-LOAM方案 4 发展趋势 1. 3D激光SLAM简介 在 3D 激光 SLAM 领域中&#xff0c; 由 Zhang J 等人提出的LOAM 方案&#xff0c;利用 3D 激光雷达采集数据&#xff0c; 进行基于特征点的扫描匹配&#xff0c; 利用非线性…

实习:slam算法的学习整理

1.odom 2.updata_odom 3.updata_laser updata_landmark 4.resample pf.c 相机的位姿转换是基于世界坐标系的&#xff0c;观察到的路标也会在世界坐标系中不断收敛&#xff0c;若不是计算错误&#xff0c;基本上不会产生漂移。而IMU是自身坐标系标定的&#xff0c;在转换到…

关于slam

什么是SLAM?机器人在未知环境中&#xff0c;要实现智能化需要完成三个任务&#xff0c;第一个是定位(Localization)&#xff0c;第二个是建图(Mapping)&#xff0c;第三个则是随后的路径规划(Navigation)。 之前地平线的高翔博士用这样一句话概括SLAM的释义。不过实际生活中的…

SLAM介绍

https://blog.csdn.net/tiandijun/article/details/55212968 SLAM 1.  前言 读者朋友们大家好&#xff01;&#xff08;很久很久&#xff09;之前&#xff0c;我们为大家介绍了SLAM的基本概念和方法。相信大家对SLAM&#xff0c;应该有了基本的认识。在忙完一堆写论文、博…

【动态SLAM】快速入门(原理介绍及经典算法)

【动态SLAM】快速入门&#xff08;原理介绍及经典算法&#xff09; 0 简介1. 传统视觉SLAM技术的局限2. 常用算法&#xff1a;2.1 基于深度学习的分割方法2.1.1 目标检测&#xff08;Object Detection&#xff09;2.1.2 语义分割&#xff08;INstance Segmentation&#xff09;…

Visual SLAM算法笔记

MulinB按&#xff1a;最近在学习SLAM算法&#xff0c;这里作为阅读笔记记录和总结一下。这里关注的主要是基于视觉的Visual SLAM或Visual Odometry&#xff0c;也包括一部分图像和IMU融合的Visual-Inertial Odometry相关算法。 注&#xff1a;下文中部分链接指向Google Schola…

一起自学SLAM算法:8.2 Cartographer算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 写在前面 第1章-ROS入门必备知识 第2章-C编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLAM中的数学基础 第8章-激光SLAM系统 8.1 Gmapping算法 8.2 Cartographe…

开源3D激光(视觉)SLAM算法汇总(持续更新)

目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Car…

SLAM | 激光SLAM中开源算法对比

点击上方“AI算法修炼营”&#xff0c;选择加星标或“置顶” 标题以下&#xff0c;全是干货 前面的话 好久没有更新SLAM系列的文章了&#xff0c;前面我们讲到了激光SLAM技术。基于激光雷达的同时定位与地图构建技术&#xff08;simultaneous localization and mapping&#xf…