В VBA дана матрица.размерности 5 ** 5. Поменять в каждой строке минимальный и...

0 голосов
121 просмотров

В VBA
дана матрица.размерности 5 на 5. Поменять в каждой строке минимальный и максимальный элементы.

ввод с клавиатуры в лист exel
не нужны кнопки и лишние атрибуты,просто код на уровне дет.сада


Информатика (42 баллов) | 121 просмотров
0

Если "на уровне детсада", что же на напишете самостоятельно? Даже на детсад не тянете?

0

И - вопрос по существу. 5х5 - это прочитать в программу 25 ячеек с листа Excel?

0

Ну 5х5 это как пример, в условии она MxN , да , числа прочитать. С листаexcel .сам не написал потому что не могу понять саму идею , если у меня ,допустим, матрица100 на 100, то как мне проверять каждую строчку ?

0

Все же, как определить, где границы данных на листе? Вот 5х5 я могу задать, как диапазон A1:E5

0

Могу сделать так: начиная с A1 выделяем прямоугольную область и запускаем программу, считая, что это и есть наш массив. Либо m и n надо запрашивать и код постепенно перестает быть детским.

Дан 1 ответ
0 голосов
Правильный ответ

Выделите на листе прямоугольную область ячеек с левым верхним углов в A1 и запустите программу, которая в каждой строке выделенной области обменяет местами содержимое ячеек с минимальным и максимальным значениями.

Sub abc()
    a = Selection.Value
    For i = 1 To UBound(a, 1)
        aMin = a(i, 1): aMax = aMin
        jMin = 1: jMax = 1
        For j = 2 To UBound(a, 2)
            If aMin > a(i, j) Then
                aMin = a(i, j): jMin = j
            End If
            If aMax < a(i, j) Then
                aMax = a(i, j): jMax = j
            End If
        Next j
        Cells(i, jMin).Value = aMax
        Cells(i, jMax).Value = aMin
    Next i
End Sub


(142k баллов)
0

я имеюю ввиду вот что:
Sub pfl4()
Dim a(3, 3) As Integer
For i = 1 To 3
For j = 1 To 3
a(i, j) = Cells(i, j)
Next
Next
Max = a(1, 1)
For j = 1 To 3
If a(1, j) >= Max Then
Max = a(1, j)
Cells(10, 10) = Max
End If
If a(2, j) >= Max Then
Max = a(2, j)
Cells(10, 11) = Max
End If
If a(3, j) >= Max Then
Max = a(3, j)
Cells(10, 12) = Max
End If
Next
есть ли способ не перебрать каждый раз вот так вот эти максимумы, а потом ещё и минимумы,?

0

Я уже написал Вам работающий образец, как надо делать такие задачи. Это же VBA, а не Паскаль или С, надо использовать на полную его возможности!

0

А у Вас, извините, "школярский" алгоритм, с Паскаля "срисованый"

0

Почему в мире много языков программирования? Потому, что каждый из них наиболее эффективен в какой-то своей области. VBA максимально эффективен при взаимодействии с Экселем, более эффективна только волшебная палочка.

0

Поэтому если Вы используете алгоритм, ориентированный на Паскаль, то и писать надо в Паскале.