Ir ao conteúdo
  • Cadastre-se

C matriz trocando valores numericos


Posts recomendados

As trocas devem ser na vertical mesmo?

 

Nesse caso, dada uma matriz com L linhas e C colunas, podemos percorrer e acessar a matriz inteira na vertical usando um único ciclo for desta maneira:

for(i = 0; i < L*C; i++){
    matriz[i % L][i / L];
}

 

Assim, você pode tratar a matriz como se fosse um vetor, ou seja, a próxima posição (na vertical) é i + 1, e a posição anterior é i - 1.

 

Usando isto fica mais simples fazer um algoritmo para ir copiando a próxima posição da matriz para a posição atual.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
10 minutos atrás, Luan Bresolla disse:

Sim, será na vertical. Mas não consegui entender a lógica.

 

Seria assim... para percorrer um vetor de duas coordenadas (vulgo matriz), é necessário, como consequência, gerenciar 2 coordenas ao mesmo tempo... ou seja, é trabalhoso e um pouco confuso.

 

Daí, @isrnick ou outro programador qualquer, teve a ideia de tentar relacionar as coordenadas linha/coluna de um modo sequencial... por exemplo, nessa matriz de ordem 3 (3 por 3), iria de 0 a 8. O 1 tá na posição 0, o 2 na 1, o 3 na 2, o 4 na 3, 5 na 4... etc.

 

Aí esse programador entendeu um algoritmo que resolveria esse problema...

 

obs.: para facilitar a verificação, vide tabela abaixo:

Sequencia   Coorrdenada
  0 1 2     0,0 0,1 0,2
  3 4 5     1,0 1,1 1,2
  6 7 8     2,0 2,1 2,2

 

Para achar a coordenada da sequência, seria algo assim:
- A coordenada da linha na matriz é igual à "PARTE INTEIRA DA DIVISÃO DA POSIÇÃO QUE VOCÊ QUER PELO NÚMERO DE LADOS."

- A coordenada da coluna na matriz é igual ao  "RESTO DA DIVISÃO DA POSIÇÃO DA SEQUÊNCIA QUE VOCÊ QUER PELO NÚMERO DE LADOS"

 

Entende? o cara olhou a sequência e a coordenadas e criou uma algoritmo!!! Daí eu e você podemos reutilizar a lógica!!! :D

 

 

Vamos testar...

 

Por exemplo, se eu quero a posição 5 (na tua imagem tem o número 6, correto?), seria:

Linha = POSIÇÃO / NÚMEROS DE LINHAS -> 5/3 -> 1; (deu linha 1)

Coluna = POSIÇÃO6 % NÚMEROS DE LINHAS -> 5%3 -> 2 (deu coluna 2)


Ou seja, posição (1,2)... ou seja, a relação deu certo!

 

 

RESUMINDO:

A matriz vai se comportar como um vetor!!!

 

O for vai gerenciar a matriz em sequência... daí, no seu contexto, que seria "mover os números da direita do número que foi excluído uma casa para esquerda", ficará muito mais fácil... já que "o número da direita estará literalmente uma posição a direita na matriz".

 

 

Obs.:

adicionado 3 minutos depois

ADENDO:

Como a movimentação para o seu contexto é de "baixo para cima" (o tradicional seria da "direita para esquerda"), a movimentação das coordenadas ficaram trocadas... (a linha passou a ser a coluna e a coluna passou ser a linha).

adicionado 5 minutos depois

Só para ficar mais claro, seu fluxo segue assim:

Sequencia   Coorrdenada
  0 3 6     0,0 0,1 0,2
  1 4 7     1,0 1,1 1,2
  2 5 8     2,0 2,1 2,2
  • Curtir 3
Link para o comentário
Compartilhar em outros sites

@Luan Bresolla Veja esse exemplo de uma matriz de dimensão 5 x 4:

 

image.png.bfcf4741333c3d65b4e069ca3b66824e.png

 

Dentro da casa tem o número da casa indo de 0 a 19 (= 5*4 - 1), conforme sua posição na sequência percorrendo a matriz verticalmente. E entre parênteses estão as coordenadas da linha e coluna da casa da matriz.

 

Tendo o número da casa da matriz queremos obter as coordenadas de linha e coluna da casa para usar nos colchetes da matriz ( matriz[ linha ][ coluna ] ) no programa.

 

Para isso fazemos:

 

linha = numero_da_casa % 5

ou seja, linha é igual ao resto da divisão inteira do número da casa por 5 (onde 5 é a quantidade de linhas nesse exemplo)

 

e

 

coluna = numero_da_casa / 5

ou seja, coluna é igual a divisão inteira do número da casa por 5 (novamente quantidade de linhas).

 

 

 

Exemplos:

 

- Casa 2:

linha = 2 % 5 = 2

coluna = 2 / 5 = 0

Coordenadas: (2,0)

 

- Casa 13:

linha = 13 % 5 = 3

coluna = 13 / 5 = 2

Coordenadas: (3,2)

 

- Casa 15:

linha = 15 % 5 = 0

coluna = 15 / 3 = 3

Coordenadas: (0,3)

 

 

  • Curtir 2
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Luan Bresolla Agora você tem um ponto de partida, então veja se consegue usar isso para fazer o algoritmo, depois poste aqui o resultado, ou até onde conseguiu chegar e te ajudaremos. :thumbsup:

 

(Obs: Leia minha assinatura abaixo onde explica como postar códigos no fórum.)

 

 

@Simon Viegas Eu gosto de analisar a matriz e tentar achar as relações entre as coordenadas por conta própria, assim tenho a vantagem de não precisar ficar procurando soluções prontas, mas certamente não fui o primeiro a chegar nessas soluções.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

8 minutos atrás, Luan Bresolla disse:

Cara, fiz o teste, e em alguns números o resultado das coordenadas da certo, mas tem outros que a coordenada da errado, não sei se fiz algo errado, mas está ai

 

Não vai funcionar porque tamanho está errado, o tamanho que você digitou foi 2, mas foi criada uma matriz 3 x 3.

 

Então no calculo das coordenadas você está dividindo por 2, mas deveria ser por 3 que é o tamanho da matriz, aí as coordenadas seriam calculadas corretamente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...