Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Luan Bresolla

C matriz trocando valores numericos

Recommended Posts

Fala galera, estou tentando fazer uma matriz trocar posições.

Isso é o que eu fiz até agora, não está funcionando, se alguém puder me falar onde está errado minha lógica, obrigado desde já.

MATRIZ.png

MATRIZ2.png

MATRIZ3.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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

12 horas atrás, isrnick disse:

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

 

Editado por Simon Viegas
Corrigir citação
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
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 4

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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)

 

 

Editado por isrnick
  • Curtir 3
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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.

Editado por isrnick
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

MATRIZ4.thumb.png.560775ff4ccde99a8b004ff4c6b7efc4.pngCara, 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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, é por causa dessa historia de começar em 0 acabei confundido, obrigado, qualquer coisa volto a incomodar haha.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×