找回密码
 加入
搜索
查看: 9756|回复: 24

[AU3基础] 一组数字,找出最接近指定数字的数字,负数不要……(已解决)

 火.. [复制链接]
发表于 2014-3-7 15:02:01 | 显示全部楼层 |阅读模式
本帖最后由 dearmb 于 2014-4-6 15:52 编辑


首先先指定一个两个小点,获取两点的X,Y坐标
然后获取所有横杠的坐标,放到一个数组里,横杠的Y坐标和两点的Y坐标最近的,就是正好那个范围
所以才有这个帖子的题目,这就是我的目的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-3-7 15:45:11 | 显示全部楼层
建立个数组,把所有的数字和指定数字都包含在内,排序,找出指定数字的索引,下一项就是要找的数字
 楼主| 发表于 2014-3-7 15:53:29 | 显示全部楼层
回复 2# netegg

我是想把数字添加到数组里,但是现在的情况是,数组大小和数组内容都是变量
是在数组之前获取到的,好像不支持内容是变量的数组呢
发表于 2014-3-7 16:01:34 | 显示全部楼层
何必管数组大小呢,redim就完了
发表于 2014-3-7 16:02:39 | 显示全部楼层
如果是已经获取到的数据,做个不定数组就行了
 楼主| 发表于 2014-3-7 16:23:35 | 显示全部楼层
回复 5# netegg


    什么叫做“不定数组”?
我在学习redim呢
发表于 2014-3-7 16:28:05 | 显示全部楼层
dim $a[0]=$i
....
redim $a[0] = $i +1
大概意思
发表于 2014-3-7 17:29:28 | 显示全部楼层
本帖最后由 skyfree 于 2014-3-8 08:49 编辑
#include <Array.au3>

Opt('MustDeclareVars', 1)

_Demo__Main()
Exit

Func _Demo__Main()
        ;输入
        Local $r1, $r2
        ; <---- 注意,因为只是测试和范例,我并没有增加审查机制,所以输入值务必是正确的 ----->
        $r1 = InputBox('请输入', '请输入指定数, 如55', '55')
        $r2 = InputBox('请输入', '请输入一组数, 多个使用英文逗号隔开, 如23,34,88,95', '34,88,23,95')

        ;处理
        Local $Num = Number($r1)
        Local $ta_Arr = StringSplit($r2, ',')
        Local $a_Num[1][2], $p = 1
        Local $i
        For $i = 1 To UBound($ta_Arr, 1) - 1
                If Number($ta_Arr[$i]) - $Num > 0 Then
                        ReDim $a_Num[$p + 1][2]
                        $a_Num[$p][0] = Number($ta_Arr[$i])
                        $a_Num[$p][1] = Number($ta_Arr[$i]) - $Num
                        $p += 1
                EndIf
        Next
        _ArraySort($a_Num, 0, 1, 0, 1)
        ;;_ArrayDisplay($a_Num,'$a_Num')

        ;输出
        MsgBox(0 + 64, '', '最接近' & $Num & '的数是' & $a_Num[1][0])
EndFunc   ;==>_Demo__Main
发表于 2014-3-7 21:23:50 | 显示全部楼层
本帖最后由 netegg 于 2014-3-7 21:28 编辑

回复 8# skyfree
不觉得搞出个二维数组有点画蛇添足吗
其实我不清楚楼主的具体要求和具体情况为何
发表于 2014-3-8 08:49:33 | 显示全部楼层
回复 9# netegg


    拿出解决方案来,再评论。
发表于 2014-3-8 16:16:48 | 显示全部楼层
#include<array.au3>
$aa = _arraysort($aA)
_ArraySearch($aa, $item)
发表于 2014-3-9 10:39:50 | 显示全部楼层
实在想不出好的办法来,笨人笨法~
#include <Array.au3>
Dim $num[9] = [8, 23, 34, 64, 88, 95, 25, 65, 21]
Dim $x = 0, $compN = 55
Dim $k
For $i = 1 To $num[0]
        If $num[$i] > $compN Then
                For $element In $num
                        If $num[$i] < $element Then
                                If $x = 0 Then
                                        $x = $num[$i]
                                        $k = $i
                                ElseIf $num[$i] < $x Then
                                        $x = $num[$i]
                                        $k = $i
                                EndIf
                        EndIf
                Next
        EndIf
Next
MsgBox(0, "该数组中最接近" & $compN & "的值", "$num[" & $k & "] = " & $x)
发表于 2014-3-10 12:59:42 | 显示全部楼层
Dim $array[4]=[23,34,88,95]
Dim $num=55
Dim $j=-1,$k=0
For $i=0 To UBound($array)-1
        If $array[$i]>=$num Then
                If $j=-1 Then
                        $j=$array[$i]-$num
                        $k=$array[$i]
                ElseIf $array[$i]-$num<$j Then
                        $j=$array[$i]-$num
                        $k=$array[$i]
                EndIf
        EndIf
Next
MsgBox(1,"","最接近"&$num&"的数是"&$k)
 楼主| 发表于 2014-3-10 14:35:28 | 显示全部楼层
回复 12# netegg

呃……_arraysort也不是按数字大小排序啊,是按首字母排序啊,好像文件名排序一样……唉

                _ArrayDisplay($arrhenggang, "原数组")
                _Arraysort($arrhenggang)
                _ArrayDisplay($arrhenggang, "原数组")

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2014-3-10 14:48:53 | 显示全部楼层
实际需求上图了,请帮忙看下,多谢了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 02:25 , Processed in 0.180997 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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