Excel VBA: Получить вектор из нулей и единиц по правилу

Автор Сергей33, 17 апреля 2016, 16:50

Сергей33

Всем привет!

Пожалуйста, помогите решить задание. Сам в этом не разбираюсь.

Дана матрица вещественных чисел. Получить вектор из нулей и единиц по правилу: элемент равен 1, если соответствующая строка образует возрастающую последовательность, элемент равен 0 в противном случае.

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

Код берёт данные из активного листа из диапазона "A1:C5".
Результат выводится на активный лист в диапазон "E1:E5".

Код
Sub Procedure_1()

    '1. Создаём в оперативной памяти компьютера поименованную область -
        'матрицу "myMatrix".
        'Матрица - это двумерный массив. Двумерный массив мысленно можно
            'представить как обычную таблицу, состоящую из строк и столбцов.
        'Создам матрицу, в которой будет 5 строк и 3 столбца.
        '"1 To" используется, чтобы порядковый номер первой строки
        'и столбца был один. По умолчанию ноль, что очень
            'неудобно при написании кода.
        '"Double" означает, что в матрице могут быть только
            'числа (есть ещё, например, текст). Причём числа
            'могут быть как целые, так и дробные.
            'Вещественные числа - это целые и дробные числа.
    Dim myMatrix(1 To 5, 1 To 3) As Double
   
   
    '2. Создаём в оперативной памяти компьютера поименованную область -
        'вектор "myVector".
        'Вектор - это одномерный массив. Одномерный массив
        'мысленно можно представить, как таблицу, состоящую
            'из одной строки.
    '"Long" означает, что в переменной могут быть только целые числа
        '(есть ещё дробные числа).
    Dim myVector(1 To 5) As Long
   
   
    '3. Создаём в оперативной памяти компьютера различные
        'поименованные области - переменные. Переменные
        'понадобятся для работы кода.
    Dim i As Long, j As Long

   
    '4. Берём в матрицу "myMatrix" данные с активного листа,
        'из диапазона "A1:C5". Данные нужно взять, чтобы
        'в матрице что-нибудь было, чтобы было с чем работать.
       
    'For ... To ... Step ... Next - это цикл. Циклы используются,
        'чтобы делать одну и ту же команду несколько раз.
    For i = 1 To 5 Step 1
        For j = 1 To 3 Step 1
            '4.1. Помещаем данные из Excel-ячейки в элемент матрицы.
            myMatrix(i, j) = Cells(i, j).Value
        Next j
    Next i
   
   
    '5. Получить вектор из нулей и единиц по правилу: элемент равен 1,
        'если соответствующая строка образует возрастающую последовательность,
        'элемент равен 0 в противном случае.
    'В цикле с переменной "i" двигаемся по строкам матрицы "myMatrix".
    For i = 1 To 5 Step 1
        'В цикле с "j" двигаемся по всем элементам в строке матрицы, кроме первого.
        For j = 2 To 3 Step 1
            'Текущий элемент сравниваем с предыдущим.
            'If ... Then ... End If - используется для выбора действия.
            'Если текущий элемент меньше или равен предыдущему,
            'значит в строке нет возрастающей последовательности.
            If myMatrix(i, j) <= myMatrix(i, j - 1) Then
                '5.1. Помещаем в вектор соответствующее число.
                myVector(i) = 0
                '5.2. Переходим в нужную часть кода, т.к. о строке узнали то, что нужно было,
                    'и нет смысла смотреть остальные элементы в строке.
                GoTo metka
            End If
           
        Next j
       
        '5.3. Если код дошёл до сюда, значит у нас возрастающая
            'последовательность.
        myVector(i) = 1
           
metka:
       
    Next i
   
   
    '6. Чтобы иметь представление, что у нас получилось,
        'выводим вектор на Excel-лист рядом с матрицей.
    For i = 1 To 5 Step 1
        Cells(i, "E").Value = myVector(i)
    Next i
   
End Sub
[свернуть]