vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

mnożenie macierzy


otwartyotwarty rozpoczął: abuk postów: 7



napisał: abuk
postów: 20


umieszczony:
6 stycznia 2006
01:08

  
wielkie dzieki pil... rozjasnilo mi to pare watkow i bardzo pomoglo... raz jeszcze thx...
napisał: pil
postów: 154


umieszczony:
27 grudnia 2005
07:23

  
W dziale makra/Excel zamieściłem to makro. Wszystkich zainteresowanych zachęcam do ściągnięcia.
napisał: pil
postów: 154


umieszczony:
22 grudnia 2005
09:04

  
Oj, coś nie mam szczęścia. Pętle For... Next powinny wygląć tak:
.
.
.
 For i = 1 To mA
        For j = 1 To nB
            tempWynik = "= 0"
            For k = 1 To mB
                tempWynik = tempWynik & "+" & macierzA.Cells(i, k).Address() _
                & "*" & macierzB.Cells(k, j).Address()
            Next k
            Cells(wierszStart + i, kolumnaStart + j).Value = tempWynik
        Next j
    Next i
.
.
.


Przepraszam wszystkich za zamieszanie.
napisał: pil
postów: 154


umieszczony:
22 grudnia 2005
08:42

  
albo tak :

Option Explicit

Sub MnozenieMacierzy()
Dim strA, strB, strC As String
Dim macierzA As Range, macierzB As Range
Dim mA, nA, mB, nB As Integer
Dim tempWynik As String
Dim wierszStart, kolumnaStart As Integer
Dim i, j, k, l As Integer

'pobranie od uzytkownika zakresow z macierzami

strA = Application.InputBox("Wskaż zakres macierzy A :", "mnozenie macierzy", , , , , , 8).Address()
strB = Application.InputBox("Wskaż zakres macierzy B :", "mnozenie macierzy", , , , , , 8).Address()

Set macierzA = Range(strA)
Set macierzB = Range(strB)

'wymiary macierzy
mA = macierzA.Rows.Count: nA = macierzA.Columns.Count
mB = macierzB.Rows.Count: nB = macierzB.Columns.Count

'sprawdzenie czy jest tyle samo kolumn w A co wierszy w B
If (nA = mB) Then
'pozcyja wstawienia wyniku :
      strC = Application.InputBox("Wskaż komórkę pocz. wyniku :", "mnozenie macierzy", , , , , , 8).Address()
      wierszStart = Range(strC).Row - 1: kolumnaStart = Range(strC).Column - 1
'-1 się bierze z późniejszej iteracji od 1

      For i = 1 To mA
          For j = 1 To mB 'tutaj poprzednio był błąd ;)
              tempWynik = "= 0"
              For k = 1 To (nB-1)' tutaj poprzednio był błąd
                  tempWynik = tempWynik & "+" & macierzA.Cells(i, k).Address() _
                  & "*" & macierzB.Cells(k, j).Address()
              Next k
                  MsgBox tempWynik
              Cells(wierszStart + i, kolumnaStart + j).Value = tempWynik
          Next j
      Next i
Else
      MsgBox "Niepoprawne zakresy"
End If


Set macierzA = Nothing
Set macierzB = Nothing

End Sub




Wtedy wynik iloczynu będzie aktualizowany przy zmianie w macierzach A i B.
napisał: pil
postów: 154


umieszczony:
22 grudnia 2005
06:57

  
Witam. Ja zaproponuję coś takiego :
Option Explicit

Sub MnozenieMacierzy()

Dim strA, strB, strC As String
Dim macierzA As Range, macierzB As Range
Dim mA, nA, mB, nB As Integer
Dim tempWynik As Double
Dim wierszStart, kolumnaStart As Integer
Dim i, j, k As Integer

'pobranie od uzytkownika zakresow z def. macierzy

strA = Application.InputBox("Wskaż zakres macierzy A :", "mnozenie macierzy", , , , , , 8).Address()
strB = Application.InputBox("Wskaż zakres macierzy B :", "mnozenie macierzy", , , , , , 8).Address()

Set macierzA = Range(strA)
Set macierzB = Range(strB)

'wymiary macierzy
mA = macierzA.Rows.Count: nA = macierzA.Columns.Count
mB = macierzB.Rows.Count: nB = macierzB.Columns.Count

'sprawdzenie czy jest tyle samo kolumn w A co wierszy w B
If (nA = mB) Then
'pozcyja wstawienia wyniku :
    strC = Application.InputBox("Wskaż komórkę pocz. wyniku :", "mnozenie macierzy", , , , , , 8).Address()
    wierszStart = Range(strC).Row - 1
    kolumnaStart = Range(strC).Column - 1

    For i = 1 To mA
        For j = 1 To nB
            tempWynik = 0
            For k = 1 To nB
                tempWynik = tempWynik + macierzA.Cells(i, k) * macierzB.Cells(k, j)
            Next k
            Cells(wierszStart + i, kolumnaStart + j).Value = tempWynik
        Next j
    Next i
Else
    MsgBox "Niepoprawne zakresy"
End If

Set macierzA = Nothing
Set macierzB = Nothing

End Sub

napisał: Trebor
postów: 1209


umieszczony:
19 grudnia 2005
21:16

  
Witaj!!
Pewnie nie o to chodzi, ale nikt nie odpisuje to spróbuje wtrącić swoje wypociny (pewnie sobie poczytam zasłużoną krytykę ;)
a = Application.InputBox("Wskaż zakres macierzy", , , , , , , 8).Address()
b = Application.InputBox("Wskaż gdzie utworzyć nową macierz", , , , , , , 8).Address()
c = InputBox("Przez ile pomnożyć?")
Range(b).Select
ActiveCell.CurrentRegion.ClearContents
Range(a).Copy Range(b)

For Each komórka In ActiveCell.CurrentRegion
Range(komórka.Address()) = komórka * c
Next



Wskazana komórka nie może przylegać do macierzy.
Pozdrawiam
napisał: abuk
postów: 20


umieszczony:
19 grudnia 2005
16:48

  
witam serdecznie...
musze napisac makro, ktore bedzie mnozylo macierze (mxn)... uzytkownik ma wprowadzic wartosci do komorek odpalic makro i zaznaczyc zakresy macierzy... kliknac na komorke bedaca lewym gornym rogiem macierzy, ktora powstanie w wyniku mnozenia...
moze ktos z Was robil cos podobnego i moze cos doradzic (jak sie do tego zabrac) badz wkleic przykladowy kod...
z gory dzieki za jakiekolwiek odpowiedzi...
pozdrawiam...


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z