Ir para conteúdo
Fórum Script Brasil
  • 0

Trocar Linhas Da Matriz Com Ponteiro


McBlade

Pergunta

Olá amigos...

Meu professor de programação disse que eu tenho que trocar a linha x pela linha y de uma matriz usando ponteiros... o problema é que eu não consegui pegar o esquema... Tentei de várias formas usando o operador de endereço & e o * mas nada...

Segue um pedaço do meu código (suponha que a matriz já esteja preenchida):

int *linha, matriz[4][4];
linha      = &matriz[4];
*matriz[2] = matriz[4];
*matriz[4] = linha;

O Dev-C diz que o tipo de operação entre "*matriz[2] = matriz[4];" não é válido... ouvi alguma coisa na sala sobre ponteiro de ponteiro... será que é isso? Ajudem por favorrrr!!!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Seria algo assim?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int valores[] = {1, 2, 3};
    int *linha1, *linha3, *temp;
    
    printf("Antes:\n");
    for (int i=0; i<3; i++)
        printf("%i\n", valores[i]);

    linha1 = &valores[0];
    linha3 = &valores[2];

    *temp = *linha1;
    *linha1 = *linha3;
    *linha3 = *temp;
        
    printf("\nDepois:\n");        
    for (int i=0; i<3; i++)
        printf("%i\n", valores[i]);
    
    system("pause");
}

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Seria algo assim?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int valores[] = {1, 2, 3};
    int *linha1, *linha3, *temp;
    
    printf("Antes:\n");
    for (int i=0; i<3; i++)
        printf("%i\n", valores[i]);

    linha1 = &valores[0];
    linha3 = &valores[2];

    *temp = *linha1;
    *linha1 = *linha3;
    *linha3 = *temp;
        
    printf("\nDepois:\n");        
    for (int i=0; i<3; i++)
        printf("%i\n", valores[i]);
    
    system("pause");
}
Abraços, Graymalkin
Não Graymalkin, é uma matriz
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int valores[4][4];
   
    printf("Antes:\n");
    for (int i=0; i<4; i++) {
        for (int j=0; j<4; j++) {
            valores[i][j] = i+j;
            printf("%i\n", valores[i][j]);
        }
        printf("\n");
    }
    // código em que o ponteiro trocaria as LINHAS da matriz
    system("pause");
}

Quero trocar linha 2 pela linha 4 e vice e versa com todas as suas colunas

L1C1 L1C2 L1C3 L1C4

L2C1 L2C2 L2C3 L2C4 <- Trocar L2

L3C1 L3C2 L3C3 L3C4

L4C1 L4C2 L4C3 L4C4 <- Por L4 e o conteudo da L2 vir para L4

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, eu fiz com um vetor porque era mais prático, mas a idéia é praticamente a mesma:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int valores[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
    int *linha1, *linha4;
    int temp;
    
    printf("Antes:\n");
    for (int i=0; i<4; i++)
    {
        for (int j=0; j<4; j++)
            printf("%i ", valores[i][j]);
        printf("\n");
    }

    linha1 = (int *)&valores[0];
    linha4 = (int *)&valores[3];
    
    for (int i=0; i<4; i++)
    {
        temp = *(linha1 + i);
        *(linha1 + i) = *(linha4 + i);
        *(linha4 + i) = temp;
    }
    
    printf("\nDepois:\n");
    for (int i=0; i<4; i++)
    {
        for (int j=0; j<4; j++)
            printf("%i ", valores[i][j]);
        printf("\n");
    }

    system("pause");
}

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

linha1 = (int *)&valores[0];
    linha4 = (int *)&valores[3];
    
    for (int i=0; i<4; i++)
    {
        temp = *(linha1 + i);
        *(linha1 + i) = *(linha4 + i);
        *(linha4 + i) = temp;
    }

Graymalkin eu só tenho uma dúvida quanto ao código, não dá pra fazer com o ponteiro passar todas as colunas de uma vez? tipo *Matriz[LINHA] = *pLinha (ponteiro de uma outra linha)?

Editado por McBlade
Link para o comentário
Compartilhar em outros sites

  • 0
linha1 = (int *)&valores[0];
    linha4 = (int *)&valores[3];
    
    for (int i=0; i<4; i++)
    {
        temp = *(linha1 + i);
        *(linha1 + i) = *(linha4 + i);
        *(linha4 + i) = temp;
    }

Graymalkin eu só tenho uma dúvida quanto ao código, não dá pra fazer com o ponteiro passar todas as colunas de uma vez? tipo *Matriz[LINHA] = *pLinha (ponteiro de uma outra linha)?

Eu também pensei nisso, mas parece que não. No caso, se você olhar o valor de &valores[0] vai ver sua posição em memória. Somando 1 à este valor você vai para o próximo elemento do array. Ou seja, cada elemento está em uma posição. Então imagino que não exista uma maneira de alterar todos de uma vez só sem ser com um loop. Mas, vale fazer uma pesquisa na net sobre isso, já que eu não sou nenhum mestre em C. :)

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Graymalkin eu fiz com o For e funcionou :D ... Agora é pesquisar pra ver se dá pra passar sem ele. Eu estava errando algumas coisas mais por que pedia pro usuário digitar qual linha desejava trocar mas esquecia-me que o índice começava do zero, por isso saia um número absurdo... enfim... valeu pela ajuda... até qualquer dia...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...