• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

sirMk

Ajuda em matriz

6 mensagens neste tópico

Eu tenho que criar uma matriz em c com o tamanho dado pelo utilizador. e gostava de saber como faze-lo e que esta a dar-me erro da maneira que estou a fazer.

criar matriz normalmente: tabuleiro[8][8];

printf("Digite o tamanho do tabuleiro: ");

scanf("%i",&tamanho);

agora queria criar uma matriz com os valores introduzidos tipo tabuleiro[tamanho][tamanho], mas penso que tenha de ser com ponteiros e essa a minha duvida.

alguem pode me ajudar?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes definir o tamanho de um array dessa forma. As variáveis têm que estar definidas à partida. Se queres definir uma estrutura com um tamanho escolhido pelo utilizador tens que usar memória dinâmica (malloc, calloc, free).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, para poderes fazer uma matriz de um tamanho dado pelo utilizador em C, tens que alocar essa memória dinâmicamente, usando por exemplo a função malloc do stdlib.h.

Por exemplo, para criares apenas um vector de inteiros com o tamanho especificado pelo utilizador farias:

int *linha;
printf("Digite o tamanho da linha: ");
scanf("%i",&tamanho);
linha=(int*)malloc(sizeof(int)*tamanho);

Para o teu caso, terias que fazer uma vector de vectores, por isso terias que alocar memória para cada um deles.

int **tabuleiro;
printf("Digite o tamanho da linha: ");
scanf("%i",&tamanho);
tabuleiro=(int**)malloc(sizeof(int*)*tamanho);
for(i=0;i<tamanho;i++) {
  tabuleiro[i]=(int*)malloc(sizeof(int)*tamanho);
}

A seguir podes aceder ao tabuleiro normalmente como se fosse uma matriz.

Aconselho-te a leres mais sobre memória dinâmica e apontadores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveres um compilador de C99, podes fazer o que queres.

#include <stdio.h>

#ifdef __STDC__
#  ifdef __STDC_VERSION__
#    if __STDC_VERSION__ < 199901L
#      error Must compile with C99
#    endif
#  else
#    error Must compile with C99
#  endif
#else
#  error Must compile with C99
#endif

int main(void) {
  int size;

  printf("Enter size of matrix:\n");
  if (scanf("%d", &size) == 1) {
    int row, col;
    int matrix[size][size];

    for (row=0; row<size; row++) {
      for (col=0; col<size; col++) {
        matrix[row][col] = (row+1) * (col+1);
      }
    }
    for (row=0; row<size; row++) {
      for (col=0; col<size; col++) {
        printf("%d\t", matrix[row][col]);
      }
      puts("");
    }
  }
  return 0;
}

Edit:

No codepad, os #ifs impedem a compilação do código :|

Mas, mesmo sem eles, o compilador porta-se como se fosse um compilador de C99.

http://codepad.org/ZD2bxoVg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadão vou fazer isso criando uma função esta:

//cria matriz dinamica com floats
float **CriaF(int colunas, int linhas){
    float **image2;
    int    i;
    
    image2 = (float **) calloc(linhas,sizeof(float*));
    
    for(i=0; i<linhas; i++)
        image2[i] = (float *) calloc(colunas,sizeof(float));
    return image2;
}

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem aplicado  :)

Quando já não precisares do tabuleiro lembra-te de libertar a memória deste, usando um free para cada malloc que fizeste.

for(i=0;i<linhas;i++) {
  free(tabuleiro[i]);
}
free(tabuleiro);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora