(求教各位高手)如何找出绝对值最大的一个数
3.360 4.767 4.560 2.988 .211 -2.509 -2.908 -1.209
-1.290 -.953 -1.249 -1.998 -3.908 -3.131 .142 3.130
4.671 4.834 4.727 4.699 2.930 .644 -.776 -2.592
-2.223 -.097 .912 -1.308 -4.855 -3.859 .508 .241
.013 2.698 3.491 3.312 1.566 .575 1.137 2.116
.299 -2.998 -5.818 -4.720 -3.711 -3.405 -.726 1.288
-.414 -2.825 -3.052 -.250 .792 2.336 2.141 3.209
3.240 3.076 1.432 -1.518 -3.994 .244 .776 .142
-2.400 -2.796 .115 1.172 2.880 .571 -4
.117 5.017 6.685 6.809 2.779 -4.313 -7.274 -6.182
-3.663 -.017 1.599 .717 2.765 3.548 2.088
我的文本数据中有几千个这样的数据,如何才能找到其中绝对值最大的一个
[解决办法]
我的天啊,这是文本数据,数与数之间总得有分隔符啊(是豆号“,”还是引号“”,还是空格)。先定义一个动态数组(Dim TextData() as long),用Open命令打开文本文件,然后将数据读入这个数组中。
1、根据数组维数,即可知道数据的个数;2、用VB提供的Max函数求最大值(用一个递归函数,一对一对地求)。
[解决办法]
一,读入文本到数组.
不过按你给出的那格式,看来不是换行回车之类的分隔符....
就先读入一个变量内,然后使用Split函数来拆分到一个数组;
二,排序.
使用任意一种排序算法把这个数组排序.
具体到算法里的比较大小过程,使用ABS()函数就可以以绝对值进行比较了.
三,输出.
总数,如BD所说,数组的最大上标减最小下标就是了(SPLIT函数返回的数组最小下标是0,因此可以直接取最大上标,Ubound函数)
绝对值最大的,直接找数组第一位或最后一位的成员(看排序是从大到小还是从小到大排的...)
[解决办法]
Dim tmp As String, txtData() As String, i As Integer
Dim MaxValue As Single
Open "test.txt " For Input As #1
Do Until EOF(1)
Line Input #1, tmp
If Trim(tmp) > " " Then
tmp = Replace(tmp, vbTab, Space(1))
Do While InStr(tmp, Space(2))
tmp = Replace(tmp, Space(2), Space(1))
Loop
txtData = Slipt(tmp, Space(1))
For i = 0 To Ubound(txtData)
If Abs(Val(txtData(i))) > Abs(MaxValue) Then MaxValue = Val(txtData(i))
Next i
End If
Loop
MsgBox MaxValue
[解决办法]
楼上正解
Dim tmp As String, txtData() As String, i As Integer
Dim MaxValue As Single
Open "test.txt " For Input As #1
Do Until EOF(1)
Line Input #1, tmp
If Trim(tmp) > " " Then
tmp = Replace(tmp, vbTab, Space(1))
Do While InStr(tmp, Space(2))
tmp = Replace(tmp, Space(2), Space(1))
Loop
txtData = Slipt(tmp, Space(1))
For i = 0 To Ubound(txtData)
If Abs(Val(txtData(i))) > Abs(MaxValue) Then MaxValue = Val(txtData(i))
Next i
End If
Loop
MsgBox MaxValue