Domanda:
matrice trasposta java?
?
2012-03-29 02:30:40 UTC
Ciao a tutti devo invertire sia le righe che le colonne di questa matrice:int M[][]={//nn posso creare la riga precedente e poi assegnare i valori
{1,4,3,2,5},
{4,5,1,3,2},
{3,2,4,1,5},
{2,3,5,4,5},
{5,1,2,3,4}
};

Per le righe nn ci sn problemi ma nn riesco ad invertire correttamente le colonne: questo è quello che ho scritto x le colonne:
public static void invertiColonne(int M[][]){
int i,j;
int m[][]=new int[5][5];
for(j=M.length-1;j>=0;j--){
for(i=M.length-1;i>=0;i--){
System.out.print(M[i][j]+", ");
}
System.out.println();

}
}
Il risultato è qst:4, 5, 5, 2, 5,
3, 4, 1, 3, 2,
2, 5, 4, 1, 3,
1, 3, 2, 5, 4,
5, 2, 3, 4, 1, ma è sbagliato perche mi inverte sì le colonne, ma poi me le stampa per righe!!!
Tre risposte:
anonymous
2012-03-29 02:45:21 UTC
allora da quello che mi ricordo la trasposta è una matrice in cui le righe diventano colonne e viceversa così



3 4

5 8



diventa



3 5

4 8



supponendo che hai m[2][2] fai doppio ciclo dove



int q[][] = new int[2][2];



for (int i = 0; i < m.lenght(); i++) {

for (int j = 0; j < m[i].lenght(); j++) {

q[j][i] = m[i][j];

}

}



Nello specifico del tuo problema, ti stampa le cose al contrario semplicemente perché tu hai impostato il ciclo al contrario (facendo -- e andando indietro invece di ++ e andando avanti)



Se non ti è chiaro, chiedi pure chiarimenti.



Edit: dimenticavo, per farlo funzionare con qualunque matrice, non solo le quadrate, se hai un array m[i][j] quando crei il nuovo ovviamente devi farlo con



int q[][] = new int[j][i];
Maurizio
2012-03-29 04:59:12 UTC
basta che inverti i cicli for i e for j cioè:

public static void invertiColonne(int M[][]){



int i,j;

int m[][]=new int[5][5];

for(i=M.length-1;i>=0;i--){

for(j=M.length-1;j>=0;j--){

System.out.print(M[i][j]+", ");

}

System.out.println();

}

}



Il risultato sarà:

4 3 2 1 5

5 4 5 3 2

5 1 4 2 3

2 3 1 5 4

5 2 3 4 1



Ad ogni modo il termine trasposta è improprio, la trasposta è a(j,i)=a(i,j), in pratica equivale a:

1 4 3 2 5

4 5 2 3 1

3 1 4 5 2

2 3 1 4 3

5 2 5 5 4

che come vedi non è proprio la stessa cosa, quindi nel tuo caso trasposta non c'entra nulla, tu effettui una inversione di righe e colonne, non uno scambio
ngueguim
2015-01-26 04:13:59 UTC
Salve ,cè un esercizio che chiede di ruotare una matrice in modo che la i esima colona sia la sua i-1 esima riga...E una variante della trasposta però si chiede di non usare una matrice ausiliaria.ruota su di esso è cambia posizione...qualcuno mi potrebbe proporre una soluzione?vi ringrazio


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...