2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Матрица и Вектор VBA
Сообщение05.06.2011, 15:25 


02/04/11
44
Киев
Доброго времени суток, помогите решить задачку, т.к не могу её осилить.

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

 Профиль  
                  
 
 Re: Матрица и Вектор VBA
Сообщение06.06.2011, 15:09 
Заслуженный участник


26/07/09
1559
Алматы
$\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 


02/04/11
44
Киев
ну на словах я тоже могу, а в код запихнуть не могу.

 Профиль  
                  
 
 Re: Матрица и Вектор VBA
Сообщение07.06.2011, 22:17 


02/04/11
44
Киев
Используется синтаксис 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 


16/06/10
199
То, что написал Circiter, понятно:
  • В качестве минимального значения берём первый элемент строки.
  • Сравниваем поочерёдно элементы строки с минимальным значением. Если текущий элемент меньше, обновляем минимальное значение.

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

 Профиль  
                  
 
 Re: Матрица и Вектор VBA
Сообщение09.06.2011, 14:53 


02/04/11
44
Киев
хмм...ладно, не буду пороть чепуху, у меня появился новый код, программа относительно правильно работает, но выдает не всегда правильные результаты, посмотрите и поправте пжлст.
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 


16/06/10
199
Используется синтаксис 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 


02/04/11
44
Киев
lim0n
если уберу Redim preserve выйдет Subscript out of range.

 Профиль  
                  
 
 Re: Матрица и Вектор VBA
Сообщение10.06.2011, 09:04 


16/06/10
199
Но ведь было же в предыдущем варианте:
Используется синтаксис 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 


02/04/11
44
Киев
lim0n
ну, задание такое, использовать массивы)
А первую вашу фразу, я что-то не понял. Можете по-яснее выразится?

 Профиль  
                  
 
 Re: Матрица и Вектор VBA
Сообщение11.06.2011, 08:16 


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

 Профиль  
                  
 
 Re: Матрица и Вектор VBA
Сообщение05.07.2011, 15:46 


23/11/09
130
Эх проблема начинающих программистов :-)
Ну если нет опыта переваривания огромных кусков, то старайтесь разбить на логически законченные части программу.
Проблема начинающих в том что они новый функционал пытаются влепить в старый, в итоге получаем нагромождение циклов, проверок... очень сложный код.
Сделайте отдельные процедуры:
1. Инициализацию матрицы вынесем в отдельную процедуру, чтобы не мельтешил мелкий код.
2. Процедура поиска минимального значения в массиве и возврата оного.
3. Процедура использующая 2 для прогона всех строк матрицы и возврата вектора.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group