找回密码
 加入
搜索
查看: 3246|回复: 8

let's autoit例子求注释(第二个难例子)

[复制链接]
发表于 2009-4-12 06:56:50 | 显示全部楼层 |阅读模式
dim $unit=0,$ten=0,$hundred=0,$thousand=0
dim $digit=1
dim $num,$newnum
$num=inputbox("number","请输入一个不大于4位数的整数")
if @error=1 or $num="" Then
        Exit
EndIf
Select
        case $num>=0 and $num<10
                $digit=1
                $unit=mod($num,10)
                $digit=$unit
                $newnum=$unit
        case $num>=10 and $num<100
                $digit=2
                $unit=mod($num,10)
                $ten=mod(($num-$unit)/10,10)
                $newnum=$unit*10+$ten
        case $num>=100 and $num<1000
                $digit=3
                $unit=mod($num,10)
                $ten=mod(($num-$unit)/10,10)
                $hundred=mod(($num-$ten*10-$unit)/100,10)
                $newnum=$unit*100+$ten*10+$hundred
        case $num>=1000 and $num<1000
                $digit=4
                $unit=mod($num,10)
                $ten=mod(($num-$unit)/10,10)
                $hundred=mod(($num-$ten*10-$unit)/100,10)
                $thousand=mod(($num-$hundred*100-$ten*10-$unit)/1000,10)
                $newnum=$unit*1000+$ten*100+$hundred*10+$thousand
        EndSelect
        msgbox(0,"数字","这是一个"&$digit&"位数"&@crlf _
        &"个位:"&$unit&@crlf&"十位:"&$ten&$ten&@crlf&"百位:"&$hundred&@crlf _
        &"千位:"&$thousand&@crlf&"重组的新数:"&$newnum)


麻烦各位热心人士给个注释好吗?我快下班了。想今天上晚班之前就能消化这个东西。。。

[ 本帖最后由 laojikelly 于 2009-4-20 10:24 编辑 ]
发表于 2009-4-12 07:35:38 | 显示全部楼层
很明显,这段代码的关键在于Mod取模运算,Select分支只是用来判断输入数字长度。

题外话,代码好复杂,可以优化精简一下。
发表于 2009-4-12 11:43:08 | 显示全部楼层
dim $unit=0,$ten=0,$hundred=0,$thousand=0 ;声明4个变量并赋值为0
dim $digit=1 ;声明一个变量赋值为1
dim $num,$newnum ;声明2个变量
$num=inputbox("number","请输入一个不大于4位数的整数") ;输入数字并赋值给num
if @error=1 or $num="" Then ;判断输入是否正确,未输入退出
    Exit
EndIf
Select
    case $num>=0 and $num<10   ;判断所输入的数字大小
        $digit=1 ;因为所输入的数字大于等于0小于10,所以判定输入了1位数
        $unit=mod($num,10) ;将个位上的数字赋值给unit
        $digit=$unit
        $newnum=$unit
    case $num>=10 and $num<100  ;原理同上
        $digit=2 ;原理同上
        $unit=mod($num,10)
        $ten=mod(($num-$unit)/10,10) ;求出十位上的数字
        $newnum=$unit*10+$ten ;将个位上的数字乘以10加上十位上的数字
    case $num>=100 and $num<1000
        $digit=3
        $unit=mod($num,10)
        $ten=mod(($num-$unit)/10,10)
        $hundred=mod(($num-$ten*10-$unit)/100,10)
        $newnum=$unit*100+$ten*10+$hundred
    case $num>=1000 and $num<1000
        $digit=4
        $unit=mod($num,10)
        $ten=mod(($num-$unit)/10,10)
        $hundred=mod(($num-$ten*10-$unit)/100,10)
        $thousand=mod(($num-$hundred*100-$ten*10-$unit)/1000,10)
        $newnum=$unit*1000+$ten*100+$hundred*10+$thousand
    EndSelect
    msgbox(0,"数字","这是一个"&$digit&"位数"&@crlf _   ;@crlf是换行的意思
    &"个位:"&$unit&@crlf&"十位:"&$ten&$ten&@crlf&"百位:"&$hundred&@crlf _
    &"千位:"&$thousand&@crlf&"重组的新数:"&$newnum)
发表于 2009-4-12 21:32:33 | 显示全部楼层
楼主是女的吗?难得看到个女的喜欢写代码的。加群吧,大家一起交流交流。
 楼主| 发表于 2009-4-14 03:34:07 | 显示全部楼层
看多几遍结果发现自己写错了。。

[ 本帖最后由 laojikelly 于 2009-4-14 06:56 编辑 ]
 楼主| 发表于 2009-4-14 04:09:38 | 显示全部楼层
还有,第一行中dim $unit=0,$ten=0,$hundred=0,$thousand=0,为什么都给他们赋值为0呢?
发表于 2009-4-14 13:09:01 | 显示全部楼层
原帖由 laojikelly 于 2009-4-14 04:09 发表
还有,第一行中dim $unit=0,$ten=0,$hundred=0,$thousand=0,为什么都给他们赋值为0呢?


作者的意图是,如果输入是百位数,哪么千位就用0表示,所以定义$thousand=0
如果输入时十位数,千位和百位均用0表示,所以$hundred=0
..
.
发表于 2009-4-14 17:12:23 | 显示全部楼层
;定义个位($unit)、十位($ten)、百位($hundred)、千位($thousand)四个变量
;以用来存储这四个位上的相应数字,并令其初值为0
Dim $unit = 0, $ten = 0, $hundred = 0, $thousand = 0
;定义位数($digit)变量
Dim $digit = 1
;定义输入的数字($num)和新数字($newnum)两个变量
Dim $num, $newnum
;请求输入一个数字,并赋值给$num
$num = InputBox("number", "请输入一个不大于4位数的整数")
;如果未输入数据或用户单击了取消,则退出本程序
If @error = 1 Or $num = "" Then
        Exit
EndIf
;一系列的判定
Select
        ;当输入的数字是一位数时
        Case $num >= 0 And $num < 10
                ;位数为1
                $digit = 1
                ;个位为$num除以10后得的余数
                $unit = Mod($num, 10)
                ;新数就等于这个个位数
                $newnum = $unit
                ;当输入的数字是两位数时
        Case $num >= 10 And $num < 100
                ;位数为2
                $digit = 2
                ;个位为$num除以10后得的余数
                $unit = Mod($num, 10)
                ;十位为$num减去个位数后除以10所得的余数
                $ten = Mod(($num - $unit) / 10, 10)
                ;新数等于个位(现在的十位)乘以10加十位(现在的个位)
                $newnum = $unit * 10 + $ten
                ;当输入的数字是三位数使
        Case $num >= 100 And $num < 1000
                ;位数为3
                $digit = 3
                ;个位为$num除以10后得的余数
                $unit = Mod($num, 10)
                ;十位为$num减去个位数后除以10所得的余数
                $ten = Mod(($num - $unit) / 10, 10)
                ;百位为$num减去十位乘以10再减去个位后除以100所得的余数
                $hundred = Mod(($num - $ten * 10 - $unit) / 100, 10)
                ;新数等于个位(现在的百位)乘以100加十位(也是现在的十位)乘以10再加百位(现在的个位)
                $newnum = $unit * 100 + $ten * 10 + $hundred
                ;当输入的数字是四位数时
        Case $num >= 1000 And $num < 10000
                ;位数为3
                $digit = 4
                ;个位为$num除以10后得的余数
                $unit = Mod($num, 10)
                ;十位为$num减去个位数后除以10所得的余数
                $ten = Mod(($num - $unit) / 10, 10)
                ;百位为$num减去十位乘以10再减去个位后除以100所得的余数
                $hundred = Mod(($num - $ten * 10 - $unit) / 100, 10)
                ;千位为$num减去百位乘以100再减去十位乘以10再减去个位后除以100所得的余数
                $thousand = Mod(($num - $hundred * 100 - $ten * 10 - $unit) / 1000, 10)
                ;新数等于个位(现在的千位)乘以1000加十位(现在的百位)乘以100
                ;再加百位(现在的十位)乘以10再加千位(现在的个位)
                $newnum = $unit * 1000 + $ten * 100 + $hundred * 10 + $thousand
EndSelect
;展示结果
MsgBox(0, "数字", "这是一个" & $digit & "位数" & @CRLF _
                 & "个位:" & $unit & @CRLF & "十位:" & $ten & @CRLF & "百位:" & $hundred & @CRLF _
                 & "千位:" & $thousand & @CRLF & "重组的新数:" & $newnum)


楼主抄写例子都抄错了好几处,帮你改过来了,也为你添加了注释

这个程序显然是很拖沓的,但这是一个用于训练初级编程者逻辑能力的例子,而不是用于应用的例子,所以拖沓是必然的。初学者可以通过这个例子训练逻辑方面、数学方面等能力,这个例子曾是C语言中很经典的一个初学者必须训练的例子。

楼主细细品味一下这个例子的各个细节,读懂这个例子对编程能力的提高很有帮助
 楼主| 发表于 2009-4-20 10:24:37 | 显示全部楼层
其实我已经理解了。。现在才发现有热心人发注释上来。
我就再看一遍吧。。。谢谢你的注释!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-28 18:49 , Processed in 0.083378 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表