Страница: 1 | 2 |
|
Вопрос: Прошу помощи с разрешающим массивом.
|
Добавлено: 24.05.08 20:44
|
|
Автор вопроса: Blood
|
Доброго времени суток, уважаемые профи бейсика. Обращяюсь я к вам за советом, с просьбой найти проблему, из за которой мой код работает неверно. Передо мной стоит такая задача : Я создал и заполнил двухмерный массив чисел. Теперь от меня требуется найти номер столбца с максимальным произведением элементов среди стобцов заданной матрицы, содержащих только такие элементы, которые строко больше соответствующих элементов первого столбца. Тоесть вот пример :
7 8 6
4 5 1
1 2 3
Годится лишь второй столбец, так как 8 больше 7, 5 больше 4х, а 2 больше 1. Ну это понятно.
Я решил сделать цикл проверки с второго столбца, чтобы он проверял на наличие таких элементов, и если этот столбец подходит, то в разрешающий массив ( одномерный массив, заполненный нулями изначально, в котором элементов столько же сколько и столбцов) заносится 1 на место того нуля, который совпадает с номером строки ( тоесть вместо второго нуля будет 1).
Потом программа будет выполнять условия лишь для тех столбцов, для которых разрешающий массив равен 1. Однако программа работает совершенно не так. Вот готовый фрагмент кода, можете сказать мне - где я ошибся ?
Private Sub Command1_Click()
Dim n, m As Byte, i, j As Integer, Mas() As Integer, MasJ() As Integer
'------Создание основного массива и заполнение его
n = CByte(InputBox("Введите количество строк"))
m = CByte(InputBox("Введите количество столбцов"))
ReDim Mas(1 To n, 1 To m)
For i = 1 To n
For j = 1 To m
Mas(i, j) = InputBox("Vvedite elemnt " & i & " stroki, " & j & " stolbtsa.")
Debug.Print Mas(i, j);
Temp = Temp + " " + Str(Mas(i, j))
Next j
L1.Caption = L1.Caption + Temp + Chr(10)
Temp = ""
Debug.Print " "
Next i
'Call MinMax(Mas(), n, m)
'----------Создание разрешающего массива и заполнение его нулями.
ReDim MasJ(1 To m)
For j = 1 To m
MasJ(j) = 0
Debug.Print MasJ(j);
Next j
Debug.Print " "
'------Прочёсывание столбцов на наличие всех элементов столбца больше соответствующих элементов первого столбца
For j = 2 To m
For i = 1 To n
If Mas(i, 1) < Mas(i, j) Then
'kok = kok + 1
Debug.Print Mas(i, j)
End If
Next i
'If kok = m Then
MasJ(j) = 2
Debug.Print MasJ(j)
'End If
Next j
'For i = 1 To m
'If MasR(i) = 1 Then
'For j = 1 To n
End Sub
Сам нулевой массив то он создаёт, а вот идёт цикл по проверке, он в деббаге просто пишет 1 ( у меня там ещё после вывода массива отдельно выводится каждый найденный подходящий столбец, чтобы я видел что прога работает.)
Ответить
|
Номер ответа: 1 Автор ответа: Blood
Вопросов: 2 Ответов: 12
|
Профиль | | #1
|
Добавлено: 24.05.08 20:46
|
Кстати тут я случайно добавляю вместо 1 двойку, но это по идее не должно играть существенной роли.
Ответить
|
Номер ответа: 4 Автор ответа: Blood
Вопросов: 2 Ответов: 12
|
Профиль | | #4
|
Добавлено: 24.05.08 21:08
|
Что значит не указан явно, я думал что VBA если указывать несколько переменных одним типом может понять, что я хочу все эти переменные сделать к примеру байтом или интегером ?
Ответить
|
Номер ответа: 7 Автор ответа: Holsten
Вопросов: 5 Ответов: 100
|
Профиль | | #7
|
Добавлено: 24.05.08 21:22
|
Кстати тут я случайно добавляю вместо 1 двойку, но это по идее не должно играть существенной роли.
MasJ(j) = 2 ' присвоение
Debug.Print MasJ(j) ' какое значение кроме двойки ожидаешь увидить?
Ответить
|
Номер ответа: 8 Автор ответа: Blood
Вопросов: 2 Ответов: 12
|
Профиль | | #8
|
Добавлено: 24.05.08 21:22
|
Smith, не знаю, почему ты так думаешь но нас в универе учили что так можно да и так вполне работает, я проверял.
Ответить
|
Номер ответа: 9 Автор ответа: Blood
Вопросов: 2 Ответов: 12
|
Профиль | | #9
|
Добавлено: 24.05.08 21:30
|
Ну а как тогда мне заменить именно один 0 на 2йку и потом увидеть весь разрешающий массив целиком ?
Ответить
|
Номер ответа: 12 Автор ответа: Blood
Вопросов: 2 Ответов: 12
|
Профиль | | #12
|
Добавлено: 24.05.08 21:41
|
Да, он видит их именно как Байт или Интегер. Жаль только что видимо никто не может помочь мне именно с вопросом - решение такое удобное, а реализовать его до конца не смог.
Ответить
|
Номер ответа: 13 Автор ответа: Holsten
Вопросов: 5 Ответов: 100
|
Профиль | | #13
|
Добавлено: 24.05.08 21:52
|
У тебя закомментирована необъявленная переменная 'kok', которая должна по идее дожна обнулятся после
For j = 2 To m
kok = 0
...
Ответить
|
Номер ответа: 14 Автор ответа: Blood
Вопросов: 2 Ответов: 12
|
Профиль | | #14
|
Добавлено: 24.05.08 22:04
|
Я не вполне понимал зачем я её поставил, потом решил убрать. Но сейчас попробую.
Ответить
|
Номер ответа: 15 Автор ответа: Holsten
Вопросов: 5 Ответов: 100
|
Профиль | | #15
|
Добавлено: 24.05.08 22:09
|
Что то вроде этого:
For j = 2 To m
kok = 0
For i = 1 To n
If Mas(i, 1) < Mas(i, j) Then
kok = kok + 1
Debug.Print Mas(i, j)
End If
Next i
If kok = m Then
MasJ(j) = 1
Debug.Print j
End If
Next j
Ответить
|
Страница: 1 | 2 |
Поиск по форуму