Macierz odwrotna - problem z wyznaczeniem

0

Witam wszystkich,

właściwie cały algorytm już mam tylko nie wiem czemu źle mi tworzy tę macierz w wymiarach n x m

gdy ilość wierszy jest większa od ilości kolumn obcina mi kolumny do liczby równej ilości wierszy,
zaś gdy ilość wierszy<ilość kolumn dostaję dodatkowe kolumny z liczbami typu -13352986

  • w przypadku macierzy kwadratowych jest ok, (problem jest w odwracaniu bo operatory << i >> mam dobrze przeładowane bo sprawdzałem)

zamieszczam tutaj fragment kodu - wydaje mi się że więcej nie potrzeba i uprzejmie proszę aby ktoś sprawdził co jest nie tak

Macierz odwrotna(Matrix & A)
{
	int a, b;
	a = A.liczba_wierszy;
	b = A.liczba_kolumn;
	Matrix X(b, a);
	
	for(int i = 0; i < X.liczba_wierszy; i++)
	{
		for(int j = 0; j < X.liczba_kolumn; j++)
		{
			X.tab[i][j] = A.tab[j][i];
		}
	}
	
	return X;
}

tworząc macierz 2x3:
1 2 3
4 5 6

dostaję:
1 4 -33686019
2 5 -33686019
3 6 -33686019

zaś z macierzy 3x2:
1 2
3 4
5 6

otrzymuję:
1 3
2 4

0

Jeżeli to jest zadanie do szkoły, to przeczytaj raz jeszcze sformułowanie zadania. To co próbujesz obliczyć to jest macierz transponowana, macierz odwrotna wygląda zupełnie inaczej i istnieje tylko dla macierzy kwadratowych

0

ehh no faktycznie pomyliłem pojęcia, chodzi o macierz transponowaną

i nie mylisz się bo jest to zadanie - właściwie projekt ale na jedno wychodzi.

i proszę nie myśleć że nie chciało mi się robić to napisałem posta, siedzę nad tym od 10 i nie jestem w stanie tego rozwiązać dlatego też proszę o pomoc

0

Czy Matrix i Macierz, to to samo ?
Pokaż kawałek kodu, którym uzyskujesz to:

1 4 -33686019
2 5 -33686019
3 6 -33686019

może po prostu za dużo wypisujesz (trzy kolumny, a macierz transponowana ma tylko dwie kolumny).

0

matrix i macierz to to samo ;)

tylko że piszę program w jęz angielskim bo tego ode mnie wymagają na uczelni - i zapomniałem ten konstruktor przemianować na "Macierz" tak by było to czytelne i łatwe do zrozumienia po polsku (z tąd też ten problem odnoście macierzy transponowanej i odwrotnej - pisałem na szybko i pomyliłem zagadnienia)

ok teraz kod - wypiszę tylko część bo całość to ponad 500 linijek ;-P :

class Matrix
{
	int liczba_wierszy;
	int liczba_kolumn;
	int ** tab;						
	
public:	
	Matrix();
	Matrix(int liczba_wierszy, int liczba_kolumn);
		
	friend ostream & operator<<(ostream& wy, Matrix &);
	friend istream & operator>>(istream& we, Matrix &);
	friend Matrix transpose(Matrix & A); 
	
};

ostream& operator<<(ostream& wy, Matrix & A)		 //operator wypisania macierzy
	{																
		int x = A.liczba_wierszy;						
		int z = A.liczba_kolumn;							
		for(int i=0; i<x; i++)
		{
			for(int j=0; j<z; j++)
			{
				wy<<A.tab[i][j]<<" ";
			}
			wy<<endl;
		}
		return wy;
	}
istream& operator>>(istream& we, Matrix & A)                //operator wpisywania wartości do macierzy
	{
		int x = A.liczba_wierszy;
		int z = A.liczba_kolumn;
		for(int i=0; i<x; i++)
		{
			for(int j=0; j<z; j++)
			{
				we>>A.tab[i][j];
			}
		}              
		return we;
	}

Matrix::Matrix(int rows, int cols)
	{	
   		liczba_wierszy = rows;
		liczba_kolumn = cols;
		tab = new int * [liczba_wierszy]; 
		
		for (int i = 0; i < liczba_wierszy; i++)
		{
			tab[i] = new int [liczba_kolumn];				
		}
	}

Matrix transpose(Matrix & A)
{
	int a, b;
	a = A.liczba_wierszy;
	b = A.liczba_kolumn;
	Matrix X(b, a);
	
	{
		for(int j = 0; j < X.liczba_kolumn; j++)
		{
			X.tab[i][j] = A.tab[j][i];
		}
	}
	
	return X;
}


int main()
{

    	int wier[4];
	int kol[4];
	int f;
	int x = 0;

	for (int qwe = 0; qwe < 3; qwe++)   //zeruję tablicę - tak by potem nie utworzyło macierzy
	{                                                 //o liczbie wierszy -123986123 lub 0x213981 czy cos w tym stylu
		wier[qwe] = 0;
		kol[qwe] = 0;
	}
	
	for (f = 1; f < 4; f++)   //tutaj użytkownik przypisuje odpowiednim macierzom ilość wierszy i kolumn
	{   
		cout<<"Please enter number of rows and columns for matrix: "<<f<<" '"<<char(64+f)<<"'"<<endl;
		cin>>wier[f]>>kol[f];		
	}
	
	Matrix A(wier[1], kol[1]);
	Matrix B(wier[2], kol[2]);
	Matrix C(wier[3], kol[3]);	
		
	cout<<"Define values for matrix "<<char(65)<<endl;
	cin>>A;		
	cout<<"Define values for matrix "<<char(66)<<endl;
	cin>>B;
	cout<<"Define values for matrix "<<char(67)<<endl;
	cin>>C;
	
	cout<<"Result of some calculations:"<<endl;
	Matrix U = transpose(A);
	cout<<A<<endl<<"transpose of matrix A:"<<endl<<U<<endl;	
	int w2;
        cin>>w2;
	
	cout<<"koniec";

	return 0;
}

myślę że to powinno wystarczyć

0

Nie widzę błędu, ponadto u mnie(Windows XP, Dev-Cpp) działa.

0

ok dzięki za pomoc, wygląda na to że mój kod jest zbyt skomplikowany dla Visual studio '08 co jest co najmniej dziwne... no nic będzie trzeba dalej kombinować :|

0

U mnie na VS2k8EE działa prawidłowo. Więc może coś innego masz skopane.

0
mykebele napisał(a)

wygląda na to że mój kod jest zbyt skomplikowany dla Visual studio '08 co jest co najmniej dziwne...

zaprawde powiadam Ci: kompilator kod rozumie poprawnie w 99.9% przypadkow, wiedza Twoja za to o jezyku ktorego uzywasz czesto jest o wiele bardziej ograniczona nizli Ci sie to jawi :)

przypadki gdy kompilator poprawny kod zle zrozumial sa rzadkie, bardzo specyficzne, i powiazane najczesciej dosc zawilymi zagniezdzeniami template'ow. tych u Ciebie nie widze, wiec mozesz byc pewien ze zawiodla gdzies Twoja logika ew. pojecie o jezyku

0

zawiódł sprzęt :-D nie wiedzieć czemu u mnie nie działa a na kompie u brata śmiga aż miło :-)

pozdrawiam wszystkich i dzięki za zainteresowanie

0
mykebele napisał(a)

zawiódł sprzęt :-D nie wiedzieć czemu u mnie nie działa a na kompie u brata śmiga aż miło :-)

pozdrawiam wszystkich i dzięki za zainteresowanie

prędzej kofiguracja

0

Hallo mykebele!

mykebele napisał(a)

wygląda na to że mój kod jest zbyt skomplikowany dla Visual studio '08 co jest co najmniej dziwne... :|

mykebele napisał(a)

zawiódł sprzęt :-D nie wiedzieć czemu u mnie nie działa a na kompie u brata śmiga aż miło :-)

Twoj kod na pewno nie jest zbyt skomplikowany i na pewno nie zawiodl sprzet. Sorry, ale musze Ci zwrocic uwage na to, ze w zdecydowanej wiekszosci takich przypadkow "problem" siedzi przed monitorem i klawiatura. ;-)

Tak wiec, ja na twoim miejscu przejrzalbym program jeszcze raz, a jakby bylo trzeba to nawet dwa razy .... :-)

Pozdrawiam
Markus

1 użytkowników online, w tym zalogowanych: 0, gości: 1