Witam serdecznie!
Dopiero zaczynam programować w c++. Piszę program na zajęcia w szkole i mam kłopot. Otóż nie wiem jak napisać transpozycję macierzy o wymiarach 8x4. Pisze w dev-c++. Oto mój kod:
macierz.cpp :
void Macierz::transpozycja()
{
for(int i=0; i<iloscW; i++){
for(int j=0; j<iloscK; j++){
int w =(int) tab[i][j];
for (int k=0; k<iloscK; k++){
for (int l=0; l<iloscW; l++){
tab2[l][k] =(int) w;
break;
}break;
}
}
}
}
macierz.hpp (jest tutaj pełno zmiennych i funkcji, których używam w reszcie programu, jednak na wszelki wypadek wklejam całosć) :
class Macierz{
//domyślnie private
int tab[20][30];
int tab2[30][20]; //macierz 20 wierszy x 30 kolumn
const int maxW; //maksymalna ilosc wierszy
const int maxK; //maksymalna ilosc kolumn
int iloscW; //aktualna ilosc wierszy
int iloscK; //aktualna ilosc kolumn
public:
Macierz(); //konstruktor bezargumentowy
Macierz(int iloscW, int iloscK); //konstruktor dwuargumentowy
bool ustaw_iloscW(int iloscW); //ustala nowa wartosc zmiennej iloscW
int daj_iloscW(); //zwraca wartosc zmiennej iloscW
bool ustaw_iloscK(int iloscK); //ustala nowa wartosc zmiennej iloscK
int daj_iloscK(); //zwraca wartosc zmiennej iloscK
inline bool ustaw_iloscWK(int iloscW, int iloscK); //ustala nowa wartosc zmiennych iloscW i iloscK
bool ustaw(Indeks i, int wartosc); //ustala wartosc elementu pod indeksem i
int daj(Indeks i); //zwraca wartosc elementu pod indeksem i
int sumaWiersz(int w);//zwraca sume elementow w wierszu w
double sredniaWiersz(int w);//zwraca srednia wartosc z wiersza w
Indeks elementMax(); //zwraca indeks pierwszego wystapienia wartosci maksymalnej
int wartoscMax(); //zwraca wartosc maksymalna w macierzy
int wierszMaxSuma(); //numer wiersza o maksymalnej sumie elementow
int kolumnaMinIloczyn(); //numer kolumny o minimalnym iloczynie elementow kolumny
int jestWMacierzy(int liczba); //czy liczba wystepuje w macierzy
bool roznowartosciowa(); //czy macierz jest roznowartosciowa
void transpozycja(); //wykonuje transpozycje macierzy
int iloscParzystych(); //zwraca ilosc elementow przystych w macierzy
};
#endif
no i main.cpp wywołuję metodę następująco :
cout << "Macierz transponowana wyglada nastepujaco:" << endl;
cout << endl;
m1.transpozycja();
for (int i=0; i<m1.daj_iloscK(); i++){
for (int j=0; j<m1.daj_iloscW(); j++)
cout << m1.daj(Indeks(i,j)) << " ";
cout << endl;
}
cout << endl;
jest tam również klasa indeks stąd funkcja m1.daj(Indeks(i,j)), jednak myślę że nie jest to potrzebne. Gdyby jednak było to mogę wkleić calutki kod programu. Problem polega na tym, że mając przykłądowo macierz wyglądającą tak:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
spodziewam się wyniku:
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4
a otrzymuję coś takiego:
1 2 3 4 -1 -1 -1 -1
1 2 3 4 -1 -1 -1 -1
1 2 3 4 -1 -1 -1 -1
1 2 3 4 -1 -1 -1 -1
Wiem że -1 pojawia się, gdyż bazowa macierz nie ma argumentów w tych miejscach, jednak nie mam pojęcia co zrobić, aby zapisywało mi poprawnie.
Bardzo prosiłbym o pomoc!