tablice dynamiczne dwuwymiarowe

0

Witam, czy może ktoś mi wytłumaczyć dlaczego program nie wyświetla tablicy?

#include <iostream>
using namespace std;


int main() {
	int x, y;
	cout << "Podaj liczbe wierszy" << endl;
	cin >> x;
	cout << "Podaj liczbe kolumn" << endl;
	cin >> y;
	
	int **tab = new int*[x];
	for (int i = 0; i < x; i++)
		tab[i] = new int[y];

	
	for (int i = 0; i < x; i++){
		for (int j = 0; j < y; j++){
			tab[i][j] = i + j;
		}
	}

	cout << "twoja macierz: " << endl;
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {
			cout << tab[x][y] << endl;
		}
		cout << endl;
	}

	for (int i = 0; i < x; i++) {
		delete[] tab[i];
	}
	delete[] tab;
	return 0;
}
2
micw napisał(a):

cout << "twoja macierz: " << endl;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
cout << tab[x][y] << endl; // <= TUTAJ
}
cout << endl;
}

Indeksujesz wg i, j a wyświetlasz x i y.

0

cout << tab[x][y] << endl;

0

@ple: @tajny_agent
Jeszcze jedno pytanie, jak uniknąć wyrzucania 'śmieci' podczas transponowania macierzy niekwadratowej?

#include <iostream>
using namespace std;

void transponuj(int x, int y, int **tab) {

	int **tab_tr = new int*[x];
	for (int i = 0; i < x; i++)
		tab_tr[i] = new int[y];

	for (int i = 0; i < x; i++)
		for (int j = 0; j < x; j++)
			tab_tr[i][j] = tab[j][i];

	cout << "macierz transponowana" << endl;
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < x; j++) {
			cout << tab_tr[i][j] << "\t";
		}
		cout << endl;
	}
}
int main() {
	int x, y;
	cout << "Podaj liczbe wierszy" << endl;
	cin >> x;
	cout << "Podaj liczbe kolumn" << endl;
	cin >> y;

	int **tab = new int*[x];
	for (int i = 0; i < x; i++)
		tab[i] = new int[y];

	cout << "uzupelnij macierz" << endl;
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {
			cin>>tab[i][j];
		}
	}

	cout << "twoja macierz: " << endl;
	for (int i = 0; i < x; i++) {
		for (int j = 0; j < y; j++) {
			cout << tab[i][j] << "\t";
		}
		cout << endl;
	}

	transponuj(x, y, tab);

	return 0;
}

0

Żeby transpozycja działała, trzeba pozamieniać indeksy; Porównaj:

#include <iostream>
using namespace std;

void transponuj(int x, int y, int **tab) {

    int **tab_tr = new int*[y];
    for (int i = 0; i < y; i++)
        tab_tr[i] = new int[x];

    for (int i = 0; i < y; i++)
        for (int j = 0; j < x; j++)
            tab_tr[i][j] = tab[j][i];

    cout << "macierz transponowana" << endl;
    for (int i = 0; i < y; i++) {
        for (int j = 0; j < x; j++) {
            cout << tab_tr[i][j] << "\t";
        }
        cout << endl;
    }
}
int main() {
    int x, y;
    cout << "Podaj liczbe wierszy" << endl;
    cin >> x;
    cout << "Podaj liczbe kolumn" << endl;
    cin >> y;

    int **tab = new int*[x];
    for (int i = 0; i < x; i++)
        tab[i] = new int[y];

    cout << "uzupelnij macierz" << endl;
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            cin>>tab[i][j];
        }
    }

    cout << "twoja macierz: " << endl;
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            cout << tab[i][j] << "\t";
        }
        cout << endl;
    }

    transponuj(x, y, tab);

    return 0;
}

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