不可思议的运行结果...... 再讨论!
遇到一不可思议的问题!!! ( 代码的适用性不重要,重要的是解决这个“不可思议”的困惑。请大家看清楚,注意区分 ii 和 jj )第一段代码:
*
* 插入排序算法练习
*
*Dimension AA(20) &&数组名 有大小写之分;使用[]和()都行!
*Declare AA(20) &&也可以。Declare和 Dimension 一样,就和EDIT命令和change命令相同一样。重定义数组,对应的元素值不变化!
**由于FoXPro数组的下标,一般是从1开始的,所有不能使用数组来完成 插入排序,当然Asort函数就可以直接排序数组。
input '请输入第1个数值型数据:' to AA1
for ii=2 to 10 && 10个数组排序,n=10
ii_c=transform(ii)
input '请输入第'+ii_c+'个数值型数据:' to AA&ii_c
AA0 = AA&ii_c
jj=ii-1
jj_c=transform(jj)
do while .t. &&为什么用 do while AA0 < AA&jj_c 出现不是预知的逻辑错误呢?
if AA0 < AA&jj_c && transform(0) 就是返回 '0'
jj1_c=transform(jj+1)
AA&jj1_c = AA&jj_c
jj=jj-1
jj_c=transform(jj)
else
exit
endif
enddo
jj1_c=transform(jj+1)
AA&jj1_c = AA0
endfor
for ii=1 to 10
ii_c=transform(ii)
? 'AA'+ii_c+':'+transform(AA&ii_c)
endfor
第二段代码:
input '请输入第1个数值型数据:' to AA1
for ii=2 to 10 && 10个数组排序,n=10
ii_c=transform(ii)
input '请输入第'+ii_c+'个数值型数据:' to AA&ii_c
AA0 = AA&ii_c
jj=ii-1
jj_c=transform(jj)
do while AA0 < AA&jj_c &&为什么 do while AA0 < AA&jj_c 出现逻辑错误呢? transform(0) 就是返回 '0'
jj1_c=transform(jj+1)
AA&jj1_c = AA&jj_c
jj=jj-1
jj_c=transform(jj)
enddo
jj1_c=transform(jj+1)
AA&jj1_c = AA0
endfor
for ii=1 to 10
ii_c=transform(ii)
? 'AA'+ii_c+':'+transform(AA&ii_c)
endfor
第一段代码和第二段代码运行结果应该是相同的呀! 为什么第二段代码出现不是预知的逻辑错误啊!不可思议,求高手解答!! 谢谢!!!
第二段代码:改为:
for ii=2 to 10 && 10个数组排序,n=10
ii_c=transform(ii)
input '请输入第'+ii_c+'个数值型数据:' to AA&ii_c
AA0 = AA&ii_c
jj=ii-1
jj_c=transform(jj)
AAn=AA&jj_c
do while AA0 < AAn &&为什么 do while AA0 < AA&jj_c 出现逻辑错误呢? transform(0) 就是返回 '0' do whhile "条件表达式"不能使用宏代换符号 "&" 吗? 为什么 IF 条件表达式就可以呢?
jj1_c=transform(jj+1)
AA&jj1_c = AA&jj_c
jj=jj-1
jj_c=transform(jj)
AAn=AA&jj_c
enddo
jj1_c=transform(jj+1)
AA&jj1_c = AA0
endfor
for ii=1 to 10
ii_c=transform(ii)
? 'AA'+ii_c+':'+transform(AA&ii_c)
endfor
这样也可以运行出 预想的结果的!
高手可以试运行一下这三段代码,帮忙分析分析第二段代码错在哪里?
代码的适用性不重要,重要的是解决这个“不可思议”的困惑。
这是插入排序的典型算法,巧妙引用数组 下标0的元素 AA(0) 控制循环到最后的安全退出。
由于VFP不能引用0下标,本人采用了变量:AA0, AA1, AA2, ....,AA10 的方法模拟数组。原理是一样的,排序结果在:AA1到AA10的变量里。
本人在多年使用VFP6.0 编程的过程,遇到过一些不可思议的问题。