Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2012, 18:22   #1
sabrishat
 
Регистрация: 07.04.2012
Сообщений: 6
Восклицание Удаление строки столбца в массива vba excel

Добрый день!
Задача такова:
Дана квадратная матрица вещественных чисел. Найти наибольший по модулю элемент, получить квадратную матрицу из исходной, путем выбрасывания строки и столбца, на пересечении которых находится распооженный элемент с найденным значением.
Элемент сам нашел, и вроде бы написал алгоритм для новой матрицы, но что-то не работает, проверьте, помогите пожалуйста
Код HTML:
Sub maximum()
Dim i As Single
Dim j As Single
Dim x As Single
Dim y As Single
Dim n As Single
Dim m As Single
Dim max As Integer
Dim A() As Variant
Dim B() As Variant
Sheets("Лист1").Activate
Range("A1").CurrentRegion.Select
n = Selection.Rows.Count
m = Selection.Columns.Count
ReDim A(n, m)
For i = 1 To n
For j = 1 To m
A(i, j) = Range("A1").Cells(i, j)
Next j
Next i
max = A(1, 1): k1 = 1: l1 = 1
For i = 1 To n
For j = 1 To m
If Abs(A(i, j)) > max Then max = Abs(A(i, j))
k1 = i
l1 = j
Next j
Next i
MsgBox ("max=") & max
Sheets("Лист1").Activate
Range("A1").CurrentRegion.Select
n = Selection.Rows.Count
m = Selection.Columns.Count
ReDim B(n - 1, m - 1)
For x = 1 To n - 1
For y = 1 To m - 1
Next y
Next x
If k1 <> i And l1 <> j Then
B(x, y) = A(i, j)
x = x + 1
y = y + 1
End If
For x = 1 To n - 1
For y = 1 To m - 1
B(x, y) = Range("A1").Cells(x, y)
Next y
Next x
End Sub
sabrishat вне форума Ответить с цитированием
Старый 13.04.2012, 20:25   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Код:
ReDim B(n - 1, m - 1)
For x = 1 To n - 1
For y = 1 To m - 1
Next y
Next x
А что тут имелось ввиду?
Думаю, что алгоритм должен быть простым:
1. Нашли i и j максимального элемента (столбец, строка)
2. (Если нужен новый массив) Переписываем все столбцы
до i как есть, затем начинаем цикл с i+1 и переписываем оставшиеся столбцы со с сдвигом вправо. Я бы, при этом, использовал дополнительную переменную, которая указывала бы на номер переносимого столбца (до i эта переменная совпадает с параметром цикла, а затем принимает значение на 1 больше).
3. Аналогично, но со сдвигом вверх переписываем строки.

Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.04.2012, 20:29   #3
sabrishat
 
Регистрация: 07.04.2012
Сообщений: 6
По умолчанию

ну я подразумевал новую матрицу на порядок ниже
а не могли бы вы написать данный код, пожалуйста, потому что не совсем понимаю как это осуществить.
sabrishat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление определенных строки и столбца из матрицы X-QuadrO Паскаль, Turbo Pascal, PascalABC.NET 1 19.05.2011 18:17
обмен столбца и строки двумерного массива Shelena Помощь студентам 12 08.11.2010 12:04
Удаление строки и столбца sllh_111 Помощь студентам 1 18.03.2010 15:41
удаление строки и столбца из матрицы Laplas Помощь студентам 3 08.01.2010 04:41