Консультация № 201077
03.06.2021, 21:55
0.00 руб.
0 1 1
Здравствуйте! Прошу помощи в следующем вопросе:
При помощи датчика случайных чисел заполнить целочисленную квадратную матрицу A порядка N (N ввести с клавиатуры). Столбцы матрицы A, имеющие нечетную сумму элементов, отсортировать по убыванию элементов. Вывести сумму элементов столбцов, а также матрицу A до и после сортировки. Все элементы отсортированных столбцов выделить цветом.(Решить на языке VBA)
Заранее огромное спасибо!!!

Обсуждение

давно
Модератор
137394
1850
04.06.2021, 15:35
общий
это ответ

Код:
Sub MatrixNN()

Const R1 = "A1" ' Адрес ячейки с первым элементом массива чисел
Const upperbound = 9000 'Пределы изменения элементов массива
Const lowerbound = -9000

N = InputBox("Введите целое N>0")

ierr = False
If IsNumeric(N) Then
CN = CDbl(N)
ierr = CDbl(CN) > 0 And Int(CN) = CN
End If

If Not ierr Then
MsgBox "Введено неверное число" + vbCrLf + N
Exit Sub
End If

ReDim Mass(1 To N, 1 To N)

Randomize
For i = 1 To N
For j = 1 To N
Mass(i, j) = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
Next
Next

With Rows("1:100000")
.ClearContents
.Interior.Pattern = xlNone
End With

R1N = Range(R1).Offset(N - 1, N - 1).Address
Range(R1 + ":" + R1N) = Mass

R2 = Range(R1).Offset(N + 3, 0).Address
R2N = Range(R2).Offset(N - 1, N - 1).Address

For k = 1 To N
sCol = 0
For i = 1 To N
sCol = sCol + Mass(i, k)
Next

Range(R1).Offset(N + 1, k - 1) = sCol

If sCol Mod 2 <> 0 Then
Range(R1).Offset(N + 1, k - 1).Interior.Color = 65535

RR = Range(R2).Offset(0, k - 1).Address
RRN = Range(RR).Offset(N - 1, 0).Address
Range(RR + ":" + RRN).Interior.Color = 65535

For i = 1 To N
m1 = Mass(i, k)
For j = i To N
If Mass(j, k) > Mass(i, k) Then
Mass(i, k) = Mass(j, k)
Mass(j, k) = m1
m1 = Mass(i, k)
End If
Next
Next
End If
Next

Range(R2 + ":" + R2N) = Mass
End Sub

ya21060414.xlsm (278.5 кб)
5
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа