Как исключить из одномерного массива max и min? - VB
Формулировка задачи:
Из данного массива A(n) исключить максимальный и минимальный элемент
Задача элементарная, но я тупо забыл как работать в VB)))
Решение задачи: «Как исключить из одномерного массива max и min?»
textual
Листинг программы
Option Explicit
Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
Private Sub Fill_Array(ByRef A() As Long, ByVal Bound As Long, _
ByVal nFrom As Long, ByVal nTo As Long, _
ByRef min As Long, ByRef max As Long)
'Bound 'кол-во эл-тов
'nFrom 'диапазон - от
'nTo 'диапазон - до (включительно)
'min 'буфер для получения мин. числа
'max 'буфер для получения макс. числа
Dim n As Long
ReDim A(Bound)
min = nFrom: max = nTo
For n = 0 To Bound
A(n) = Int(Rnd * (nTo - nFrom + 1)) + nFrom
If A(n) > max Then max = A(n)
If A(n) < min Then min = A(n)
Next
End Sub
Private Function Del_min_max(ByRef A() As Long, ByVal min As Long, ByVal max As Long)
Dim B() As Long
Dim n As Long
Dim c As Long
ReDim B(UBound(A))
For n = 0 To UBound(A)
If A(n) <> max And A(n) <> min Then
B(c) = A(n)
c = c + 1
End If
Next
If c = 0 Then Erase B() Else ReDim Preserve B(c - 1)
Del_min_max = B()
End Function
Public Sub main()
Dim A() As Long
Dim min As Long 'буфер для получения мин. числа
Dim max As Long 'буфер для получения макс. числа
Dim n As Long
Call Fill_Array(A(), 20, 0, 9, min, max)
Debug.Print "Исходный массив:"
For n = 0 To UBound(A)
Debug.Print "A("; n; ")="; A(n)
Next
A() = Del_min_max(A(), min, max)
Debug.Print "После удаления:"
If SafeArrayGetDim(A) <> 0 Then
For n = 0 To UBound(A)
Debug.Print "A("; n; ")="; A(n)
Next
End If
End Sub