Forum » Programiranje » Matrika- Determinanta
Matrika- Determinanta
pro2c ::
..da uporabnik vnese stevilke v matriko in pol program izracuna?
...naredil sem ti to z VB6, tu imas izvorno kodo: link
...naredil sem ti to z VB6, tu imas izvorno kodo: link
--- www.DrinkProg.com ---
Zgodovina sprememb…
- spremenil: darh ()
alyF ::
Ej, pro2c, mal si falu, pa brez zamere Za matriko 4x4 ne morš uporabit Sarussove metode, ampak samo za 3x3 ali manj. Tako tvoj program računa narobe. Tole je source moje rešitve za vaje pr programiranju, ki zagotovo deluje pravilno sicer ima primitiven vnos in izpis...:
// Program za kvadratno matriko 4x4 z realnimi števili izračuna determinantno
#include
const int vel = 4;
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniDet3
// V: Matrika velikosti 3*3
// I: determinanta matrike 3*3
float VrniDet3(float m[3][3])
{
float det = 0.0; // determinanta
float d[6] = { 1, 1, 1, 1, 1, 1 }; // delni izracuni determinante po Sarussovem pravilu
for(int i = 0; i < 3; i++) // stevec, na podlagi katerega se racunajo indeksi clenov
{
d[0] *= m[i][i]; // indeksi 00, 11, 22
d[1] *= m[i][(i + 1) % 3]; // indeksi 01, 12, 20
d[2] *= m[i][(i + 2) % 3]; // indeksi 02, 10, 21
d[3] *= m[i][2-i]; // indeksi 02, 11, 20
d[4] *= m[i][(4 - i) % 3]; // indeksi 01, 10, 22
d[5] *= m[(i + 1) % 3][2 - i]; // indeksi 12, 21, 00
}
for(int j = 0; j < 6; j++)
{
if(j < 3) det += d[j]; // prvi trije izracuni so v smeri od levo zgoraj, zato imajo predznak +
else det -= d[j]; // drugi trije pa so iz desne zgoraj, zato imajo predznak -
}
return det; // vracanje determinante
}
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniClenRazvoja
// Funkcija izvaja razvoj determinante. Indeks izbere elemnt, nato pa se izracuna za eno stopnjo zmanjsana matrika t, katere determinanto nato funkcija vrne
// V: Matrika velikosti 4x4
// V: indeks po katerem se izvaja razvoj
// I: determinanta zmanjsane matrike 3x3
float VrniClenRazvoja(float m[4][4], int indeks)
{
float t[3][3]; // za eno stopnjo zmanjsana matrika m[4][4]
// zmanjsevanje stopnje matrike
int i1 = 0, j1 = 0; // indeksa elementov v t[3][3], kamor se prekopira ustrezno stevilo iz m[4][4]
for(int i = 0; i < 4; i++) // i pretece vse vrstice
{
if(i != 0) // *** ce se nahajamo v vrstici, ki je nismo "precrtali" (katerikoli, razen prvi), poiscemo vse elemente, ki jih tudi nismo "precrtali"
{
for(int j = 0; j < 4; j++) // j pretece vse vrstice
if(j != indeks) // ce elementa v vrstici nismo "precrtali" ...
{
t[i1][j1] = m[i][j]; // ... se le ta prekopira v zmanjsano matriko t
j1++; // povecujemo stevec elementov v vrstici zmanjsane matrike
}
j1 = 0; // stevec elementov v vrstici zmanjsane matrike postavimo na nic, ker smo zakljucili z eno vrstico
i1++; // povecujemo stevec vrstic zmanjsane matrike
}
}
return VrniDet3(t); // vracanje determinante zmanjsane matrike
}
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniDet4
// V: Matrika velikosti 4x4
// I: determinanta matrike 4x4
float VrniDet4(float m[4][4])
{
float det = 0.0;
for(int indeks = 0; indeks < 4; indeks++) // indeks izbira element a[0][indeks], po karterem razvijamo determinanto
if((indeks % 2 == 0)) det += m[0][indeks] * VrniClenRazvoja(m, indeks);
else det -= m[0][indeks] * VrniClenRazvoja(m, indeks); // pristevanje oz. odstevanje clena determinanti po razvoju
return det; // vracanje determinante celotne matrike 4x4
}
/////////////////////////////////////////////////////////////////////////////////
int main(void)
{
float matrika[vel][vel]; // matrika
int i;
cout << "Vnesite " << vel * vel << " stevil iz kvadratne matrike:" << endl;
for(i = 0; i < vel; i++)
for(int j = 0; j < vel; j++)
{
cout << "a[" << i + 1 << "][" << j + 1 << "]: ";
cin >> matrika[i][j]; // branje matrike
}
cout << "\n\nDeterminanta matrike\n" << endl;
for(i = 0; i < vel; i++)
{
cout << "| ";
for(int j = 0; j < vel; j++)
cout << matrika[i][j] << " ";
cout << "|" << endl; // izpis matrike
}
cout << "\nje " << VrniDet4(matrika) << "." << endl; // izpis determinante matrike
return 0;
}
// Program za kvadratno matriko 4x4 z realnimi števili izračuna determinantno
#include
const int vel = 4;
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniDet3
// V: Matrika velikosti 3*3
// I: determinanta matrike 3*3
float VrniDet3(float m[3][3])
{
float det = 0.0; // determinanta
float d[6] = { 1, 1, 1, 1, 1, 1 }; // delni izracuni determinante po Sarussovem pravilu
for(int i = 0; i < 3; i++) // stevec, na podlagi katerega se racunajo indeksi clenov
{
d[0] *= m[i][i]; // indeksi 00, 11, 22
d[1] *= m[i][(i + 1) % 3]; // indeksi 01, 12, 20
d[2] *= m[i][(i + 2) % 3]; // indeksi 02, 10, 21
d[3] *= m[i][2-i]; // indeksi 02, 11, 20
d[4] *= m[i][(4 - i) % 3]; // indeksi 01, 10, 22
d[5] *= m[(i + 1) % 3][2 - i]; // indeksi 12, 21, 00
}
for(int j = 0; j < 6; j++)
{
if(j < 3) det += d[j]; // prvi trije izracuni so v smeri od levo zgoraj, zato imajo predznak +
else det -= d[j]; // drugi trije pa so iz desne zgoraj, zato imajo predznak -
}
return det; // vracanje determinante
}
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniClenRazvoja
// Funkcija izvaja razvoj determinante. Indeks izbere elemnt, nato pa se izracuna za eno stopnjo zmanjsana matrika t, katere determinanto nato funkcija vrne
// V: Matrika velikosti 4x4
// V: indeks po katerem se izvaja razvoj
// I: determinanta zmanjsane matrike 3x3
float VrniClenRazvoja(float m[4][4], int indeks)
{
float t[3][3]; // za eno stopnjo zmanjsana matrika m[4][4]
// zmanjsevanje stopnje matrike
int i1 = 0, j1 = 0; // indeksa elementov v t[3][3], kamor se prekopira ustrezno stevilo iz m[4][4]
for(int i = 0; i < 4; i++) // i pretece vse vrstice
{
if(i != 0) // *** ce se nahajamo v vrstici, ki je nismo "precrtali" (katerikoli, razen prvi), poiscemo vse elemente, ki jih tudi nismo "precrtali"
{
for(int j = 0; j < 4; j++) // j pretece vse vrstice
if(j != indeks) // ce elementa v vrstici nismo "precrtali" ...
{
t[i1][j1] = m[i][j]; // ... se le ta prekopira v zmanjsano matriko t
j1++; // povecujemo stevec elementov v vrstici zmanjsane matrike
}
j1 = 0; // stevec elementov v vrstici zmanjsane matrike postavimo na nic, ker smo zakljucili z eno vrstico
i1++; // povecujemo stevec vrstic zmanjsane matrike
}
}
return VrniDet3(t); // vracanje determinante zmanjsane matrike
}
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniDet4
// V: Matrika velikosti 4x4
// I: determinanta matrike 4x4
float VrniDet4(float m[4][4])
{
float det = 0.0;
for(int indeks = 0; indeks < 4; indeks++) // indeks izbira element a[0][indeks], po karterem razvijamo determinanto
if((indeks % 2 == 0)) det += m[0][indeks] * VrniClenRazvoja(m, indeks);
else det -= m[0][indeks] * VrniClenRazvoja(m, indeks); // pristevanje oz. odstevanje clena determinanti po razvoju
return det; // vracanje determinante celotne matrike 4x4
}
/////////////////////////////////////////////////////////////////////////////////
int main(void)
{
float matrika[vel][vel]; // matrika
int i;
cout << "Vnesite " << vel * vel << " stevil iz kvadratne matrike:" << endl;
for(i = 0; i < vel; i++)
for(int j = 0; j < vel; j++)
{
cout << "a[" << i + 1 << "][" << j + 1 << "]: ";
cin >> matrika[i][j]; // branje matrike
}
cout << "\n\nDeterminanta matrike\n" << endl;
for(i = 0; i < vel; i++)
{
cout << "| ";
for(int j = 0; j < vel; j++)
cout << matrika[i][j] << " ";
cout << "|" << endl; // izpis matrike
}
cout << "\nje " << VrniDet4(matrika) << "." << endl; // izpis determinante matrike
return 0;
}
Zgodovina sprememb…
- spremenil: alyF ()
pro2c ::
aja..ehh :) tocno..no sej..formule samo spremenis v progu pa bo :)
--- www.DrinkProg.com ---
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Vsota določenih elementov matrike [C]Oddelek: Programiranje | 993 (681) | RatedR |
» | Python - pomoč!Oddelek: Programiranje | 1197 (1033) | lknix |
» | [c#] Vstavljanje vrednosti v tabeloOddelek: Programiranje | 1607 (1429) | Cvenemir |
» | [C++] velikost matrikeOddelek: Programiranje | 1695 (1507) | Jean-Paul |
» | [Naloga][C++] Sestevanje matrikeOddelek: Programiranje | 3197 (3024) | snow |