• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wyznacznik macierzy

0 głosów
193 wizyt
pytanie zadane 20 marca 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)

Cześć siedzę nad kodem już długo i nie potrafię w nim znaleźć błędu kod liczy wyznacznik macierzy 4x4, wszystko gra kiedy w pętli zaraz po obliczeniach dodam "cout", kiedy go wyrzucam wszystkie wyniki idą w łeb. Ktoś wie o co biega?

#include <iostream>
using namespace std;
/*
3	5	3	5	 
1	4	2	1	  
3	3	-3	1	  
-1	-4	1	1
*/
float wyznacznik(float TAB[][3])
{	int i,j,n,k=0,kk=2;
	float sum,wyz=1;
	
	for(n=0;n<3;n++)
	{
			for(wyz=1,i=0,j=k;i<3;i++)
			{	
				wyz=TAB[i][j]*wyz;
				if(j==2)j=0;
				else{j++;}
				
			}k++; 
			sum=sum+wyz;
	}
	for(n=0;n<3;n++)
	{	
			for(wyz=1,i=2,j=kk;i>=0;i--)
			{	
				wyz=TAB[i][j]*wyz;
				if(j==2)j=0;
				else{j++;}
				
			}kk--; 
			sum=sum+(-wyz);
	} 
	return sum;
}

int main()
{	int i,j,wiersz,kolumna,p,k;
	float wynik=0;
	const int n=4,m=4;
	float A[n][m]={{3,5,3,5},{1,4,2,1},{3,3,-3,1},{-1,-4,1,1}};
	float tablica2[3][3];
	
	cout << "wzgledem ktorej kolumny obliczyc wyznacznik?:";
	cin >> kolumna;

	
	for(wiersz=0;wiersz<4;wiersz++)
	{	
	
			
			for(i=0,k=0;i<3;i++,k++)
			{
					for(j=0,p=0;j<3;j++,p++)
					{		
							if(k==wiersz)k++;
							if(p==kolumna-1)p++;
							tablica2[i][j]=A[k][p];
							
					}
			}
			
			
			if((wiersz+1+kolumna)%2==0)
			{
				wynik = wynik + A[wiersz][kolumna-1]*wyznacznik(tablica2);	
			}	
			if((wiersz+1+kolumna)%2!=0)
			{
				wynik = wynik + (-1)*A[wiersz][kolumna-1]*wyznacznik(tablica2);	
			}
			cout << wynik << " " << endl;
		// kiedy wyrzucam tego couta to program zle liczy
	} 
	return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 21 marca 2020 przez obl Maniak (51,120 p.)

A kompilator nie krzyczy ci, że nie zainicjalizowałeś zmiennej sum? U mnie po tym jak ją zainicjalizowałem zerem zadziałało.

#include <iostream>
using namespace std;
/*
3   5   3   5
1   4   2   1
3   3   -3  1
-1  -4  1   1
*/
float wyznacznik(float TAB[][3])
{
    int i, j, n, k = 0, kk = 2;
    float sum = 0, wyz = 1;

    for (n = 0; n < 3; n++)
    {
        for (wyz = 1, i = 0, j = k; i < 3; i++)
        {
            wyz = TAB[i][j] * wyz;
            if (j == 2)j = 0;
            else { j++; }

        }k++;
        sum = sum + wyz;
    }
    for (n = 0; n < 3; n++)
    {
        for (wyz = 1, i = 2, j = kk; i >= 0; i--)
        {
            wyz = TAB[i][j] * wyz;
            if (j == 2)j = 0;
            else { j++; }

        }kk--;
        sum = sum + (-wyz);
    }
    return sum;
}

int main()
{
    int i, j, wiersz, kolumna, p, k;
    float wynik = 0;
    const int n = 4, m = 4;
    float A[n][m] = { {3,5,3,5},{1,4,2,1},{3,3,-3,1},{-1,-4,1,1} };
    float tablica2[3][3];

    cout << "wzgledem ktorej kolumny obliczyc wyznacznik?:";
    cin >> kolumna;


    for (wiersz = 0; wiersz < 4; wiersz++)
    {


        for (i = 0, k = 0; i < 3; i++, k++)
        {
            for (j = 0, p = 0; j < 3; j++, p++)
            {
                if (k == wiersz)k++;
                if (p == kolumna - 1)p++;
                tablica2[i][j] = A[k][p];

            }
        }


        if ((wiersz + 1 + kolumna) % 2 == 0)
        {
            wynik = wynik + A[wiersz][kolumna - 1] * wyznacznik(tablica2);
        }
        if ((wiersz + 1 + kolumna) % 2 != 0)
        {
            wynik = wynik + (-1) * A[wiersz][kolumna - 1] * wyznacznik(tablica2);
        }
        cout << wynik << " " << endl;
        // kiedy wyrzucam tego couta to program zle liczy
    }
    return 0;
}

 

komentarz 21 marca 2020 przez dominik195k Obywatel (1,030 p.)
męczyłem się kilka godzin z tym i nie zauważylem tego , _ , wlasnie nic nie krzyczal ale juz dziala dzieki wielkie

Podobne pytania

0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 22 listopada 2015 w C i C++ przez arglo Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 1,981 wizyt
pytanie zadane 9 października 2015 w C i C++ przez Mateep Użytkownik (850 p.)
0 głosów
1 odpowiedź 75 wizyt
pytanie zadane 20 września 2021 w JavaScript przez qax Mądrala (7,300 p.)

86,483 zapytań

135,239 odpowiedzi

300,477 komentarzy

57,229 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...