Jump to content

Matrizes dinâmicas


Recommended Posts

HYPER

Olá a todos,

Estou em Engenharia Informática e preciso de fazer um trabalho (que é o jogo do semáforo) onde tenho que fazer um tabuleiro (char) com alocação de memória.

Neste momento estou preso numa função em que tenho que adicionar uma linha ou uma coluna dependendo do que o utilizador quiser fazer.

Alguém me consegue ajudar?

Obrigado.

Link to post
Share on other sites
devair fernandes

  @Hyper     creio que você queira é inserir dados nas colunas de cada linha da matriz , e se você puder postar seu código que você já tenha feito sobre esse exercício , seria melhor para visualizarmos como está e em que podemos ajudar ,  mas aqui tens um exemplo dessas matriz de ponteiro com alocação de memória :

char         **PL;                     // essa é a matriz de ponteiro
                                       // e precisa alocar espaço na memória para ela
char Player = 'p';                     // uma variável simples
int TabNum[3][3];                      // uma matriz simples
char temp = '0';                       // outra variável simples
PL = (char**)malloc(3*sizeof(char));   // Aloca uma matriz de 3 linhas
scanf("%c", &temp);                    // pega um valor do teclado
while(char c = fgetc(stdin) != '\n');  // limpar o buffer do teclado
for(int x=0; x<3; x++)                 // loop para percorrer as linhas da matriz
{
  PL[x]=(char*)malloc(3*sizeof(char)); // Aloca 3 colunas da matriz
  for(int z=0; z<3; z++)               // loop para percorrer as colunas da matriz
  {
    PL[x][z] = Player;                 // insere dados na matriz
    printf("%c ",PL[x][z]);            // escreve o conteúdo de cada uma das posições da matriz
  }
  printf("\n");                        // pula para a linha de baixo na tela
}
                                       // no final antes de sair do programa 
                                       // precisa liberar os espaços alocados 
                                       // usando a função free(variavel) PL
free(PL);

 

Edited by devair fernandes
Link to post
Share on other sites
HYPER
Posted (edited)

Aquilo que eu quero fazer é:

- Tenho uma matriz dinâmica (envio o código com a estrutura de dados e duas funções - char **inicializa_tab(pItab x); -> inicializa o tabuleiro e - void escreveTabela(pItab x); -> que escreve o tabuleiro:

typedef struct infotab{
    int coluna,linha,ganhou,n_jogadas,termina,jogador;
    char **tab;

}Itab,*pItab;


char **inicializa_tab(pItab x) {
    int c, l;
    char **aux = NULL;

    aux =(char **) malloc(x->linha*sizeof(char *)); //linhas
    for (c=0; c<x->coluna; c++)
        aux[c]=(char *) malloc(x->coluna*sizeof(char)); //colunas

    for (l = 0; l < x->linha; l++) {
        for (c = 0; c < x->coluna; c++)
            aux[l][c] = '_';
    }

    return aux;

}
void escreveTabela(pItab x){
    int c, l;

    printf("\n");
    for(l=0; l<x->linha; l++){
        for(c=0; c<x->coluna; c++)
            printf(" %c ", x->tab[l][c]);
        putchar('\n');
    }
}

- Agora estou a fazer uma função onde o utilizador escolhe se quer aumentar uma linha a matriz ou uma coluna (envio o código que fiz, mas não funciona):

char **aumentaTabela(pItab y,char c){
    int i,j;
    char **aux = NULL;

    aux = y->tab;

    if(c == 'L') {
        aux = (char**) realloc(y->tab,sizeof (char*) * (y->linha + 1));
        for (i = 0; i < y->coluna; i++) {
            aux[i] = (char*) realloc(y->tab[i],(y->coluna) * sizeof(char));
        }

        for( j = 0;j<y->coluna;j++)
            aux[y->linha][j] = '_';
        y->linha += 1;

    }

    if(c == 'C'){
        //aux[0] = realloc();
        for (i = 0; i < y->coluna + 1; i++) {
            aux[i] = (char *) realloc(y->tab[i], (y->coluna + 1) * sizeof(char *));
        }

        for( j = 0;j<y->linha;j++)
            aux[j][y->coluna] = '_';
        y->coluna += 1;
    }

    return aux;
}

 

Edited by HYPER
Link to post
Share on other sites

@HYPER,

O link colocado no post anterior vai ter a uma pasta vazia na Google Drive. Mas mesmo que tivesse conteúdo, a forma correcta de utilizar este fórum para obter apoio passa por formular uma questão, o que implica explicar o funcionamento pretendido e o que está na realidade a acontecer (ou, à falta de melhor, o erro emitido pelo compilador). A isto devem acrescentar-se excertos de código relevantes, não propriamente o código de todo o projecto.

Posto isto, o problema foi resolvido? Se não foi, qual o problema neste momento?

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.