2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Матрица и Вектор VBA
Сообщение05.06.2011, 15:25 
Доброго времени суток, помогите решить задачку, т.к не могу её осилить.

Построить вектор L, каждый элемент которого равен минимальному элементу соответствующей строки матрицы М (k, l)

 
 
 
 Re: Матрица и Вектор VBA
Сообщение06.06.2011, 15:09 
$\forall\ k&\in[1;\ rows]:\ L_k\gets M_{k,1},\ \forall\ l&\in[1;\ cols]:\ M_{k,l}<L_k \Rightarrow L_k\gets M_{k,l}$

Неужели это сложнее чем каптча при входе?..

 
 
 
 Re: Матрица и Вектор VBA
Сообщение07.06.2011, 16:57 
ну на словах я тоже могу, а в код запихнуть не могу.

 
 
 
 Re: Матрица и Вектор VBA
Сообщение07.06.2011, 22:17 
Используется синтаксис Visual Basic
Sub vect3()
    Cells.Clear
    k = InputBox("кол-во строк k")
    m = InputBox("кол-во столбцов l")
    ReDim mas(1 To k, 1 To m) As Integer
    ReDim L(1 To k) As Integer
    Randomize
    For i = 1 To k
        For j = 1 To m
            mas(i, j) = 10 * Rnd - 5
          Next j
    Next i


а дальше скажите как?

-- Вт июн 07, 2011 22:23:26 --

Circiter
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Sub vect3()
    Cells.Clear
    k = InputBox("êîë-âî ñòðîê k")
    m = InputBox("êîë-âî ñòîëáö m")
    ReDim mas(1 To k, 1 To m) As Integer
    ReDim L(1 To k) As Integer
    Randomize
    For i = 1 To k
        For j = 1 To m
            mas(i, j) = 10 * Rnd - 5
          Next j
    Next i
    For i = 1 To k
        For j = 1 To m
           Cells(i, j) = mas(i, j)
        Next j
    Next i
    For i = 1 To k
        ss = 0
        For j = 1 To m
           If mas(i, j) < mas(i + 1, j + 1) Then L(i) = mas(i, j)
        Next j
        L(i) = mas(i, j)
        Cells(i, m + 1) = "="
        Cells(i, m + 2) = L(i)
    Next i
End Sub


вот я доработал, только тут что-то не сходится..

 
 
 
 Re: Матрица и Вектор VBA
Сообщение08.06.2011, 10:55 
То, что написал Circiter, понятно:
  • В качестве минимального значения берём первый элемент строки.
  • Сравниваем поочерёдно элементы строки с минимальным значением. Если текущий элемент меньше, обновляем минимальное значение.

caesarus в сообщении #455278 писал(а):
ну на словах я тоже могу, а в код запихнуть не могу.
А теперь Вы распишите словами, то, что "запихнули в код".

 
 
 
 Re: Матрица и Вектор VBA
Сообщение09.06.2011, 14:53 
хмм...ладно, не буду пороть чепуху, у меня появился новый код, программа относительно правильно работает, но выдает не всегда правильные результаты, посмотрите и поправте пжлст.
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Sub vector3()
Dim Матрица() As Integer, Вектор() As Integer
Dim m As Integer, n As Integer
Dim i As Integer, j As Integer
Dim Min As Integer
Randomize
Cells.Clear
m = InputBox("кол-во строк")
n = InputBox("кол-во столбц")
ReDim Мтарица(1 To m, 1 To n)
For i = 1 To m Step 1
    For j = 1 To n Step 1
        Матрица(i, j) = Int((5 - (-5) + 1) * Rnd + (-5))
        Cells(i, j).Value = Матрица(i, j)
    Next j
Next i
For i = 1 To m
    Min = Матрица(i, 1)
    For j = i + 1 To n
        If Матрица(i, j) < Min Then
            Min = Матрица(i, j)
        End If
    Next j
    ReDim Preserve Вектор(1 To i)
    Вектор(i) = Min
Next i
For i = 1 To n Step 1
    Cells(m + 2, i).Value = Вектор(i)
Next i
End Sub

 
 
 
 Re: Матрица и Вектор VBA
Сообщение09.06.2011, 16:00 
Используется синтаксис Visual Basic
    ...
'   For j = i + 1 To n    ' ???
   For j=2 to n            ' Просматриваем элементы текущей (i-той) строки!!!
   ...
        ReDim Preserve Вектор(1 To i)  ' Зачем? Кол-во строк (m) заранее известно.
   ...
 

 
 
 
 Re: Матрица и Вектор VBA
Сообщение09.06.2011, 16:11 
lim0n
если уберу Redim preserve выйдет Subscript out of range.

 
 
 
 Re: Матрица и Вектор VBA
Сообщение10.06.2011, 09:04 
Но ведь было же в предыдущем варианте:
Используется синтаксис Visual Basic
    k = InputBox("кол-во строк k")
    m = InputBox("кол-во столбцов l")
    ReDim mas(1 To k, 1 To m) As Integer
    ReDim L(1 To k) As Integer

И зачем использовать массивы в этой задаче, не проще ли работать непосредственно со значениями ячеек листа?

 
 
 
 Re: Матрица и Вектор VBA
Сообщение10.06.2011, 17:04 
lim0n
ну, задание такое, использовать массивы)
А первую вашу фразу, я что-то не понял. Можете по-яснее выразится?

 
 
 
 Re: Матрица и Вектор VBA
Сообщение11.06.2011, 08:16 
caesarus в сообщении #456537 писал(а):
А первую вашу фразу, я что-то не понял. Можете по-яснее выразится?
Это к разговору об операторе ReDim Preserve. Размерности исходного массива M и результирующего вектора L известны в начале выполнения программы и в первом варианте Вы это используете. А во втором варианте?..

 
 
 
 Re: Матрица и Вектор VBA
Сообщение05.07.2011, 15:46 
Эх проблема начинающих программистов :-)
Ну если нет опыта переваривания огромных кусков, то старайтесь разбить на логически законченные части программу.
Проблема начинающих в том что они новый функционал пытаются влепить в старый, в итоге получаем нагромождение циклов, проверок... очень сложный код.
Сделайте отдельные процедуры:
1. Инициализацию матрицы вынесем в отдельную процедуру, чтобы не мельтешил мелкий код.
2. Процедура поиска минимального значения в массиве и возврата оного.
3. Процедура использующая 2 для прогона всех строк матрицы и возврата вектора.

Поверьте осмыслить по частям задачу гораздо проще и проверять тоже :wink:

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group