[ Resolvido ] Problema de lógica na matriz

nao estou conseguindo, fazer este algoritmo podem me ajudar? antes minha matriz estava imprimindo agora nao esta mais eu ja me perdi.
alguem me explica como eu faço a troca da diagonal secundaria com principal ? como eu chamo pois nao estou acertando, o exercicio ainda nao esta terminado so me ajudem por gentileza apos trocar a diagonal secundaria com principal tenho mais coisas para fazer nessa matriz e vou postando minha duvida ok.


import javax.swing.JOptionPane;

public class Matriz_bidimen {

	public static void main(String[] args) {
		int matO[][] = new int[10][10];
		// int matB[][] = new int[10][10];

		// int cont = 0;
		int temp;
		String mensagem = " ";
		int linha, coluna;

		JOptionPane.showMessageDialog(null, "Matriz : ");

		for (linha = 0; linha < 10; linha++)
			for (coluna = 0; coluna < 10; coluna++) {
				// cont++;
				// matO[linha][coluna] = cont;

				matO[linha][coluna] = Integer.parseInt(JOptionPane
						.showInputDialog(null, " DIGITE VALORES DA MAT["
								+ linha + "] [" + coluna + "] : "));

				// mensagem = mensagem + "\n valores" + matO[linha][coluna];
				// JOptionPane.showMessageDialog(null, mensagem);

			}
				// apresentando a matriz 
		for (linha = 0; linha < 10; linha++)
			for (coluna = 0; coluna < 10; coluna++) {

				mensagem = mensagem + "\n mat[" + linha + "][" + coluna
						+ "] : " + matO[linha][coluna];

			}
		JOptionPane.showMessageDialog(null, "mensagem");
		
		
			// troca a diagonal secundaria pela primaria
		for (linha = 0; linha < 10; linha++)
			for (coluna = 0; coluna < 10; coluna++) {
				if (linha + coluna == 9) {
					
				temp = matO[linha][9 ];
				matO[linha][9] =  // receber a diagonal principal ?

				}
			}
	}
}




Bom, a diagonal principal de uma matriz vai do canto superior esquerdo para o canto inferior direito da matriz. Então, basta fazer um loop que leia os valores.

O Exemplo abaixo imprime o que seria a diagonal principal da sua matriz:


for(int linhaColuna =0; linhaColuna < 10; linhaColuna++){

System.out.println( mat0[linhaColuna][linhaColuna] );

}

obrigado rafaelbortoletto pela gentileza de responder, eu nao entendi muito bem oque quis dizer,entendi que a principal e linha e igual coluna , so que minha duvida e como faço a troca entre elas, nao consigo dar continuidade no exercicio pelo fato que nao estou sabendo como faz e nao e por falta de tentar, no caso o exercicio pede para que leia uma matriz do tamanho que falei 10x10, troque a diagonal secundaria com a principal, essa e meu problema, no meu caso eu faria assim:
if(linha + coluna == 9) {
temp = matrizO[coluna][9];
matO[coluna][9] = matO[0][coluna];
matO[0][coluna] = temp;

00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19

por gentileza alguem me explica issopor favor ? troca da diagonal sec com a principal

so esta a metade do codigo …

}
		int linha1 = 0;
		int coluna1 = 0;
		int l = 2 - 1;
		int c = 0;
		int[][] x = new int[2][2];
		for (int linha = 0; linha < 2; linha++) {
			x[l][c] = matriz[linha1][coluna1];
			linha1++;
			coluna1++;
			l--;
			c++;
		}

		for (int linha = 0; linha < 2; linha++) {
			for (int coluna = 0; coluna < 2; coluna++) {
				System.out.println("Matriz x [" + linha + "][" + coluna + "]: "
						+ x[linha][coluna]);
			}
		}

		int lin1 = 0;
		int col1 = 1;
		int li = 2 - 1;// nao entendi aqui ainda
		int co = 0;
		int[][] O = new int[2][2];
		for (int coluna = 0; coluna < 2; coluna++) {
			O[li][co] = matriz[lin1][col1];
			lin1++;
			col1--;
			l++;
			c--;
		}
		for (int linha = 0; linha < 2; linha++) {
			for (int coluna = 0; coluna < 2; coluna++) {
				System.out.println("Matriz x [" + linha + "][" + coluna + "]: "
						+ O[linha][coluna]);
			}
		}
	}

}

[quote=olivercld]por gentileza alguem me explica issopor favor ? troca da diagonal sec com a principal

so esta a metade do codigo …

[code]
}
int linha1 = 0;
int coluna1 = 0;
int l = 2 - 1;
int c = 0;
int[][] x = new int[2][2];
for (int linha = 0; linha < 2; linha++) {
x[l][c] = matriz[linha1][coluna1];
linha1++;
coluna1++;
l–;
c++;
}

	for (int linha = 0; linha < 2; linha++) {
		for (int coluna = 0; coluna < 2; coluna++) {
			System.out.println("Matriz x [" + linha + "][" + coluna + "]: "
					+ x[linha][coluna]);
		}
	}

	int lin1 = 0;
	int col1 = 1;
	int li = 2 - 1;// nao entendi aqui ainda
	int co = 0;
	int[][] O = new int[2][2];
	for (int coluna = 0; coluna < 2; coluna++) {
		O[li][co] = matriz[lin1][col1];
		lin1++;
		col1--;
		l++;
		c--;
	}
	for (int linha = 0; linha < 2; linha++) {
		for (int coluna = 0; coluna < 2; coluna++) {
			System.out.println("Matriz x [" + linha + "][" + coluna + "]: "
					+ O[linha][coluna]);
		}
	}
}

}

[/code][/quote] :?: :?:

Cara, sem querer ser chato…

Isso nao é tão commplicado de fazer, li tua dúvida e fiquei imaginando como fazer. Aí peguei um tempinho aqui e fiz. Seguinte :

voce cria uma matriz. Ai tem que ser quadrada, correto? para que existam diagonais iguais. daí você anda pela matriz, só pelas colunas (entao so precisa um “for”) e troca o item inicial matriz[linha][coluna] => matriz[0][0] troca por matriz[0][coluna_max]

daí você vai ter que somar (+ 1) na linha e subtrair (-1) na coluna. Assim vai poder trocar, colocando a coluna principal no lugar da secundaria e a secundaria na principal.

Você quer que eu mande ou quer pensar um pouco mais ainda? imagina que tem uma matriz 3x3. as operacoes que vc tem que fazer sao:
trocar mat[0][0] por mat[0][2]
trocar mat[1][1] por mat[1][1] --> isso nao e necessario, mas colocar um “if” pra testar isso nem vale a pena, fica testando direto uma coisa que so acontece 1X. é perda de processamento
trocar mat[2][0] por mat[2][2]

daí tu ve que pode usar um “for” só, que vai indexar as linhas. Tu faz tb duas variaveis auxiliares, pra poder indexar as colunas (que marcam os elementos que vc quer trocar). Aí voce comça com varAux1=0 e varAux2=2 (no caso de mat3X3)
agora tu usa o “for” pra andar pelas linhas. as colunas vao ser indicadas pelas variaveis auxiliares, uma vai ser somada e a outra vai ser subtraida de “1”. Assim, essas variaveis vao fazer um “X” na tua matriz, trocando a diagonal principal pela secundaria, sacou?

Tenta fazer aí e se tu nao conseguir manda email : gpmdf@hotmail.com

ah, foi mal mas eu nao li essa solução que tu colocasse ai nao, ta mt complicada. Daquela que o cara tem que fazer o desenho e sair acompanhando com o lapis hehehe.

Parece que ta funcionando, ne? isso aí de 2 - 1 é porque a matriz tem 2 linhas e 2 colunas, só que como java indexa partindo de 0, entao na verdade os índices são 0 e 1 (um é o maior valor, que é 2-1 = 1), sacou? se vc colocar até 2 vai estourar o tamanho da matriz.

Valeu, cara! Tenta aí e meu email ta disponibilizado, qualquer coisa, se tu nao conseguir, da um toque ai! Tamos aqui pra ajudar nas duvidas! =)

obrigado gpmdf2, vou tentar aqui essa ultima que postei ainda tenho de mecher qulquer coisa te mando email posto aqui blz valeu pela ajuda, tu sabe como é neh iniciante tem duvida demais vou tentando aqui la pelas madrugadas eu mando posto blz faloww

blz, cara.

olha so, apenas um dica : procura deixar tuas coisas o mais simples possivel, tem gente que se empolga mt com programação e faz uma tempestade em copo d’agua por qualquer coisa. Tipo o cara pergunta uma coisa simples e os caras mandam centenas de tutoriais, paginas pra pesquisar e tudo o mais, mesmo podendo mandar um exemplo pronto com uma coisa facil pra poder ajudar a galera.

nao to querendo dizer pra você para de pesquisar e ficar so esperando, pra ser preguiçoso. so quero falar que muita gente complica o que é fácil (nao podiam mandar um exemplo pequeno, bem explicativo pra o cara poder ter uma ideia e botar pra frente o que ele precisa?).

só pra tu ter idéia, pra andar por uma diagonal numa matriz (a diag. principal) você só tem que fazer um “for”. Ao inves de usar 2 “for”, que é o que a gente faz quando se quer andar por uma matriz e passar por todos os elementos dela, é só usar um “for” apenas e ao inves de fazer matriz[i][j], fazer matriz[i][i].

Pronto, só isso! Se vc desenhar a matriz no lapis vai ver que a diagonal principal é quando os indices sao iguais. Tenta olhar teu problema e verificar os detalhes dele, entende? Montar uma lógica pra outra diagonal e pronto. Depois que tu entender teu problema e colocar ele como um algoritmo, um modelo na linguagem que vc ta usando, ta feito! Como te disse, pode perguntar aí qualquer coisa. O bom é vc tentar sozinho. Qualquer coisa, tamos aí!

tenta com uma matriz pequena que com uma maior sai do mesmo jeito. Aí embaixo da uma olhada nas linhas e colunas :

[00][01][01]
[10][11][11]
[20][21][22]

ta vendo que a diagonal principal tem os dois indices iguais? Sacou o que eu falei? Tenta ver os detalhes que vc vai conseguir. Avisa ai quando resolver teu problema! Valeu!

:lol:

obrigado gpmdf2 vou fazer oque vc falou, vou tentar com uma matriz menor, tou quase pgando o jeito, bom percebi sim que a principal e linha e igual coluna, estou tentando ok e o meu muito obrigado a todos que ajudou principalmente vc gpmdf2.

bom a essa matriz a troca de diagonais e apenas primeira coisa a fazer ainda dentro dssa mesma matriz tenho mais coisas mais trocas de elementos e asim que conseguirr desenrolar o primeiro passo para o segundo passo …

aqui stou eu pelas madrugadas unico teMpo para praticar, ate mesmo dormindo em cima do teclado

“Espera no ALTÍSSIMO, anima-te, e ele fortalecerá o teu coração; espera, pois, no ALTÍSSIMO. Salmos 27:14”

ta a principal eu entendi, linha = = coluna

     [00] [01] [01]  
     [10] [11] [11]  // nao entendi porque tem 2,   [0] [ 1]  [ 0] [1] na linha debaixo tem [1][ 1] [1] [1]
     [20] [21] [22]  

não seria assim 

     [00] [01] [02]  
     [10] [11] [12]  
     [20] [21] [22] 

  fazendo assim coluna[1] + linha [0] = 2 /  linha [1] + coluna [1] = 2  /, coluna[0] + linha [2] = 2 e dessa forma que seria minha secundaria ? fazendo assim da certo so especificando na matematica ela seria 3 linhas 3 coluna no algoritmo segui  esse ritimo que  falei acima  seria assim ?   gpmdf2

eis me aqui pela madrugada…

outra duvida como é a triangular superior de uma matriz ou seja da principal para cima ela e numeros positivos da diagonal para baixo ela e numeros negativos certo? é para inverter ou seja troca las de lugar como seria exemplo a superior passa a ser inferior vise versa. ?

seria dessa forma e certo que essa e uma 3x3:

matriz[2][1] = matriz[1][2];  
matriz[3][1] = matriz[1][3];  
matriz[3][2] = matriz[2][3];  

dessa forma vai ficar muito grande minha matriz nesse caso eu tenho a matriz 10x10 vai ficar enorme, tem outro jeito de fazer ?

[quote=olivercld]seria dessa forma e certo que essa e uma 3x3:

matriz[2][1] = matriz[1][2];  
matriz[3][1] = matriz[1][3];  
matriz[3][2] = matriz[2][3];  

dessa forma vai ficar muito grande minha matriz nesse caso eu tenho a matriz 10x10 vai ficar enorme, tem outro jeito de fazer ?
[/quote]

[00][01][01]  
[10][11][11]  
[20][21][22]  

a matriz que eu tinha escrito acima ta desse jeito porque ta errada, mesmo huahauuhauhuahauha. Escrevi na pressa e nem vi que tinha elementos com linhas e colunas iguais!

[00][01][02]  
[10][11][12]  
[20][21][22]  

Vamos tomar como exemplo uma matriz que nao esteja troncha daquele jeito, ne? Vamos la… O que temos de comum na triangular de cima?

  1. se for a diag. superior secundaria
    ando pela matriz toda e se o elemento atual atende : j >= i , entao ele pertence. Resultado (os numeros que estao com “.” no final sao os da diagonal superior):
0.0.0.0.
0 0.0.0.
0 0 0.0.
0 0 0 0.
  1. se for o da diagonal principal o triangulo, eu fiz uma variavel pra limitar ate onde devo andar. Esse foi facil mas um pouco mais trabalhos, entao vou te dar o algoritmo p vc estudar em casa (uma colhe de cha, ne? hauhuahuha)
    resultado :
0.0.0.0.
0.0.0.0 
0.0.0 0 
0.0 0 0 

Algoritmo :

 public static void imprimeTriangularCima(int lin, int col, int[][] mat) {

        /*
         *o algoritmo recebe uma matriz e espera que vc de o numero de linhas e colunas, blz? 
         *vc pode ainda colocar uma verificação no inicio, com um "if", caso o user passe linhas != colunas (porque ai nao e quadrada, entao nao tem diagonal, ne isso? ) 
         */
        
        /*
         * um limidator que indica ate onde devo marcar na matriz
         */
        int limiter = col;

        
        // começo a andar pela matriz
        for (int i = 0; i < lin; i++) {
                // se eu passei pra uma outra linha da matriz, entao devo limitar um pouco ate onde vou, correto? olha ai o limitador ajudando! =)
                limiter--;
            for (int j = 0; j < col; j++) {

                // se o J esta dentro dos limites, imprima como sendo da parte de cima!
                if (j <= limiter) {
                    System.out.print(mat[i][j] + ".");
                } else {
                    // se nao, imprima como sendo normal (fora do escopo que eu quero)
                    System.out.print(mat[i][j] + " ");
                }

                // se cheguei no fim da linha, pule uma linha (pra imprimir a matriz certinha na tela, ao inves de uma linha so, cheia de numeros)
                if (j == lin - 1) {
                    System.out.println("");
                }
            }
        }
    } // fim do algoritmo

Desculpa qq coisa ai se n ficou mt claro, programo mt bem nao… =( mas acho que da pra ajudar bastante!
só uma dica pra chamar o metodo :

cara tu é um irmão obrigado gpmdf2, nao sabe como estou aqui a dias tentando fazer e nao da certo, o algoritmo que estou aqui e mais ou menos dessa forma que vc fez, vou passar ele no eclipse ver como vou fazendo implemantando praticando, se possivel passar no meu caderninho de praticas aqui qu faço assim escrevo no caderno e logo apos passo no eclipse, na matriz eu tenho de fazer 1º trocar diagonal secundaria 2º trocar 3 linha pela 9 coluna, 3º inverter o memso qu trocar a tringular superior com a triangular inferior. ainda estou na de trocar a 3 linha com 9 coluna pa vc ta facilqu ja entende eu aidna nao estou qurendo entnder praticando e com a ajuda sua e do pessoal do blog.

ao final quando terminar postarei a matriz aqui ou posso passar em pdf e passo o link aqui o que vc acha ?

hã e como aidna estou fazendo vao surgir duvidas erros qu nao saberei neste sabado e domingo vou mecher denovo na matriz.

obrigado pelas explicaçoes, masi vou nessa que ja e altas horas da madruga nem consigo pensar ate a proxima breve duvida.
postarei masi erros e duvidas ok abraços grande.

qnd eu comecei a programar matrizes era o que mais me esquentava a cabeça, depois isso passa um pouco, porque vc vai ter coisas muito mais dificeis pra se preocupar huahuhauhauhauha.

com esse exemplo de percorrer a matriz tu ja mata esses de trocar os triangulos, po. saca so, se tu percorrer e sabe quem tu quer encontrar, quando tu encontrar, guar num vetor[x] e aumenta o x;

assim quando tu quiser colocar em outro lugar (tipo o outro triangulo) é so andar por ele e sair lendo o array. naquele teste que imprime o “.” caso ele seja do triangulo, tu pode colocar um “continue”, ai o loop reinicia, assim nao precisa processar o resto do loop, se tu nao quiser andar por mais nada isso e util porque ele ve se o cara nao for do triangulo, tu manda reiniciar o loop, sacou?

tipo… é do triangulo? entao vai fazendo o algoritmo se nao for, vai pra proxima iteracao.

tu acho que mexer com matrizes é bom p desenvolver a logica. tu nao queres me adicionar no msn, nao? to procurando gente pra estudar umas coisas viajadas ai e ja que tu parece gostar a gnt podia se juntar. sao uns projetinhos bem legais. se quiser me avisa que tem mando meu msn

ei véi…

só pra disseminar o caos…

eu tava andando pelo forum e vi a duvida de um cara… ele queria fazer isso:

0000*0000
000***000
00*****00
0*******0
*********
0*******0
00*****00
000***000
0000*0000

huahuahuhauhuauhuhauhauhuaha.

eu achei o exercicio legal. Ve se tu acha a resposta ai.

caraca esse exercicio e dificil, bom no caso de fazer um grupo de estudo eu concordo ate eu ia te chamar,ja que chamo tou dentro, e so que a uma diferença eu sei quase nada e tu ja esta bem adiantado, tipo essa matriz eu tenho de fazer ela ate segunda feira por isso estou batendo forte em cima, uma que quero aprender eu tenho de explicar ela outra e que ela tem de fazer 3 açao dentro dela primeiro troca de diagonais 2 troca de linha por coluna 3 troca de diagonais. e ai estou no troca de linha por coluna esta dando alguns erros.
faz assim mu horario que tenho pra praticar são esses:

depois da facul entro as 23:10 em diante no caso eu moro no MATO GROSSO é uma hora a menos doque SP RJ PR nao sei onde tu moras, e no meio da semana depois das 16 horas ate as 18 horas que ai vou pra faculdade, enfim tenho pouco tempo para praticar ha casos de muitos trabahos de outras materis do curso e focar so em uma coisa fica dificil, masi mesmo assim com pouco tmepo pratico pouco mais faço, eu leio apostilas pego exemplos passo no caderno depois para pc, entao tenho interesse e gosto sim, eu nao entro muito em msn mais se for pra estudar abro uma exceção manda ai que adc.
mais tou aqui sempre no forum e de grande ajuda, e que ajuda otimo este forum.

kara a duvida do kara ai ele quer mostrar aquele monte de 000 ? daquela maneira ? nao eesta tao facil. hehe

então no caso da matriz eu ja tenho meio caminho andado e so fazer um metodo pra que depois chamo na principal, o que quero e trocar Tringular superior com a Inferior


exemplo uma 3x3

00 01 02
10 12 13
20 22 23

quero pegar os valores acima da principal esses  01 02  13
                                                                           
inverter(trocar)
 por valores abaixo da principal                            10 20   22
                                                                            
pegar os valores da de cima trocar com a debaixo as triangulares