LW AA 4.7

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Вводим массив а()
Dim a(7) As Double
input(a)
'Выводим введённый массив
outputArray(a, ListBox1)
'Находим и выводим среднее геометрическое положительных элементов
Dim geomMean As Double = geometricMean(a)
output(geomMean, TextBox1)
'Находим и выводим индекс элемента, значение которого ближе всего к ср.геом.
Dim nearIndex As Double = CDbl(near(a, geomMean))
output(nearIndex, TextBox2)
'Сортировка массива по убыванию
sort(a)
'Вывод отсортированного массива
outputArray(a, ListBox2)
End Sub
'Функция нахождения среднего геометрического положительных массивов
Function geometricMean(ByVal a() As Double) As Double
'Счётчик для цикла
Dim i As Integer
'Счетчик положительных чисел
Dim n As Integer = 0
'Среднее геометрическое
Dim gm As Double
'Произведение положительных элементов
Dim ppe As Double = 1
For i = 0 To UBound(a)
If a(i) > 0 Then
'Находим произведение положительных элементов
ppe = ppe * a(i)
'Находим кол-во положительных элементов
n = n + 1
End If
Next
'Находим корень n-ой степени от произведения положит. элем.
gm = ppe ^ (1 / n)
'Возврощаем результат
Return gm
End Function
'Функция для нахождения индекса элемента, значение которого ближе всего к ср. геом.
Function near(ByVal a() As Double, ByVal geomMean As Double) As Integer
'Счётчик для цикла
Dim i As Integer
'Устанавливаем ближайший индекс на 0
Dim nearIndex As Integer = 0
'Находим разницу между ср.геом. и элементом с выбранным выше индексом
Dim diff As Double = Math.Abs(geomMean - a(nearIndex))
For i = 1 To UBound(a)
'Если у i-того элемента массива разница с ср.геом. меньше,
'чем у элемента с выбранным индексом
If diff > Math.Abs(geomMean - a(i)) Then
'Записываем индекс элемента, значение которого ближе к ср.геом.
nearIndex = i
'Находим новую разность между ср.геом. и элементом с nearIndex
diff = Math.Abs(geomMean - a(nearIndex))
End If
Next i
'Возвращаем индекс элемента, у когорого значение ближе всего к ср.геом.
Return nearIndex
End Function
'Процедура сортировки массива по убыванию
Sub sort(ByRef x() As Double)
Dim i, j, m As Integer
Dim xmax As Double
For i = 0 To UBound(x) - 1
xmax = x(i) : m = i
For j = i + 1 To UBound(x)
If x(j) > xmax Then
xmax = x(j)
m = j
End If
Next j
x(m) = x(i)
x(i) = xmax
Next i
End Sub
'Процедура ввода масива
Sub input(ByRef x() As Double)
Dim y, r As String
Dim i As Integer
For i = 0 To UBound(x)
r = Str(i)
y = InputBox("элемент массива X(" + r + ")=", _
"Ввод значений элементов массива X()")
x(i) = CSng(Val(y))
Next i
End Sub
'Процедура вывода массива
Sub outputArray(ByVal x() As Double, ByVal LB As ListBox)
Dim i As Integer
Dim y As String
For i = 0 To UBound(x)
y = Format(x(i), "00.00")
LB.Items.Add(y)
Next i
End Sub
'Процедура вывода в TextBox
Sub output(ByVal a As Double, ByVal TB As TextBox)
TB.Text = Format(a, "00.00")
End Sub
End Class