Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C, VB.NET: Matriisi GetMinor aliohjelmalle apua

peki [05.05.2004 18:08:04]

#

Olen tässä kirjoittamassa koodivinkkiä putkaan. Aiheena on matriisi kirjasto. Se perustuu kirjoittamaani oppaaseen.
Häpeäkseni täytyy myöntää, että jouduin tässä vinkissä käyttämään erääseen algoritmiin ulkopuolista c++ koodia.
Olen yrittänyt tämän koodin parhaani mukaan kääntää vb.NET:lle
Tämän sain siis aikaan:

    'palauttaa alemman matriisin pisteen row ja col ympäriltä. Anteeksi sekavaa golto rakennetta.
    Public Function GetMinor(ByVal RowSpot As Integer, ByVal ColSpot As Integer) As Matrix
        Dim i, j, l, k As Integer
        Dim temp As Matrix
        temp = New Matrix(0.0, m_nRows - 1, m_nCols - 1)

        Do While i < m_nRows
jatko:
            If (i = RowSpot) Then
                i += 1
                GoTo jatko
            End If
            j = 0
            l = 0
alku2:
            Do While j < m_nCols
                If (j = ColSpot) Then
                    j += 1
                    GoTo alku2
                End If
                temp.m_Data(k, l) = m_Data(i, j)
                l += 1
                j += 1
            Loop
            i += 1
            k += 1
        Loop
        Return temp
    End Function

Tässä on kuitenkin jokin vika, sillä se ei toimi alkuperäisen c++ koodin lailla.
Tässä c++ koodi

//returns minor around spot Row,Col
//returns a static Matrix object
Matrix& Matrix::GetMinor(const int RowSpot, const int ColSpot) const
{
	static Matrix temp;
	temp = Matrix(0.0, m_nRows-1, m_nCols-1);

	for(int i=0, k=0; i<m_nRows; ) {
		if(i == RowSpot) {
			++i;
			continue;
		}
		for(int j=0, l=0; j<m_nCols; ) {
			if(j == ColSpot) {
				++j;
				continue;
			}
			temp.m_pData[k][l] = m_pData[i][j];
			++l;
			++j;
		}
		++i;
		++k;
	}

	return temp;
}

Toivottavasti joku osaa auttaa.

peki [05.05.2004 18:19:21]

#

' laskee matriisin determinantin
    Public Function Determinant() As Double
        If m_nRows <> m_nCols Then
            MsgBox("Ei voi ottaa determinaattia muusta, kuin neliömatriisista")
            Return Nothing
        End If

        Dim sum As Double = 0

        If m_nRows = 1 Then
            Return ((m_Data(0, 0) * m_Data(1, 1)) - (m_Data(1, 0) * m_Data(0, 1)))
        End If

        Dim q As Integer
        For q = 0 To m_nCols
            Dim NewMinor As Matrix = GetMinor(0, q)
            sum += (Math.Pow(-1, q) * (m_Data(0, q) * NewMinor.Determinant()))
            NewMinor = Nothing
        Next
        Return sum
    End Function

tässä on muuten koodi myös determinantille(GetMinor:ia käytetään siis tämän kanssa)

Edit: Äsh. Olisi voinut muokata. Sori

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta