Widać, że nie masz totalnie pojęcia o programowaniu, ale na szczęście widać, że coś robisz, a nie prosisz o gotowca jak większość.
#include<iostream>
using namespace std;
class macierz /*sprawdz, gdzie kończy się klamra klasy */
{ /*-----1-----*/
void wczytaj_macierz(int n , int m)
{/*-----2-----*/
cout << "Liczba wierszy: ";
cin >> n;
cout << "Liczba kolumn: ";
cin >> m;
double macierz[n][m];
double macierzT[m][n];
for(int i = 0; i < n; i++) //wstawianie danych
{/*-----3-----*/
for(int j = 0;j < m; j++)
{/*-----4-----*/
cout << "Wyraz [" << i << "][" << j << "]: ";
cin >> macierz[i][j]; cin.get();
} /*-----4-----*/
}/*-----3-----*/ cin.get();
}/*-----2-----*/
void transponuj_macierz(int n, int m)
{ /*-----2-----*/
for(int i = 0; i < n; i++) //transponowanie macierzy
{/*-----3-----*/
for(int j = 0;j < m; j++)
macierzT[j][i]=macierz[i][j];
}/*-----3-----*/
}/*-----2-----*/
void wypisz_macierz(int n , int m)
{ /*-----2-----*/
cout << "Macierz:" << endl;
for(int i = 0; i < n; i++) //wyswietlanie macierzy
{/*-----3-----*/
for(int j = 0;j < m; j++)
{/*-----4-----*/
cout << macierz[i][j] << " ";
}/*-----4-----*/
cout << endl;
}/*-----3-----*/
cout << endl;
{ /*-----3-----*/
cout << "Macierz transponowana:" << endl;
for(int i = 0; i < m; i++) //wyswietlanie macierzy transponowanej
{/*-----4-----*/
for(int j = 0;j < n; j++)
{/*-----5-----*/
cout << macierzT[i][j] << " ";
}/*-----5-----*/
cout << endl;
}/*-----4-----*/
}/*-----3-----*/ // koniec funkcji wypisz_macierz //
/*a gdzie zakończenie klamry /*-----2-----*/ i /*-----1-----*/? Przy czym /*-----1-----*/ ze średnikiem */
int main()
{
void macierz:: wczytaj_macierz(int n , int m) /*podobnie do tego co tutaj jest wywołuje się funkcje statyczne klasy, niestety takich nie masz*/
void macierz transponuj_macierz(int n , int m) /*Chcesz zdefiniować kolejne funkcje, czy chcesz je wywołać?*/
void macierz wypisz_macierz(int n , int m)
cin.get();
return 0;
}
Do transponowania macierzy nie jest potrzebne aż dwie macierze. W C++ jest funkcja swap, która zamienia wartości obiektów, czyli swap(x, y); będzie oznaczało, że y będzie miał tą wartość którą miał x a x będzie miał wartość która miał y;
Dlatego:
void transponowanie_macierzy(double**& matrix, int size)
{
for(int i = 0; i < size; ++i)
for(int j = i + 1; j < size; ++j)
swap(matrix[i][j], matrix[j][i]);
}
Poza tym, wstawianie ciała funkcji w definicji klasy, jest błędne, gdyż funkcje te stają się Od razu funkcjami inline (czyli nie posiadają adresu, tylko wstawiają kod w miejsce ich wywołania). Funkcje inline natomiast powinny być (jak sama nazwa wskazuje) zapisane w jednej linii (co oczywiście nie znaczy, żeby zapisać cały kod w jednej linii oddzielony średnikami ;). Dlatego definicje funkcji zapisuje się poniżej definicji klasy, a jeszcze lepiej w oddzielnym pliku .cpp.
Proponuję zacząć pisanie klasy od samego początku. I zaczynać stopniowo:
- Tworzymy klasę macierz
class macierz
{
};
- Co ta klasa powinna zawierać
class macierz
{
private:
int m_size; // wystarczy tylko size, bo napisałaś, że ta macierz ma być 3x3. Pytanie tylko czy tworzona dynamicznie, czy na sztywno, zakładam, że dynamicznie
double** m_matrix;
public:
macierz(int = 3); // konstruktor
~macierz(); // destruktor
void matrix_init();
void matrix_display();
void matrix_transposition();
};
macierz::macierz(int size) : m_size(size)
{
m_matrix = new double*[m_size];
for(int i = 0; i < m_size; ++i)
m_matrix[i] = new double[m_size];
}
macierz::~macierz()
{
for(int i = 0; i < m_size ++i)
delete [] m_matrix[i];
delete [] m_matrix;
}
void macierz::init()
{
for(int i = 0; i < m_size; ++i)
for(int j = 0; j < m_size; ++j)
{
cout << "Wprowadz wartosc dla MATRIX[ " << i << " ][ " << j << " ] : ";
double temp;
cin >> temp;
m_matrix[i][j] = temp;
}
}
Dalej myślę, że poradzisz sobie sama z definicją funkcji.
Jeżeli miało to być na sztywno, wtedy nie potrzebne będą konstruktor i destruktor
class macierz
{
private:
m_matrix[3][3];
public:
void matrix_init();
void matrix_display();
void matrix_transposition();
};
void macierz::init()
{
for(int i = 0; i < 3; ++i)
for(int j = 0; j < 3; ++j)
{
cout << "Wprowadz wartosc dla MATRIX[ " << i << " ][ " << j << " ] : ";
double temp;
cin >> temp;
m_matrix[i][j] = temp;
}
}