Варианты 5-9
Составим примеры пользовательских функций для решения заданий 5-9 вариантов, при этом считаем, что массив Prod() уже получен, и число его элементов равно arg-1. Как получить этот массив, как использовать функцию в запросе, посмотрите в общем описании задания (ссылка внизу).Вариант 5
Нужно создать функцию, которая возвращает количество элементов, содержащих значения больше среднего по массиву. В запросе нужно получить число месяцев с выпуском больше среднего.Текст функции
Public Function БольшеСреднего(ByVal arg As Integer, ParamArray Prod()) As ByteСначала в цикле находится общая сумма выпусков, затем она делится на число месяцев, чтобы найти среднее значение. Число месяцев возьмем из первого аргумента функции минус 1.
Dim i As Integer 'счетчик цикла
Dim ChisloMes As Byte 'число месяцев с выпуском больше среднего
Dim sred As Double 'среднее значение
Dim sum As Long 'сумма выпусков
sum = 0
'расчет общей суммы выпуска
For i = 0 To arg - 2
sum = sum + Prod(i)
Next i
'расчет среднего значения
sred = sum / (arg - 1)
'число месяцев с выпуском больше среднего
ChisloMes = 0
'если текущее значение больше среднего, то
'число месяцев увеличивается на 1
For i = 0 To arg - 2
If Prod(i) > sred Then ChisloMes = ChisloMes + 1
Next i
'Функция возвращает число месяцев
БольшеСреднего = ChisloMes
End Function
Затем в цикле перебираем все элементы массива и сравниваем со средним. Если элемент больше среднего, то увеличиваем счетчик.
Вариант 6
Находим максимальное и минимальное значение из массива элементов (в виде текста). Запрос - максимальный и минимальный месячный выпуск.Public Function MaxMin(ByVal arg As Integer, ParamArray Prod()) As StringСначала принимаем за минимум и максимум первый элемент массива. Затем перебираем в цикле остальные элементы и сравниваем их с минимумом и максимумом. Если элемент больше максимума или меньше минимума, меняем значение экстремума на новое.
Dim i As Integer 'счетчик цикла
Dim max As Integer 'максимальное значение выпуска
Dim min As Integer 'минимальное значение выпуска
'определяем максимум - 1 элемент массива
max = Prod(0)
'определяем минимум - 1 элемент массива
min = Prod(0)
For i = 1 To arg - 2
'если элемент массива больше максимума
If Prod(i) > max Then
max = Prod(i) 'новое значение максимума
End If
'если элемент массива меньше минимума
If Prod(i) < min Then
min = Prod(i) 'новое значение минимума
End If
Next i
'возвращаем результат - строку с двумя цифрами
MaxMin = CStr(max) + " " + CStr(min)
End Function
Вариант 7
Находим разность максимального и минимального значений из массива числовых переменных. В запросе выводим разность максимального и минимального выпусков.Public Function MaxMin1(ByVal arg As Integer, ParamArray Prod()) As IntegerНаходим в цикле максимальный и минимальный элементы и возвращаем их разность. Если все значения одинаковые, то возвращается 0.
Dim i As Integer 'счетчик цикла
Dim max As Integer 'максимальное значение выпуска
Dim min As Integer 'минимальное значение выпуска
'определяем максимум - 1 элемент массива
max = Prod(0)
'определяем минимум - 1 элемент массива
min = Prod(0)
For i = 1 To arg - 2
'если элемент массива больше максимума
If Prod(i) > max Then
max = Prod(i) 'новое значение максимума
End If
'если элемент массива меньше минимума
If Prod(i) < min Then
min = Prod(i) 'новое значение минимума
End If
Next i
'возвращаем результат - строку с двумя цифрами
MaxMin1 = max - min
End Function
Вариант 8
Нужно получить количество максимальных значений в массиве (предполагается, что их несколько). В запросе выводится число месяцев с наибольшим выпуском.Public Function MaxV3(ByVal arg As Integer, ParamArray Prod()) As ByteНазначаем первый элемент массива максимумом, а затем в цикле сравниваем остальные элементы с ним. Если какой-то элемент больше текущего максимума, то назначаем новый максимум и снова начинаем счет максимальных элементов. Подсчитанное количество функция возвращает.
Dim i As Integer 'счетчик цикла
Dim max As Integer 'максимальное значение выпуска
Dim cntMax As Byte 'количество максимальных элементов
'определяем максимум - 1 элемент массива
max = Prod(0)
cntMax = 1
For i = 1 To arg - 2
'если элемент массива больше максимума
If Prod(i) > max Then
max = Prod(i) 'новое значение максимума
cntMax = 1 'начинаем новый отсчет максимальных элементов
'если элемент массива равен максимуму
ElseIf Prod(i) = max Then
cntMax = cntMax + 1 'дополняем строку еще одним значением
End If
Next i
'функция возвращает количество максимальных элементов
MaxV3 = cntMax
End Function
Если все значения равны, то возвращается число месяцев (то есть число всех элементов массива). Если такой результат не устраивает, то можно в конце функции сделать проверку на равенство найденного числа числу элементов массива:
If cntMax = arg - 1 ThenВ этом случае вернется 0.
cntMax = 0
End If
Вариант 9
Определить номера максимальных значений и вывести в запросе номера месяцев с максимальным выпуском.Public Function MaxV4(ByVal arg As Integer, ParamArray Prod()) As StringСоздаем переменную-максимум, приравниваем ее к первому элементу массива, в строку номеров добавляем число 1.
Dim str As String 'переменная для записи номеров месяцев
Dim i As Integer 'счетчик цикла
Dim max As Integer 'максимальное значение выпуска
'определяем максимум - 1 элемент массива
max = Prod(0)
str = "1 "
For i = 1 To arg - 2
'если элемент массива больше максимума
If Prod(i) > max Then
max = Prod(i) 'новое значение максимума
str = CStr(i + 1) + " " 'заполняем строку снова
'если элемент массива равен максимуму
ElseIf Prod(i) = max Then
str = str + CStr(i + 1) + " " 'дополняем строку еще одним значением
End If
Next i
MaxV4 = RTrim(str) 'убираем из строки последний пробел и возвращаем результат
End Function
Затем в цикле перебираем элементы массива и сравниваем их с максимумом. Если элемент больше текущего максимума, значит, получаем новый максимум и начинаем заполнять строку снова – этим номером элемента (плюс 1, так как нумерация идет с 0).
Если все элементы равны, то функция вернет все номера месяцев. Если нужен другой результат, то следует добавить проверку равенства всех элементов или добавить счетчик максимальных номеров, а потом сравнить этот счетчик с количеством элементов массива.
Еще по этому заданию:
Пользовательские функции в Access - общее описание
Пользовательские функции в Access - варианты 1- 4
Общий список всех сообщений по этой работе
