VBA: Минимальный и сумма между положительными в одномерном массиве

Автор Женя, 02 ноября 2016, 18:15

Женя

Здравствуйте, помогите, пожалуйста, написать вторую часть для данной задачи.
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1)   минимальный элемент
2)   сумму элементов массива, расположенных между первым и последним положительными элементами.

Sub Massive()
Dim A() As Integer, n As Integer
Dim imin As Integer, I As Integer, k As Integer
Worksheets("Лист1").Range("A2:H30").Clear
n = InputBox("Введите количество элементов")
ReDim A(1 To n)
Randomize
For I = 1 To n
A(I) = Int((50 - (-50) - 1 + 1) * Rnd + (-50))
Worksheets("Лист1").Cells(I + 1, 1) = A(I)
Next
imin = 1
For I = 1 To n
If A(I) < A(imin) Then imin = I
Next
Worksheets("Лист1").Cells(3, 2) = A(imin)
Worksheets("Лист1").Cells(2, 2) = "Минимальное значение"
Worksheets("Лист1").Cells(1, 1) = "Исходный массив"
Worksheets("Лист1").Cells(1, 2) = "Результирующий массив"
End Sub

Администратор

Макрос
Sub Massive()

    Dim A() As Integer, n As Integer
    Dim imin As Integer, i As Integer, k As Integer
    Dim iFirst As Integer, iLast As Integer, dblSum As Double
   
    Worksheets("Лист1").Range("A2:H30").Clear
    n = InputBox("Введите количество элементов")
    ReDim A(1 To n)
    Randomize
    For i = 1 To n
        A(i) = Int((50 - (-50) - 1 + 1) * Rnd + (-50))
        Worksheets("Лист1").Cells(i + 1, 1) = A(i)
    Next
    imin = 1
    For i = 1 To n
        If A(i) < A(imin) Then imin = i
    Next
   
    ' Сумма элементов массива, расположенных между первым и последним положительными элементами.
   
    ' Поиск первого положительного элемента.
    For i = 1 To UBound(A) Step 1
        If A(i) > 0 Then
            iFirst = i
            Exit For
        End If
    Next i
   
    ' Поиск последнего положительного элемента.
    For i = UBound(A) To 1 Step -1
        If A(i) > 0 Then
            iLast = i
            Exit For
        End If
    Next i
   
    ' Проверка, есть ли вообще положительные элементы. Достаточно проверить одну переменную.
    If iFirst = 0 Then
        ' Переход в нужную часть кода.
        GoTo metka
    End If
   
    ' Если первый и последний полож. элемент это один элемент (нужно считать между).
    If iFirst = iLast Then
        GoTo metka
    End If
   
    ' Если первый и последний полож. элементы находятся рядом.
    If iLast - iFirst = 1 Then
        GoTo metka
    End If
   
    ' Подсчёт суммы.
    For i = iFirst + 1 To iLast - 1 Step 1
        dblSum = dblSum + A(i)
    Next i
   
metka:
    Worksheets("Лист1").Cells(3, 2) = A(imin)
    Worksheets("Лист1").Cells(2, 2) = "Минимальное значение"
    Worksheets("Лист1").Cells(1, 1) = "Исходный массив"
    Worksheets("Лист1").Cells(1, 2) = "Результирующий массив"
   
    ' Здесь сделайте результат по сумме между положительными.
    ' Если нет положительных.
    If iFirst = 0 Then
   
    ' Если только одно положительное.
    ElseIf iFirst = iLast Then
   
    ' Если первый и последний полож. элементы находятся рядом.
    ElseIf iLast - iFirst = 1 Then
   
    ' Если есть сумма.
    Else
   
    End If
   
End Sub
[свернуть]


Женя