Boas a todos estou cm duvida com relaçao a este exercicio de como trasponho a matriz alguma sugestao?? Agradeço desde ja o exclarecimento …
Irei postar o codigo de como estou fazendo a matriz , aminha duvida e de como farei para transpola…
Considere que cada elemento em uma matriz está posicionado em uma combinação de linhas (x) e colunas (y).
Assim sendo, a matriz transposta coloca os elementos da matriz base, invertendo a posição dos elementos, enquanto o elemento matriz[x][y] está em [x][y] na matriz base, na matriz transposta ele estará em [y][x]
Se você reparar, a tranposta é somente os índices invertidos.
Na posição i=1 j=2 temos o valor 5, na transposta, esse valor 5 vai para a posição i=2 j=1, repare que você somente precisa
inverter os indíces na matriz transposta, quando for percorrer a matriz.
se você fizer um for, percorrendo a matriz original, você pode apenas inverter i com j, que resultará na transposta.
Vê se isso ajuda, se ainda assim não souber como fazer, posso postar um exemplo depois.
A idéia da matriz transposta é transformar as linhas em colunas, invertendo suas dimensões.
É só seguir a lógica, leia os itens de cada linha e jogue-os em colunas…
Primeiro crie a matriz pra receber os valores, invertendo as dimensões… se a matriz original é [x][y] , a transposta vai ter dimensão [y][x].
Depois, itere pelas linhas, invertendo as posições dos itens…
[0][0] vira [0][0]
[0][1] vira [1][0]
[0][2] vira [2][0]
…
[1][0] vira [0][1]
[1][1] vira [1][1]
[1][2] vira [2][1]
Sacou? A lógica é essa, agora a implementação você faz, a intenção é essa não é?
Dica: crie um método que transponha qualquer matriz. Digamos que você queira transpor uma matriz de double. É bem fácil fazer isso:
public static double[][] transpor (double[][] entrada) {
double[][] resultado = new double[entrada[0].length][entrada.length];
...... <-- isto é por sua conta
return resultado;
}
/**
* @param args the command line arguments
*/
/* private static MAXLINHAS = 20;
private static MAXCOLUNAS = 20;*/
public static void main (String [] args){
Scanner sc = new Scanner(System.in);
//lê o numero de linhas
System.out.print("Quantas linhas tem a matriz? ");
int nLinhas=sc.nextInt();
// lê o numero de colunas
System.out.print("E quantas colunas ");
int nColunas=sc.nextInt();
//declara e lê a matriz
int [][] matriz = leMatriz(nLinhas,nColunas, sc);
//imprime a matriz no écran para verificação
for(int i=0; i<nLinhas; i++){
for(int j=0;j<nColunas;j++)
System.out.print(matriz[i][j]+" ");
System.out.println();
}
}
public static int[][] leMatriz(int nLinhas, int nColunas, Scanner sc){
int [][] matriz = new int [nLinhas][nColunas];
for (int i=0;i<nLinhas;i++)
for(int j=0;j<nColunas;j++)
matriz[i][j]=leIntPositivo(sc);
return matriz;
}
public static int leIntPositivo(Scanner sc){
int n = -1;
do {System.out.print(" :");
if (sc.hasNextInt()) n = sc.nextInt();
else {sc.next();
n = -1;}
} while (n <= 0);
return n;
}
public static int trasPosta (int [][] entrada){
int [][] matriztrasposta=new int [entrada[0].length][entrada.length];
int [][]teste=new int [][];
for (int i=0;i<entrada[0].length;i++)
for (int j=0;j<entrada.length;j++)
teste[i][j]= matriztransposta[j][i];
}
[/code]
bem pessoal posto meu codigo aqi mas estou com duvidas,n posso invocar o metodo matriz dentro do metodo transPosta?nao estou conseguindo
e peço a ajuda de voces com relaçao ao codigo da transposta n sei se esta correto.
Estou a ter um pouco de dificuldade com java e meu primeiro semestre de java …por isso as muitas duvidas…
// - - > inclua o procedimento de transposição após o preenchimento da matriz, como segue:
//declara e lê a matriz
int [][] matriz = leMatriz(nLinhas,nColunas, sc);
//efetua a transposição
int [][] matriztransposta=new int [nColunas][nLinhas];
for (int i=0;i<nLinhas;i++)
for (int j=0;j<nColunas;j++)
matriztransposta[i][j]= matriz[j][i];
}
ou, se desejar um procedimento à parte:
//declara e lê a matriz
int [][] matriz = leMatriz(nLinhas,nColunas, sc);
//efetua a transposição
matriz = trasPosta (matriz);
// (. . .)
public static int trasPosta (int [][] entrada){
int [][] matriztransposta=new int [entrada[0].length][entrada.length];
for (int i=0;i<entrada[0].length;i++)
for (int j=0;j<entrada.length;j++)
matriztransposta[i][j]= entrada[j][i];
return matriztransposta;
}
testei os dois exemplos q me passou marcio mas n consegui transpor a matriz ,n sei se fiz certo mas a saida ficou assim
Quantas linhas tem a matriz? 3
E quantas colunas 2
:1
:2
:3
:4
:5
:6
1 2
[[I@13caecd2 4
[[I@f843865 6
[[I@1194a4e
n sei o q estou fazendo de errado??
[code]//imprime a matriz no écran para verificação
for(int i=0; i<nLinhas; i++){
for(int j=0;j<nColunas;j++)
System.out.print(matriz[i][j]+ " " );
System.out.println();
matriz=trasPosta(matriz);
System.out.print(matriz);
}
/* int [][] matriztransposta=new int [nColunas][nLinhas];
for (int i=0;i<nLinhas;i++)
for (int j=0;j<nColunas;j++)
matriztransposta[i][j]= matriz[j][i];
System.out.print(matriz);
System.out.println();*/[/code]