Варианты 1- 4
В этом посте я вкратце опишу, как можно сделать другие варианты, при этом буду считать, что массив Prod() уже получен, и число его элементов равно arg-1.1 вариант
Определяем динамику изменения выпуска.Создаем функцию Динамика и в ней массив (или получаем его).
Public Function Динамика(ByVal arg As Integer, ParamArray Prod()) As String
Dim d_up As Boolean 'логическая переменная - был ли рост
Dim d_down As Boolean 'логическая переменная - было ли падение
Dim i As Integer 'счетчик цикла
Dim p As Integer 'переменная для сравнения значений массива
'присваиваем начальные значения логическим переменным
d_up = False
d_down = False
'первое значения для сравнения
p = Prod(0)
'в цикле сравниваем последовательно элементы массива
'если следующий элемент массива больше, чем предыдущий, значит, был рост
'если следующий элемент массива меньше, чем предыдущий, значит, было падение
'если они равны, то значения постоянны
For i = 1 To arg - 2
If p < Prod(i) Then
d_up = True
ElseIf p > Prod(i) Then
d_down = True
End If
p = Prod(i)
Next i
'если был рост и падение, то возвращаем Колебание
If (d_up = True) And (d_down = True) Then
Динамика = "Колебание"
'если не было ни роста, ни падения, то возвращаем Постоянен
ElseIf (d_down = False) And (d_up = False) Then
Динамика = "Постоянен"
'если не было падения, а только рост и постоянство (или только рост), то возвращаем Рост
ElseIf d_down = False Then
Динамика = "Рост"
'Если не было роста, а только падение и постоянство (или только падение), то возвращаем Падение
ElseIf d_up = False Then
Динамика = "Падение"
End If
End Function
Вариант 2
Определяем номера минимальных значений. Если их несколько, вернуть строкой через пробел. В запросе нужно вывести номера месяцев с минимальным выпуском.Вот, например, как можно решить эту задачу:
Public Function MinV1(ByVal arg As Integer, ParamArray Prod()) As StringНомера месяцев с минимальным выпуском будем добавлять в строку str. Изначально считаем минимальным нулевой элемент массива Prod (нумерация идет с нуля), то есть выпуск первого месяца. В строку вносим цифру 1. Если следующий выпуск будет меньше его, то строку стираем и вносим номер этого выпуска. Если следующий выпуск будет равен минимальному, то в строку через пробел вносим номер этого месяца. И так в цикле.
Dim str As String 'переменная для записи номеров месяцев
Dim i As Integer 'счетчик цикла
Dim min As Long 'минимальное значение выпуска
'определяем минимум - 1 элемент массива
min = Prod(0)
str = "1 "
For i = 1 To arg - 2
'если элемент массива меньше минимума
If Prod(i) < min Then
min = Prod(i) 'новое значение минимума
str = CStr(i + 1) + " " 'заполняем строку снова
'если элемент массива равен минимуму
ElseIf Prod(i) = min Then
str = str + CStr(i + 1) + " " 'дополняем строку еще одним значением
End If
Next i
MinV1 = RTrim(str) 'убираем из строки последний пробел и возвращаем результат
End Function
Тут есть такой момент.
В случае стабильного выпуска (без колебаний) в строку попадут все номера месяцев. Если это не устраивает, то можно в конце добавить проверку на равенство всех значений. Если они все равны, то нужно вернуть пустую строку.
Вариант 3
Определить номера элементов, содержащих значения больше среднего по массиву. Вернуть строкой. В запросе вывести номера месяцев с выпуском больше среднего.Принцип выполнения тот же, что и в первом варианте, но сравниваем не с минимумом, а со средним значением:
Public Function sred1(ByVal arg As Integer, ParamArray Prod()) As StringОбратите внимание: если все значения равны, то строка будет пустой.
Dim str As String 'переменная для записи номеров месяцев
Dim i As Integer 'счетчик цикла
Dim sred As Double 'среднее значение выпуска
Dim sum As Integer 'сумма всех значений
sum = 0 'обнуляем сумму
'находим сумму всех выпусков в цикле
For i = 0 To arg - 2
sum = sum + Prod(i)
Next i
sred = sum / (arg - 1)
str = ""
For i = 0 To arg - 2
'если элемент массива больше среднего
If Prod(i) > sred Then
str = str + CStr(i + 1) + " " 'дополняем строку еще одним значением
End If
Next i
sred1 = RTrim(str) 'убираем из строки последний пробел и возвращаем результат
End Function
Вариант 4
Определить номера элементов, содержащих значения меньше среднего по массиву. Вернуть строкой. В запросе вывести номера месяцев с выпуском меньше среднего.Делаем так же, как во 2 варианте, только меняем знак > на < при сравнении в цикле.
Public Function sred2(ByVal arg As Integer, ParamArray Prod()) As String
Dim str As String 'переменная для записи номеров месяцев
Dim i As Integer 'счетчик цикла
Dim sred As Double 'среднее значение выпуска
Dim sum As Integer 'сумма всех значений
sum = 0 'обнуляем сумму
'находим сумму всех выпусков в цикле
For i = 0 To arg - 2
sum = sum + Prod(i)
Next i
sred = sum / (arg - 1)
str = ""
For i = 0 To arg - 2
'если элемент массива больше среднего
If Prod(i) < sred Then
str = str + CStr(i + 1) + " " 'дополняем строку еще одним значением
End If
Next i
sred2 = RTrim(str) 'убираем из строки последний пробел и возвращаем результат
End Function
Еще по этому заданию
Пользовательские функции Access (ППП) – общее описание
Пользовательские функции в Access - варианты 5-9
Общий список всех сообщений по этой работе
