Mam tablice dwuwymiarową wypełnioną w następujący sposób
przyklad[0][0]=2;
przyklad[0][1]=1;
przyklad[1[0]=5;
przyklad[1][1]=3;
po przekształceniu element [0][0] powinien zamienić się miejscami z elementem [1][1]
a element [0][1] z elementem z elementem [1][0] oba powinny zmienić znak na przeciwny
if (n==2 && m==2)
{
int macierzdopelnien[1][1];
macierzdopelnien[0][0]=macierzp[1][1];
macierzdopelnien[0][1]=(-macierzp[1][0]);
macierzdopelnien[1][0]=(-macierzp[0][1]);
macierzdopelnien[1][1]=macierzp[0][0];
cout<<endl<<"Macierz dopelnien naszej macierzy wynosi: "<<endl;
for (int i = 0; i <2; ++i)
{
for (int j = 0; j < 2; ++j)
cout << macierzdopelnien [i][j] << " ";
cout << endl;
}
}
natomiast zamiast wyświetlać się poprawnie wyświetla się w taki sposób
element pomocniczej tablicy [1][0] wyświetla się dwa razy
inny przykład:
Czy ktoś wie jak to naprawić?
cały kod:
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>
using namespace std;
int main()
{
char wybor;
int n, m;
string a;
cout << "Wybierz swoja macierz:" << endl<<"a = macierz 2x2"<<endl<<"b = macierz 3x3"<<endl;
cin >> a;
if((a=="a")||(a=="A"))
{
n=2;
m=2;
}
if((a=="b")||(a=="B"))
{
n=3;
m=3;
}
if((a!="a")&&(a!="A")&&(a!="b")&&(a!="B"))
{
cout<<"Nie mamy w magazynie macierzy o takim rozmiarze.. ;/";
getchar();getchar();
}
int macierzp [n][m];
cout <<"Uzupelnij 1 macierz:" <<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<"Podaj element "<<i+1<<" wiersza i "<<j+1<<" kolumny:"<<endl;
cin >> macierzp[i][j];
}
}
cout<<"Uzupelniona 1 macierz= " <<endl;
// wyswietlenie
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
cout << macierzp [i][j] << " ";
cout << endl;
}
for(;;)
{
cout<<endl;
cout << "MENU GLOWNE" << endl;
cout << "-----------------" << endl;
cout << "1. Policz macierz odwrotna" << endl;
cout << "2. Koniec programu" << endl;
cout << endl;
wybor=getch();
switch(wybor)
{
case '1':
{
int g, l, k;
cout << "Krok1. Aby policzyc macierz odwrotna pierw nalezy policzyc wyznacznik danej macierzy"<<endl;
if (n==2 && m==2) //sprawdza czy macierz wynosi 2x2
{
int k=macierzp[0][0]*macierzp[1][1]; // liczy wyznacznik macierzy 2x2
int l=macierzp[0][1]*macierzp[1][0]; //liczy wyznacznik macierzy 2x2
g=k-l; // liczy wyznacznik macierzy 2x2
cout<<"Wyznacznik podanej macierzy 2x2 wynosi:"<<endl<<g<<endl;
if(g==0)
{
cout<<"Wyznacznik macierzy wynosi 0, co powoduje, ze nie mozna obliczyc macierzy odwrotnej"<<endl;
getchar();
return 0;
}
}
else // w przeciwnym razie liczy wyznacznik dla macierzy 3x3
{
int q, w, e, r, t, y, u, i, o;
q=macierzp[0][0]*macierzp[1][1]*macierzp[2][2]; //liczy wyznacznik macierzy 3x3
w=macierzp[0][1]*macierzp[1][2]*macierzp[2][0]; //liczy wyznacznik macierzy 3x3
e=macierzp[0][2]*macierzp[1][0]*macierzp[2][1]; //liczy wyznacznik macierzy 3x3
r=macierzp[0][2]*macierzp[1][1]*macierzp[2][0]; //liczy wyznacznik macierzy 3x3
t=macierzp[0][0]*macierzp[1][2]*macierzp[2][1]; //liczy wyznacznik macierzy 3x3
y=macierzp[0][1]*macierzp[1][0]*macierzp[2][2]; //liczy wyznacznik macierzy 3x3
u=q+w+e; //liczy wyznacznik macierzy 3x3
i=r+t+y; //liczy wyznacznik macierzy 3x3
o=u-i; //liczy wyznacznik macierzy 3x3
cout<<"Wyznacznik podanej macierzy 3x3 wynosi:"<<endl<<o<<endl;
if(o==0)
{
cout<<"Wyznacznik macierzy wynosi 0, co powoduje, ze nie mozna obliczyc macierzy odwrotnej"<<endl;
getchar();
return 0;
}
}
cout<<endl<<"Krok2. Kolejno trzeba policzyc macierz dopelnien. ";
if (n==2 && m==2)
{
int macierzdopelnien[1][1];
macierzdopelnien[0][0]=macierzp[1][1];
macierzdopelnien[0][1]=(-macierzp[1][0]);
macierzdopelnien[1][0]=(-macierzp[0][1]);
macierzdopelnien[1][1]=macierzp[0][0];
cout<<endl<<"Macierz dopelnien naszej macierzy wynosi: "<<endl;
for (int i = 0; i <2; ++i)
{
for (int j = 0; j < 2; ++j)
cout << macierzdopelnien [i][j] << " ";
cout << endl;
}
}
break;
case '2':
{
exit(0);
}
break;
default: cout<<"Nie ma takiej opcji w menu!";
}
getchar();getchar();
system("cls");
}
return 0;
}
}