mallekith [ Centurion ]
jak zrobic macierz w c++?
wlasnie, jak to zrobic? robie tak, np:
main()
int macierz[3][3]; //tu bedzie macierz 3x3 ?
...
macierz[1][2]=1; //1 - wiersz, 2 - kolumna ?
...
cout << macierz[1][2]; // jezeli w sposub jw. podstawiam do macierzy jakies wartosci, to on mi zwraca czasmi jakies glupoty... ?
mallekith [ Centurion ]
w sposob oczywiscie... :))) bed za 2-3 godziny, mam nadizeje ze do tego czasu moj problem bedzie rozwiazany :)) oby... :) fajnie by bylo
Eliash [ Generaďż˝ ]
mallekith -->
int maciez[3][3] tworzy tablice dwuwymiarową, można to uznać za macierz.
Musisz pamięteć że indeksacja w C/C++ zawsze zaczyna się od zera,
Czyli cout << maciez[3][3] zwróci krzaczki. Używaj 0,1,2 dla odpowiednio 1 2 3 kolumny/wiersza
Innej przyczyny błędów nie widzę ...
mallekith [ Centurion ]
int macierz[2][2];
int i,j;
macierz[0][0]=1;
macierz[0][1]=2;
macierz[0][2]=3;
macierz[1][0]=4;
macierz[1][1]=5;
macierz[1][2]=6;
macierz[2][0]=7;
macierz[2][1]=8;
macierz[2][2]=9;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
cout <<"\t" << macierz[j] << "\t";
cout << "\n";
teraz zamiast 3 wypisuje 4 i zamast 6 wypisuje 7
mallekith [ Centurion ]
jeszcze raz petla, bo cos sie skopalo :)
zamiast i bedzie k
for(i=0;k<3;i++)
for(j=0;j<3;j++)
cout <<"\t" << macierz[k][j] << "\t";
cout << "\n";
Eliash [ Generaďż˝ ]
mallekith -->
Popatrz na początek tego programu
int maciez[2][2]
oznacza to ze tworzysz tablice skladającą się z CZTERECH elementow
w C indeksuje się OD ZERA czyli oby "dobrać się" do pierwszego elementu
uzyj indeksu 0, do drugiego indeksu 1. Inteks 2 spowoduje błąd.
Zeby program zadzialal zmiań na
int maciez[3][3]
mallekith [ Centurion ]
ok, to juz mam. a teraz, jak najszybciej podstawic pod wszystkie wartosci obiektu typu
class macierz
int wiersz1[3];
int wiersz2[3];
int wiersz3[3];
najszybciej podstwaic pd kjakastam macierz pozniej np. zera?
Eliash [ Generaďż˝ ]
mallekith --> Jesli to jest jakieś zaliczenie, to oblejesz :]
for (int i=;1 i<3; i++)
wiersz1 = 0;
wiersz2 = 0;
wiersz2 = 0;
;
Jeżeli Twoim zadanie jest napisanie klasy przedstawiającej macierz to nie tędy droga. :)
mallekith [ Centurion ]
no miedzy innymi napisanie klasy macierz z dodawaniem i mnozeniem. jezeli mowisz ze mam zle, to moze mi podpowiesz? bo ja nie mam innego pomysla :)
Eliash [ Generaďż˝ ]
Już zapomniałęm operacje na macierzach :)
dodawane musiały mieć takie same rozmiary, a mnozone
"odwrotne" ? Dobrze pamiętam ?
mallekith [ Centurion ]
dzieki, juz zrobilem, jak chcesz zobaczyc jak to wychodzi, to moge ci wyslac na maila :)) ale dalem rade :D
Eliash [ Generaďż˝ ]
#include <stdio.h>
class CMacierz
private:
int *_tablica;
unsigned int MatrixSize;
unsigned int Cols, Rows;
CMacierz(const unsigned int wiersze, const unsigned int kolumny, int dane1[], int dane2[]);
public:
CMacierz(const unsigned int wiersze, const unsigned int kolumny);
~CMacierz();
int &Element(unsigned int, unsigned int);
CMacierz operator+(CMacierz);
CMacierz operator*(CMacierz);
;
CMacierz::CMacierz (const unsigned int wiersze, const unsigned int kolumny)
MatrixSize = wiersze * kolumny;
Cols = kolumny;
Rows = wiersze;
_tablica = new int[MatrixSize];
for (unsigned int i=0; i<MatrixSize; i++)
_tablica = 0;
;
CMacierz::~CMacierz()
delete [] _tablica;
;
int &CMacierz::Element(unsigned int wiersz, unsigned int kolumna)
return _tablica[wiersz*kolumna];
;
CMacierz::CMacierz(const unsigned int wiersze, const unsigned int kolumny, int dane1[], int dane2[])
MatrixSize = wiersze * kolumny;
Cols = kolumny;
Rows = wiersze;
_tablica = new int[MatrixSize];
for (unsigned int i=0; i<MatrixSize; i++)
_tablica = dane1 + dane2;
;
;
CMacierz CMacierz::operator+(CMacierz _macierz)
if (_macierz.Cols != Cols || _macierz.Rows != Rows )
// Tu powinien być wywołąny wyjątek
;
return CMacierz(Rows, Cols, _tablica, _macierz._tablica);
;
void main()
CMacierz macierz(3,3);
CMacierz macierz2(3,3);
macierz.Element(1, 1) = 3;
CMacierz macierz3 = macierz + macierz2;
printf(" wartosc: %d", macierz3.Element(1, 1));
;
/*
Napisałem ta klase w 15 minut, ma pewnie mnostwo błędów
Pozostało Ci zrobienie mnożenia macierzy, robi się to
bardzo podobnie jak dodawanie, mysle że zobie poradzisz :)
Oczywiście możesz tu jeszcze duzo rzeczy zmienic/poprawic
nie zastrzegam sobie do tego "kodu" praw autorskich :)
*/