|
Hi! I am having trouble with one little part of my program
I have to find the min in a collection of data that's already been placed in a text file in the bin folder.
I know that if I were finding the largest, I could set Dim largest = 0, but this does not work for min. We cannot use negative numbers so the smallest would end up always being zero.
I need to know how to get around that.
[CODE]
Private Sub btnFindSmallest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFindSmallest.Click
'Finds smallest of a collection of numbers.
Dim smallest, num As Double
smallest = 999
Dim sr As IO.StreamReader = IO.File.OpenText("DATA.TXT")
Do While sr.Peek <> -1
num = CDbl(sr.ReadLine)
If num < smallest Then
smallest = num
End If
Loop
End Sub
[/CODE]
where I have smallest = 999, I need it to be able to not just check up to 999 but to infinity if necessary because the smallest will always be zero if I set it equal to zero.
Thanks!
|
|
|
I'd read the file into an array and then use a min or max function something like this:
Sub Main()
Dim oFileSys As Scripting.FileSystemObject
Dim oFile As File
Dim oTxtStrm As TextStream
Dim NumSet() As Integer
Dim NumCount As Integer
Set oFileSys = CreateObject("Scripting.FileSystemObject")
Set oFile = oFileSys.GetFile("/forum/DNumberList.txt")
Set oTxtStrm = oFile.OpenAsTextStream(ForReading)
NumCount = 0
Do While Not oTxtStrm.AtEndOfStream
NumCount = NumCount + 1
'Expand Array
ReDim Preserve NumCount(NumCount) As Integer
NumSet(NumCount) = Val(oTxtStrm.ReadLine)
Loop
MinNum = Min(NumSet)
MaxNum = Max(NumSet)
oTxtStrm.Close
Set oTxtStrm = Nothing
Set oFile = Nothing
Set oFileSys = Nothing
End Sub
Public Function Min(ParamArray NumberSet() As Integer) As Integer
'Return the minimum integer from a set of integers
Dim i As Integer
Dim CurrentMin As Integer
'Set CurrentMin to the first number in the set
CurrentMin = LBound(NumberSet)
'Run a loop from the 2nd number in the set to the end of the set
For i = LBound(NumberSet) + 1 To UBound(NumberSet)
'If the current number in the set is less than the one in CurrentMin,
'then we have a new current minimum, store the current number in current min
If NumberSet(i) < CurrentMin Then CurrentMin = NumberSet(i)
Next i
Min = CurrentMin
End Function
Public Function Max(ParamArray NumberSet() As Integer) As Integer
'Return Maximum integer from a set of numbers
Dim i As Integer
Dim CurrentMax As Integer
'Set CurrentMax to the first number in the set
CurrentMax = LBound(NumberSet)
'Run a loop from the second number in the set to the end of the set
For i = LBound(NumberSet) + 1 To UBound(NumberSet)
'If the current number in the set is greater than CurrentMax,
'Set CurrentMax to the current number in the set
If NumberSet(i) > CurrentMax Then CurrentMax = NumberSet(i)
Next i
Max = CurrentMax
End Function
|
|
|
|
|
|
|
// |