Ir ao conteúdo
  • Cadastre-se

C Como rotacionar uma matriz em C?


Diovani Facco

Posts recomendados

@Diovani Facco apenas preste atenção ao que acontece com cada elemento e faça isso num loop.

 

note que se não for 3x3 tem que rotacionar as matrizes internas tambem. Basta um loop de fora para dentro levando os elementos um certo numero de casas no sentido horario ou anti horario

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

@arfneto

44 minutos atrás, arfneto disse:

@Diovani Facco apenas preste atenção ao que acontece com cada elemento e faça isso num loop.

 

note que se não for 3x3 tem que rotacionar as matrizes internas tambem. Basta um loop de fora para dentro levando os elementos um certo numero de casas no sentido horario ou anti horario

Há sim, ai só somando ou diminuindo um da posição da matriz. Muito obrigado

Link para o comentário
Compartilhar em outros sites

@Diovani Facco Então é o caso mais simples. Tanto faz se a matriz é quadrada ou não. Todos vão "girar" um certo número de posições para um certo lado. Não sei se tem um enunciado ou algo mais objetivo, já que uma pergunta óbvia é se precisa preservar a matriz original.

 

É óbvio que precisa mostrar o antes e o depois, então imagine duas funções
 

    int mostra( char* matriz, unsigned ordem, const char* tit);
    int gira( char* matriz, unsigned ordem, int giro);

 

onde 

  • mostra() mostra a matriz na tela, tit é um título para poder usar uma linha só.
  • gira() gira a matriz para a direita se giro for positivo e para a esquerda se for negativo.
  • ordem claro é a medida lateral da matriz, já que parece que é sempre quadrada

em gira() você aloca um vetor de ordem*ordem e copia os caras lá. Faz o giro salvando o primeiro cara e depois copia tudo de volta nas novas posições. É mais fácil que ficar controlando os índices.

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

@arfneto

Fiz esse for pra ir girando uma matriz 7x7, porém, ele funciona uma vez, e já fica todo bugado, alguns números somem, ou as vezes não giram com os outros...

for(i = 0; i < 7; i++){
        for(j = 0; j < 7; j++){
            matriz2[i][j] = matriz[i][j];
        }
    }

    for(i = 0; i < 7; i++){
        for(j = 0; j < 7; j++){
            
            if(i == 6){
                matriz2[i][j+1] = matriz[i][j];
            }
            if(j == 0){
                matriz2[i+1][j] = matriz[i][j];
            }
        
            if(i == 0){
                matriz2[i][j-1] = matriz[i][j];
            }
            if(j == 6){
                matriz2[i-1][j] = matriz[i][j];
            }      
        }
    }

 

Link para o comentário
Compartilhar em outros sites

poste um programa mínimo mas compilável, completo.

 

16 horas atrás, Diovani Facco disse:

Fiz esse for pra ir girando uma matriz 7x7, porém, ele funciona uma vez, e já fica todo bugado, alguns números somem, ou as vezes não giram com os outros

 

 

Sugiro fazer exatamente como eu te expliquei. É a maneira comum. E é comum porque é mais simples, mais segura e mais portável.

 

 

Link para o comentário
Compartilhar em outros sites

@Diovani Facco Da mesma maneira que em qualquer outra linguagem. Por exemplo, aplique versores. Mova-se, pelos elementos na matriz, nas 4 direções do enunciado e exiba seus valores durante a iteração. Depois será mais fácil para programar a troca de valores. Programe os versores como valores de uma matriz e itere sobre eles com laço externo enquanto um interno acrescenta um versor ao índice da matriz a cada iteração, em específico, 2 acréscimos por versor. A matriz de versores tem 4 elementos: (0, 1)(1, 0)(0, -1)(-1, 0), respectivamente para o sentido horário.

 

Se tem o mínimo de conhecimento de vetores no plano R2, sabe que estou certo e que os respectivos versores são: direta, baixo, esquerda, cima, ou seja: 2d, 2b, 2e, 2c formam o contorno dum arranjo 3x3.

[:)

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