W wuyuede Unregistered / Unconfirmed GUEST, unregistred user! 2008-09-17 #1 在看教程时,对于for的用法都是简单介绍的,没有看到过 对步值的讲解,我想问一下在delphi中能否像 c语言里一样 可以控制 sept 来控制步值? delphi 中到底能否控制步值?还是只能 加一或者 减一来控制循环?
在看教程时,对于for的用法都是简单介绍的,没有看到过 对步值的讲解,我想问一下在delphi中能否像 c语言里一样 可以控制 sept 来控制步值? delphi 中到底能否控制步值?还是只能 加一或者 减一来控制循环?
T tlzmm_2008 Unregistered / Unconfirmed GUEST, unregistred user! 2008-09-17 #2 For 循环语句,不能控制步长,担while语句可以做到。
L levi Unregistered / Unconfirmed GUEST, unregistred user! 2008-09-17 #3 for 只能 to 或者 dwonto 步长为1或-1, 没法改变步长
C creation-zy Unregistered / Unconfirmed GUEST, unregistred user! 2008-09-17 #8 Delphi的For循环有特殊的优化机制——只能执行简单增量或减量,可以使用最简单的机 器指令,效率极高。如果步长可以变化,那么就需要额外的指令以加入步长值,从而降低效 率。 如果确实需要实现其它步长的循环,完全可以用while或repeat循环——别忘了这帮For的 好兄弟哟。 :)
Delphi的For循环有特殊的优化机制——只能执行简单增量或减量,可以使用最简单的机 器指令,效率极高。如果步长可以变化,那么就需要额外的指令以加入步长值,从而降低效 率。 如果确实需要实现其它步长的循环,完全可以用while或repeat循环——别忘了这帮For的 好兄弟哟。 :)
H hfghfghfg Unregistered / Unconfirmed GUEST, unregistred user! 2008-11-22 #9 可以变步长啊。 procedure TForm1.Button1Click(Sender: TObject); var c, i: integer; p: PInteger; begin c := 0; for i := 1 to 10 do begin if i = 5 then begin p := @i; inc(p^); end; inc(c); end; ShowMessage(inttostr(c)); end; 结果 是 9
可以变步长啊。 procedure TForm1.Button1Click(Sender: TObject); var c, i: integer; p: PInteger; begin c := 0; for i := 1 to 10 do begin if i = 5 then begin p := @i; inc(p^); end; inc(c); end; ShowMessage(inttostr(c)); end; 结果 是 9
H hfghfghfg Unregistered / Unconfirmed GUEST, unregistred user! 2008-11-22 #10 procedure TForm1.Button1Click(Sender: TObject); var c, i: integer; p: PInteger; begin c := 0; for i := 1 to 100 do begin if i = 5 then begin p := @i; p^ := p^ + 80; end; inc(c); end; ShowMessage(inttostr(c)); end; 结果 是 20 总之 i可以 随你变 不过 小心 死循环 for 的 结束 是 相等跳
procedure TForm1.Button1Click(Sender: TObject); var c, i: integer; p: PInteger; begin c := 0; for i := 1 to 100 do begin if i = 5 then begin p := @i; p^ := p^ + 80; end; inc(c); end; ShowMessage(inttostr(c)); end; 结果 是 20 总之 i可以 随你变 不过 小心 死循环 for 的 结束 是 相等跳
X [xiaopei] Unregistered / Unconfirmed GUEST, unregistred user! 2008-11-22 #11 LS的想法真不错,竟利用指针来间接修改i的步长值。
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2008-11-22 #12 所以很容易出错..... 都是循环,想变步长的话用while或者repeat吧,如果你只是为了写着方便....-_- 那就无话可说了
K kinneng Unregistered / Unconfirmed GUEST, unregistred user! 2008-11-23 #13 其实,根本没必要研究步进值的,简单乘法就解决了。 for i:=0 to 50 do begin a := i * 2; //a按2步进,等效于 for i=0 to 100 step 2 b := i * 0.5; //b按0.5步进 等效于 for i=0 to 25 step 0.5 end; 循环的最后值 50 是实际最后值 / 步进值,100/2=50,25/0.5=50 这么简单,这是很基础的算法,不需要想得太复杂。
其实,根本没必要研究步进值的,简单乘法就解决了。 for i:=0 to 50 do begin a := i * 2; //a按2步进,等效于 for i=0 to 100 step 2 b := i * 0.5; //b按0.5步进 等效于 for i=0 to 25 step 0.5 end; 循环的最后值 50 是实际最后值 / 步进值,100/2=50,25/0.5=50 这么简单,这是很基础的算法,不需要想得太复杂。