delphi教程

1.While 循环

While 语句的语法格式为: While 条件表达式 do

循环语句; 循环语句可以是任何合法的语句,也可以是另一个循环语句。条件表达式返回一个逻辑

类型的值,当其为 True 时,系统执行其后的循环语句,每执行完一次循环语句时系统均会

判断条件表达式的值,若为 True 则断续执行,若为 False 则终止执行当前的 while 循环而 执行 while 循环后的语句。

以下程序将计算 1+2+3+„+N 的和,N 的值由用户指定(为降低复杂性,N 值不可大于 100):

program SumInt;

{$APPTYPE CONSOLE}

uses

- 64 -

SysUtils;

var

n,i:1..100;

Sum:integer; begin

write('请输入一个 1 至 100 间的数字:');

read(n);

sum := 0; //将 sum 的值初始化为 0 I :=      1;

while i < =    n do        //当 i 的值小于 n 时执行循环体 begin

sum :=   sum+i;

i :=    i+1;        //每执行完一次,i 的值增加 1 end;

writeln(inttostr(sum));               //显示 sum 的值 readln;

End.

注意例子中的 i :=   i+1,若没有这句代码,i 的值永远为 1,程序将会一直执行循环至 死机,即陷入死循环。

将 while 中的条件表达式省略时,也会致使此循环永不停止,这样的循环称之为空 循环。

      1. Repeat 循环

Repeat 循环与 while 循环非常类似,唯一的区别在于:while 循环第一次时先判断 条件是否满足之后再执行循环休,而 repeat 循环第一次执行时先执行循环休再判断条件。

Repeat  语句的语法格式为: Repeat

[循环体]

Until <条件表达式>

将前面的 SumInt 改写成 repeat 循环,其代码为: begin

write('请输入一个 1 至 100 间的数字:'); read(n);

sum := 1; //将 sum 的值初始化为 1 i :=      1;

repeat

i :=    i+1;

sum :=   sum+i; //这两句语句的顺序不可调换 until  i =  n;

writeln(inttostr(sum));               //显示 sum 的值 read(i);

End.

- 65 -

以下两个问题请读者自行思考:

l        为何 sum 的初始值由 0 变成了 1?

l        Repeat   循环体中的两句语句的顺序能否调换?

      1. For 循环

当我们知道将要循环的次数时,可用 for 循环。其语法格式为; For 计数器 :=                          初值 to 终值 do

< 循环体 > 说明:

1.计数器必须为有序类型的变量,初值与终值必须为有序类型的常量或变量

2.计数器、初值、终值的数据类型必须相互兼容,最好全部相同

执行 For 语句时,系统先将初值赋予计数器(故而计数器不需要预先手动赋予初始 值),然后判断计数器与终值的关系,若计数器小于或等于终值,系统将执行一次循环,并

将计数器的值加 1。当计数的值大于终值时,系统将停止循环,此时计数器的值等于终值 加 1。当初值大于终值时不会发生循环。

For 语句还有另一种形式的格式: For 计数器 :=     初值 downto 终值 do

<循环体>

此种形式与前一种形式相反,系统每次执行完循环后,会将计数器的值减 1,直到计数 器的小于终值为止。此种形式的 for 语句执行完毕后计数器值比终值小 1。显然,初值小 于终值时将不会发生循环。

注意:对于任何形式的 for 语句而言,当初值与终值相等时,系统只执行一次循 环。如下面的例子:

program  ForSample;

{$APPTYPE CONSOLE}

uses

SysUtils; var

I,n:integer;

Begin

write('输入 n 的值:'); read(n);

for i :=    1 to n do

writeln('Delphi2010');      //系统执行 n 次循环 writeln('i    的值为:'+inttostr(i));                    //显示此时 i 的值

read(n); End.

上面的程序要求用户输入一个数字作为 n 的值,然后在屏幕上显示 n 行文字,当

for 执行完毕后 i 的值为 n+1。

当 n 的值为 1 时,只显示一行文字,且 for 语句执行完毕后 i 的值为 2。 注意,本例中 for 循环中的初值为 1,所以执行 n 次循环。当将初值改为其它值

- 66 -

时,系统将 X 次循环,其中 X 的值为:

   X = 终值 + 1 - 初值                                                                                           若使用的是 for„downto„形式的循环,则 X  的值为:

   X = 初值 + 1 - 终值                                                                                           4.For...in 语句

Var

 

请读者思考一下,对于如下集合变量:

Myset:set of AnsiChar; Begin

Myset :=  ['A','B','C','D'];

End. 若现要求将其中的所有成员逐一在屏幕上显示出来,读者会怎么做? 可能读者会想到利用索引:

Var

Myset:set of AnsiChar; I:integer;

Begin

Myset :=  ['A','B','C','D'];

For i :=    1 to 4 do Writeln(myset[i]);

End.

看起来很完美,但如果读者的记忆力还不错的话,就应该知道集合类型是不支持索引 的。所以以上代码无法通过编译。这咱时候我们可以使用  For...in  循环语句。

For...in 循环是 Delphi 新版本中新加入的一种循环语句,习惯上称为遍历语句,关 于其作用,笔者在此暂不介绍,若读者看完下面的例子后还不明白,那我说了也是白说。 遍历语句的语法格式为:

  For V in set do <循环体>                                                                                             V 为任一合法变量。Set 为集合变量。V 与 set 的基本类型必须一致,至少相互兼容。 For...in 循环过程如下:先将集合中的第 1 个成员赋予变量 V 并执行循环体中的语 句,然后将第 2 个成员赋予 V 并执行循环体中的语句„依次类推,直到最后一个成员,此 过程称之为集合的遍历。注意:集合成员具有无序性,故系统执行时将根据赋值时各成员

出现的先后顺序来运行。如下面的例子: program  ForSample;

{$APPTYPE CONSOLE}

uses

SysUtils;

Var

Myset:set of AnsiChar; ch:AnsiChar;

Begin

Myset :=  ['D','B','C','A'];

- 67 -

for ch in myset do Write(ch);

readln; End.

执行以上代码,屏幕显示:DBCA。

除 Set 类型外,for...in 还能遍历以下类型:

l     数组。一维二维多维均可,动态静态都行。遍历时将按序号由小到大进行遍历。

l     字符串。按照前后顺序从第一个字符开始遍历。

l     类、接口、记录。对于这三种类型的变量,实现遍历功能的过程较为复杂,一般很少 使用,在此我们不再介绍。Delphi 预先提供了以下几个类用以支持对象的遍历: Classes.TList

Classes.TCollection Classes.TStrings Classes.TInterfaceList Classes.TComponent Menus.TMenuItem ActnList.TCustomActionList DB.TFields ComCtrls.TListItems ComCtrls.TTreeNodes ComCtrls.TToolBar

下面以 Classes.TStrings 给出一个相关的示例:

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils, Classes;

var

StrArray:TStringList; Item:String;

begin

StrArray :=   TStringList.Create; StrArray.Add('stringA'); StrArray.Add('stringB'); StrArray.Add('stringC');

for Item in StrArray do writeln(Item);

Readln; end.

运行这个程序,屏幕上显示以下 5 条字符串:

stringA stringB stringC

- 68 -

可能读者会奇怪,这个例子中使用的类是 TStringList 而非 TStrings,为何?我们知 道,类具有功能,TStrings 中的成员能够被遍历,也就意味着其所有的子类也可被遍历, 而 TStringList 正是 TStrings 的子类。但在这个例子中我们不使用 TStrings 的原因并不 仅限于此,还有另一个重要原因是:TStrings 是个抽象类,其中仅仅只是声明了相关的方 法而并未具体这些功能,所以无法用于遍历。

以上例子同时也说明:对于任何一个类,只要这个类的某个祖先类支持遍历,这个类 就可以被遍历。

5.Continue 与 Break 语句

continue 与 break 虽非循环语句,但此二者只用于前面介绍的四种循环语句,故在此 一并介绍。continue 用于跳出当前正在执行的一次循环并重新开始新一次的循环。Break 用于停止循环而执行循环语句后面的代码。

下面我们将通过一个例子说明一下此二者在  for...in   循环中的使用,当用于其它循环 语句时作用与 for...in 中一样。

program BreakSample;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

ch:char; str:string;

begin

str :=     'ABCDEFGHIJKLMN';

for ch in str do begin

if ch = 'H' then break;

writeln(ch); end;

readln; End.

此程序遍历字符串 str 并显示其中的字符,但在循环体中设置了一条件:当遇到字符

串中的'H'时停止遍历,直接执行循环语句后面的代码即'readln;'。故而屏幕上只显示 'ABCDEFG'。

若将代码中的 break 改为 continue,循环体的条件则变为:当遇到'H'时不再断续执

行此次循环而会重新开始一次新的循环,所以屏幕上不会显示'H',只显示 'ABCDEFGIJKLMN'。

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

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

相关文章

王学岗鸿蒙开发(北向)——————(一)鸿蒙开发环境的搭建与ArkTs介绍

1&#xff0c;鸿蒙系统开始研发的时间是在2012年。 2&#xff0c;目前鸿蒙有两个开发:HarmonyOS和OpenHarmony,前者内聚AOSP(Android的东西)&#xff0c;前者是双框架结构&#xff0c;后者不是双框架结构&#xff0c;没有内置安卓。 3&#xff0c;Harmony地址 4&#xff0c;我们…

Flutter 中的 InheritedTheme 小部件:全面指南

Flutter 中的 InheritedTheme 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它允许开发者使用 Dart 语言构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;InheritedTheme 是一个特殊的组件&#xff0…

文件上传漏洞之upload-labs

前提&#xff1a; 本文中的以xshell命名的均为以密码为admin的一句话木马&#xff0c;而shell命名的则是由冰蝎工具生成的木马。 pass-01&#xff1a;js前端验证 测试性的上传一个一句话木马&#xff0c;发现被拦截了&#xff0c;而且根据推测大概率是前端检测&#xff0c;于…

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎 国内PLM系统厂商中&#xff0c;要确定哪个公司的产品最受欢迎&#xff0c;需要考虑多个因素&#xff0c;包括市场份额、客户评价、技术实力、产品线完整性以及服务支持等。虽然无法直接给出一个具体的“最受欢迎”的排名&#xff…

Docker部署MYSQL8.0发现启动了却无法连接,Navicat连接后项目正常连接的解决方案

Docker部署MYSQL8.0发现启动了却无法连接&#xff0c;使用Navicat连接后项目正常连接 客户端不支持caching_sha2_password的加密方式 可进入容器处理或使用navicat连接后修改 # 进入mysql容器内容 docker exec -it mysql bash # 进入输入下面命令 ,然后输入密码 mysql -u roo…

闲鱼无货源-高级班,最全·最新·最干,紧贴热点 深度学习(17节课)

课程目录 1-1&#xff1a;闲鱼潜规则_1.mp4 2-2&#xff1a;闲鱼的基础操作-养号篇_1.mp4 3-3&#xff1a;闲鱼实战运营-选品篇&#xff08;一&#xff09;_1.mp4 4-4&#xff1a;闲鱼实战运营-选图视频篇_1.mp4 5-5&#xff1a;闲鱼实战运营-标题筒_1.mp4 6-6&#xff1…

伯克希尔也被ST?

地球&#xff08;最&#xff09;贵股票突然闪崩&#xff0c;美股故障再次上演。昨晚齐刷刷一片的美股出现行情异常&#xff0c;伯克希尔、蒙特利尔银行、巴里克黄金等股票股价跌幅超过98%。其中&#xff0c;巴菲特旗下伯克希尔哈撒韦A类股股价更是暴跌99.97%&#xff0c;股价从…

Java集合简略记录

一、集合体系结构 单列集合&#xff1a;Collection 双列集合&#xff1a;Map 二、单列集合 List系列集合&#xff1a;添加的元素是有序、可重复、有索引 有序指的是存和取的顺序是一致的&#xff0c;和之前排序的从小到大是没有任何关系的 Set系列集合&#xff1a;添加的元素是…

webrtc vp8/9视频编解码介绍

在WebRTC中,VP8和VP9是两种常用的视频编码格式,由Google开发。这两种编码都属于开源项目,因此它们被广泛应用于需要编解码视频流的应用中,特别是在WebRTC这类实时通信技术中非常关键。 一、libvpx项目介绍 libvpx项目地址 https://chromium.googlesource.com/webm/libvpx…

拼多多笔试

拼多多2022数据分析笔试&#xff08;0822&#xff09; 一、选择题 1.已知样本量n&#xff0c;样本均值及方差求置信区间 2.决策树 3.峰度系数 4.协方差 5.第一、第二熵变 6.充分统计量 7.xgboost 8.方差分析中的多重比较 二、编程题 1. 一张用户点击路径的表&#x…

FL Studio21.2.8中文版水果音乐制作的革新之旅!

在数字化浪潮的推动下&#xff0c;音乐制作领域经历了翻天覆地的变化。从最初的模拟技术到如今的全数字化处理&#xff0c;音乐制作的门槛被大幅降低&#xff0c;越来越多的音乐爱好者和专业人士开始尝试自行创作和编辑音乐。在这个过程中&#xff0c;各种专业音乐制作软件成为…

勒索软件分析_目标文件扫描行为分析

BlackBasta首先通过 FindFirstVolumeW 与 FindNextVolumeW 实现系统中第一个卷的搜索和其余卷的遍历,之后通过 GetVolumePathNamesForVolumeNameW 检索指定卷的驱动器号和挂载的文件夹路径列表,然后通过 GetVolumeInformationW 获取关于指定卷的信息,具体代码如下所示。 Fin…

Numpy切片操作

基本切片: arr[start:stop:step]: 从索引start开始到stop结束&#xff08;不包括stop&#xff09;&#xff0c;步长为step。 省略切片: arr[:]: 复制整个数组。arr[:5]: 选择数组的前5个元素。arr[5:]: 选择从索引5开始到数组末尾的元素。 步长切片: arr[::2]: 选择数组中的每个…

几何(geometry)

题目描述 小可可最近在学习平面几何! 给定平面上的 n n n个点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x i , y i ) (x_1,y_1),(x_2,y_2),…,(x_i,y_i) (x1​,y1​),(x2​,y2​),…,(xi​,yi​)。 根据题目要求&#xff0c;输出下列两个值其中一个: 任意两点间欧几里得距…

yolov8逐步分解(9)_训练过程之Epoch迭代过程

yolov8逐步分解(1)--默认参数&超参配置文件加载_yolov8 加载yaml配置 预测-CSDN博客 yolov8逐步分解(2)_DetectionTrainer类初始化过程_train and val are required in all data yamls.-CSDN博客 yolov8逐步分解(3)_trainer训练之模型加载_yolov8 加载模型-CSDN博客 YOL…

TCP 建链(三次握手)和断链(四次握手)

TCP 建链&#xff08;三次握手&#xff09;和断链&#xff08;四次挥手&#xff09; 背景简介建链&#xff08;三次握手&#xff09;断链&#xff08;四次挥手&#xff09;序号及标志位延伸问题为什么建立连接需要握手三次&#xff0c;两次行不行&#xff1f;三次握手可以携带数…

智领未来,安全无忧:智能网联汽车监控大屏的守护之旅

在繁忙的都市中&#xff0c;驾驶者往往面临着诸多安全隐患。传统的驾驶辅助系统虽然能够提供一定的帮助&#xff0c;但在复杂多变的交通环境中&#xff0c;其局限性也逐渐显现。而智能网联汽车安全监控大屏&#xff0c;正是为了解决这一问题而诞生的。 山海鲸可视化大屏 大屏采…

基础篇04——多表查询

多表关系 一对多 多对多 多对多是通过中间表实现的 -- 创建学生表 create table student (id int auto_increment primary key comment ID,name varchar(10) comment 姓名,no varchar(3) comment 学号 ) comment 学生表;insert into student values (null, 黛绮丝, 001),(…

SLAM中四元数、流形、李群、李代数是啥?

知识点得逻辑关系如下 引言 非线性问题由于复杂的数学结构&#xff0c;多样的解空间&#xff0c;局部极值等问题求解难度大大增加。所以在求解时需要把非线性问题转化为更容易处理的形式&#xff0c;例如 数值优化方法&#xff1a;数值优化方法包括梯度下降、共轭梯度法、牛顿…