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;
}