zoukankan      html  css  js  c++  java
  • 程序流程的控制之循环(Delphi)

    循环式编程语言中给一个共同的元素,它可以用来重复执行某个动作,知道某个特定的条件。

    所有循环都有以下的元素:

    • 起点

    • 主体

    • 结束点

    • 循环结束的条件

    • 辅助的Break和Continue过程

    循环的开始点是Object Pascal循环语句之一(forwhilerepeat),每次循环迭代时,主体包含的语句都要执行一次,主体包含任何有效的Object Pascal代码,它可以是单行代码,也可以使多行代码。若主体包含的是多行代码,其代码必须用beginend语句分块(只有repeat循环例外)。循环的结束点要么是关键字end(在for循环和while循环情况下),要么是关键字until(在repeat循环情况下)。当一个循环主体是单行代码时,就不需要用关键字beginend

    大部分循环都是这样操作的:进入循环并检验条件,若检验结果为False,则执行循环主体,当程序执行到循环体底部时,它将跳回循环顶部,并再一次检验条件,如果检验结果仍然是False,则重复整个以上过程,若检验结果是True,则程序将立刻跳到紧跟在循环代码块后面的代码行。(这些描述对于repeat循环是个例外,它是在循环底部检验条件,而不是在循环顶部。)

    Caution

    偶尔很容易把循环检验条件写成永远的False,其结果就会使程序锁死或者挂起,不停地循环,这种情况下只能在Windows任务管理器里面来终止该进程。

    Tip

    在Delphi中,可用工具栏中的Run按钮或者按F9来运行一个程序,若要杀死一个在IDE中运行的程序,可在主菜单上选择Run | Program Reset或者按Ctrl + F2

    在Delphi中可以使用for to/down to dowhile…dorepeat…until三种方式来实现循环控制。

    var
      I: Integer;
      X: Integer;
    begin
      X := 10;
      for I := 0 to 9 do       { I从0递增变化到9,依次执行10次DoSomething}
      begin
        { DoSomething}
      end;
    
      for I := 0 to Pred(X) do { Pred(X)返回X的前一个值,即9}
      begin
        { DoSomething}
      end;
    
      for I := 9  downto 0 do  { I从9递减变化到0,依次执行10次DoSomething}
      begin
        { DoSomething}
      end;
    
      X := 8;                  { I从9递减到0,循环10次}
      for I := Succ(X) downto 0 do
      begin                    { Succ函数返回指定值的后一个}
        { DoSomething}
      end;
    
      I := 0;
      while I <= 10 do  { 和for I := 0 to 10 do的功能是一样的}
      begin
        ShowMessage(IntToStr(I));
        Inc(I);         { while的特点就是可以自己控制循环因子}
      end;
    
      I := 0;
      repeat            { 和while I <= 10 do 功能相同}
        ShowMessage(IntToStr(I));
        Inc(I);
      until I = 10;
    
      I := 0;   { Inc以指定的值递增,Dec以指定的值递减}
      Inc(I);   { I = 1}
      Inc(I, 2);{ I = 3}
      Dec(I, 2);{ I = 1}
      Dec(I);   { I = 0}
      ShowMessage(IntToStr(I));
    end;

    Caution

    使用for方式要注意,循环变量的步长是固定为1的,不能再循环体中用代码进行修改。

    while的特点就是可以自行控制循环变量的变化,灵活性比for更大。

    repeat是从while演化过来的。while首先要判断条件是否成立再执行,而repeat是首先执行,再判断条件是否成立。

    Note

    上面代码中对于I变量名的使用起源于FORTRAN语言,而这也是for循环的习惯用法。

    Continue和Break过程

    Continue过程,用来强制程序执行到循环底部并进入一个循环,而跳过Continue后面的所有语句。如果位于try…finally块中则会先执行finally..end块再进入下一个循环。

    var
      I:Integer;
    begin
      for I := 0 to 2 do
      begin
        try
          if I < 1 then
            Continue;
          ShowMessage(IntToStr(I));
        finally
          ShowMessage('finally..end');
        end;
      end;
    end;

    运行结果依次如下(图示中0,1,2分别代表循环变量I变化时的显示结果):

    0027

    Break过程,用来循环正常结束之前终止循环。如果位于try…finally块中,则finally…end块也会得到执行,例如下面代码:

    var
      I:Integer;
    begin
      for I := 0 to 2 do
      begin
        try
          if I > 1 then
            Break;
          ShowMessage(IntToStr(I));
        finally
          ShowMessage('finally..end');
        end;
      end;
    end;

    运行结果依次如下(图示中0,1,2分别代表循环变量I变化时的显示结果):

    0028

    Continue和Break只能用在for、while和repeat循环中,如果在循环外部用这两个过程将会产生编译器错误。

    以上代码均在Delphi7中测试通过。

  • 相关阅读:
    原型链与析构函数
    django篇-路由系统介绍
    mvc与mtv
    模板初探
    安装和创建django项目
    一分钟学会定时删除日志的 Shell 脚本
    svn其中一种备份方式svnsync
    mysql企业实战(二)之主从复制,读写分离,双主,以及高可用
    mysql企业实战(一)
    nginx详解
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2291085.html
Copyright © 2011-2022 走看看