(delphi11最新学习资料) Object Pascal 学习笔记---第3章第4节(For循环语句)

Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆爸

3.4 For循环语句

Object Pascal语言具有大多数编程语言中典型的循环语句,包括forwhilerepeat语句,以及更现代的for-in(或for-each)循环。如果您使用过其他编程语言,大多数这些循环都会很熟悉,因此我将简要介绍它们(指出与其他语言的关键区别)。

Object Pascal中的for循环严格基于一个计数器,该计数器在每次循环执行时可以增加或减少。以下是用于累加前十个数字的for循环的简单示例(ForTest演示的一部分):

varTotal, I: Integer;
beginTotal := 0;for I := 1 to 10 doTotal := Total + I;Show(Total.ToString);

​ 对于那些好奇的人,输出是 55。在引入内联变量后编写 for 循环的另一种方法是在声明中声明循环计数器变量(其语法在某种程度上类似于 C 和后面讨论的派生语言中的 for 循环):

varTotal: Integer;
beginTotal := 0;for var I := 1 to 10 doTotal := Total + I;Show(Total.ToString);

​ 在这种情况下,您还可以利用类型推断省略类型说明。上述完整的代码片段变为:

varTotal: Integer;
beginTotal := 0;for var I := 1 to 10 doTotal := Total + I;Show(Total.ToString);

​ 使用内联循环计数的一个优势是该变量的作用域将仅限于循环:在for语句之后使用它将导致错误,而通常在循环之外使用循环计数时只会得到一个警告。

​ Pascal中的for循环比其他语言更不灵活(不允许指定不同于1的增量),但它简单易懂。作为对比,这是用C语言语法编写的相同for循环:

int total = 0;
for (int i = 1; i < = 10; i++) {total = total + i;
}

​ 在这些语言中,增量是一个可以指定任何种类序列的表达式,这可能导致许多人认为是令人难以阅读的代码,如下所示:

int total = 0;
for (int i = 10; i > 0; total += i--) {// ...
}

​ 然而,在Object Pascal中,您只能使用单步增量。如果要测试更复杂的条件,或者要提供自定义计数器,您将需要使用whilerepeat语句,而不是for循环。

​ 单步递增的唯一替代方法是单步递减,或使用 downto 关键字的反向 for 循环:

varTotal, I: Integer;
beginTotal := 0;for I := 10 downto 1 doTotal := Total + I;

注解:反向计数非常有用,例如,当你在影响一个基于列表的数据结构时,你就会进行循环。在删除某些元素时,你通常会向后移动,因为正向循环可能会影响你正在操作的序列(也就是说,如果你删除了列表中的第三个元素,第四个元素就会变成第三个:现在你正在操作第三个元素,移动到下一个(第四个),但实际上你正在操作的是第五个元素,跳过了一个)。

​ 在Object Pascal中,for循环的计数器不需要是一个数字。它可以是任何序数类型的值,例如字符或枚举类型。这有助于编写更易读的代码。以下是基于Char类型的for循环的示例:

varAChar: Char;
beginfor AChar := 'a' to 'z' doShow(AChar);

​ 这段代码(ForTest 程序的一部分)显示了所有英文字母,每个字母都在输出 Memo 控件的单独一行中。

注解:在第 2 章的 CharsTest 示例中,我已经展示过一个类似的演示,但它是基于整数计数器的。不过,在那个示例中,字符是串联在一个输出字符串中的。

​ 下面是另一个代码片段,展示了基于自定义枚举的 for 循环:

typeTSuit = (Club, Diamond, Heart, Spade);
varASuit: TSuit;
beginfor ASuit := Club to Spade do// ...

​ 最后一个循环在数据类型的所有元素上循环。更好的写法是明确地对数据类型的每个元素进行操作(使其更灵活地适应定义中的变化),而不是特别指明第一个和最后一个元素:

for ASuit := Low(TSuit) to High(TSuit) do

​ 类似地,为数据结构的所有元素编写for循环是相当常见的,例如字符串。在这种情况下,您可以使用来自ForTest项目的此代码:

varS: string;I: Integer;
beginS := 'Hello world';for I := Low(S) to High(S) doShow(S[I]);

​ 如果不想指明数据结构的第一个和最后一个元素,可以使用 for-in 循环来代替,这是一种特殊用途的 for 循环,将在下一节讨论。

注解:在 Object Pascal 中,编译器如何处理使用 [] 操作符直接读取的字符串数据,以及如何确定字符串的下界和上界,仍然是一个相当复杂的问题,即使现在所有平台的默认值都是一样的。这将在第 6 章中介绍。

​ 对于使用基于零的索引的数据结构,你需要从索引零到数据结构的大小或长度之前的索引进行循环。编写此代码的常见方法如下:

for I := 0 to Count - 1 do ...
for I := 0 to Pred(Count) do ...

​ 关于 for 循环的最后一个注意事项是,循环结束后循环计数器会发生什么变化。简而言之,该值是未指定的,如果在循环结束后试图使用 for 循环计数器,编译器会发出警告。为循环计数器使用内联变量的一个好处是,该变量仅在循环本身中定义,在循环结束语句后将无法访问,从而导致编译器出错(这提供了更强的保护):

beginvar Total := 0;for var I: Integer := 1 to 10 doInc(Total, I);Show(Total.ToString);Show(I.ToString); // 编译器错误:未声明的标识符'I'
end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/245450.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE创建数据资产 UDataAsset

UE创建数据资产 需要一个继承自UDataAsset的子类 在编辑器里创建后的效果 如果在子类中写多个集合 和 其它数据 所以数据资产在我觉得只是该子类的一个实例对象

C#用DateAndTime.DateDiff方法和TimeSpan分别计算时间间隔

目录 一、计算时间间隔的方法 1.用DateAndTime.DateDiff方法计算时间间隔 2.使用TimeSpan获取日期时间间隔 二、实例 1.示例一&#xff1a;用DateAndTime.DateDiff方法计算时间间隔 2.示例二&#xff1a;使用TimeSpan获取日期时间间隔 一、计算时间间隔的方法 1.用Date…

jar手动上传到Nexus私服

jar手动上传到Nexus私服 一简介二上传方法1.登录nexus,打开nexus控制台。upload---maven-release2.上传jar3.验证jar包是否上传成功4、注意事项 一简介 在maven项目中我们可以通过相关配置可以将项目打包成jar&#xff0c;然后deploy上传到私服中。要是别人提供的第三方jar&am…

图像处理------调整色调

什么是色调&#xff1f; 色调&#xff0c;在画面上表现思想、感情所使用的色彩和色彩的浓淡。分为暖色调和冷色调。 from cv2 import destroyAllWindows, imread, imshow, waitKey#创建棕褐色色调 def make_sepia(img, factor: int):pixel_h, pixel_v img.shape[0], img.shap…

【GitHub项目推荐--DiligentEngine: 一个开源跨平台的底层图形库和渲染框架】【转载】

Diligent Engine 一个现代的Cross-PlatformLow-Level三维图形库 Diligent引擎是一个轻量级的cross-platform图形API抽象库和呈现框架。它的设计充分利用了Direct3D12、Vulkan和Metal&#xff0c;同时通过Direct3D11、OpenGL和OpenGLES支持较旧的平台。Diligent引擎公开公共的f…

EtherNet/IP开发:C++开发CIP源代码

① 介绍一下CIP CIP是一种考虑到自动化行业而设计的通用协议。然而&#xff0c;由于其开放性&#xff0c;它可以并且已经应用于更多的领域。CIP网络库包含若干卷&#xff1a; 第1卷介绍了适用于所有网络自适应的CIP的常见方面。本卷包含通用对象库和设备配置文件库&#xff0…

数据采集与预处理01: 项目1 数据采集与预处理准备

数据采集与预处理01&#xff1a; 项目1 数据采集与预处理准备 任务1 认识数据采集技术&#xff0c;熟悉数据采集平台 数据采集&#xff1a;足够的数据量是企业大数据战略建设的基础&#xff0c;因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环&#…

OpenCV书签 #互信息的原理与相似图片搜索实验

1. 介绍 互信息&#xff08;Mutual Information&#xff09; 是信息论中的一个概念&#xff0c;用于衡量两个随机变量之间的关联程度。在图像处理和计算机视觉中&#xff0c;互信息常被用来度量两幅图像之间的相似性。 互信息可以看成是一个随机变量中包含的关于另一个随机变…

FastDeploy项目简介,使用其进行(图像分类、目标检测、语义分割、文本检测|orc部署)

FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具&#xff0c; 支持云边端部署。提供超过 &#x1f525;160 Text&#xff0c;Vision&#xff0c; Speech和跨模态模型&#x1f4e6;开箱即用的部署体验&#xff0c;并实现&#x1f51a;端到端的推理性能优化。包括 物…

win10+elasticsearch8.12 安装教程

Elasticsearch是一种搜索引擎&#xff0c;本地安装完成之后&#xff0c;可使用其他编程语言&#xff08;例如python&#xff09;与elasticsearch建立连接&#xff0c;然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者&#xff1a;谢吉宝 本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式&#xff0c;降低微服务复杂度的最佳实践》的分享 2023 云栖大会现场 当面临复杂的挑战时&#xff0c;"分而治之"的方法往往能取得显著的效果。微服务架构…

HCIA——25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

使用 Redis 的 List 数据结构实现分页查询的思路

假设有一个存储数据的 List&#xff0c;每个元素代表一个记录&#xff0c;例如 recordsList。 按页存储数据&#xff1a; 每页存储一定数量的记录。例如&#xff0c;第一页存储索引 0 到 N-1 的记录&#xff0c;第二页存储索引 N 到 2N-1 的记录&#xff0c;以此类推。 分页查…

Java入门——基本语法(注释、字面量、变量、使用变量的注意事项、关键字、标识符)

目录 注释 字面量 变量 使用变量的注意事项 关键字 标识符 注释 什么是注释 注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。 注释有哪些 单行注释 // 注释内容&#xff0c;只能写一行 多行注释 /* 注释内…

Java中的HTTPS通信

在Java中实现HTTPS通信&#xff0c;主要涉及到SSL/TLS协议的使用&#xff0c;用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。 一、基本概念 HTTPS&#xff0c;全称为Hypertext Transfer Protocol Secure&#xff0c;是HTTP的安全版本。它使用SSL/…

Matlab|含风电-光伏-光热电站电力系统N-k安全优化调度模型

目录 1 主要内容 程序算例 程序模型 程序亮点 2 部分程序 3 部分结果 4 下载链接 1 主要内容 该程序参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型&#xff0c;主要做的是考虑N-k安全约束的含义风电-光伏-光热电站的电力系统优化调度模型&#xff0c;从而…

uniapp page宽度设置为750rpx,子元素宽度100%,大小不一致

uniapp page宽度设置为750rpx&#xff0c;子元素宽度100%&#xff0c;大小不一致。 原因是我在page加了margin: 0 auto;去掉就正常了&#xff08;但是如果在超大屏幕还是会出现&#xff0c;我猜是使用rpx导致的&#xff0c;rpx渲染成页面时会转成精确到一个小数点几位数的rem&a…

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接&#xff1a;官网链接 下载下来后&#xff0c;直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…

【oracle】oracle客户端及oracle连接工具

一、关于oracle客户端 1.1 Oracle Client 完整客户端 包含完整的客户端连接工具。 包很大&#xff0c;需要安装 1.2 instantclient 即时客户端 是 Oracle(R) 发布的轻量级数据库客户端&#xff0c;减少甚至只包含几个文件&#xff0c;您无需安装标准的客户端&#xff0c;就可以…

第四篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:机器学习

传奇开心短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文 短博文目录一、项目目标二、OpenCV机器学习介绍三、OpenCV支持向量机示例代码四、OpenCV支持向量机示例代码扩展五、OpenCVK均值聚类示例代码六、OpenCVK均值聚类示例代码扩展七、OpenCV决策树示例…