RVPF Posted January 1, 2016 at 05:40 PM Report Share #591177 Posted January 1, 2016 at 05:40 PM (edited) Boas pessoal, estou a fazer um trabalho para a escola e preciso da vossa ajuda, o programa é para trabalhar com matrizes (inserir, apagar, testar caminhos) e só consegui criar a matriz com esta notação só que preciso de conseguir usar algo como esta notação tabuleiro[linha][coluna]. Alguem me consegue dar uma ajuda? Desculpem ser tão vago mas estou a começar e este trabalho está a chegar ao fim do prazo e nao arranjo solução, tudo o que tento do outro jeito não funciona por falta de espaço em memória e ao fazer o malloc dá erro. Este código faz o que pretendo mas com um código diferente: #include <stdio.h> #include <stdlib.h> void imprimirTabuleiro(char* tabuleiro, int linhas, int colunas); void preencherTabuleiro(char* tabuleiro, int linhas, int colunas); int main() { int linhas=0, colunas=0; char* tabuleiro=NULL; printf("Introduza o numero de linhas: "); scanf("%d",&linhas); printf("Introduza o numero de colunas: "); scanf("%d",&colunas); tabuleiro = malloc(sizeof(char) * linhas * colunas); preencherTabuleiro(tabuleiro, linhas, colunas); imprimirTabuleiro(tabuleiro, linhas, colunas); return 0; } void imprimirTabuleiro(char* tabuleiro, int linhas, int colunas) { int linha=0, coluna=0; for(linha=0; linha<linhas; linha++) { for (coluna=0; coluna<colunas; coluna++) { printf("%d ", *(tabuleiro + (linha * colunas) + coluna)); /** 0*5=0 -> primeira linha + posição **/ } printf("\n "); } } void preencherTabuleiro(char* tabuleiro, int linhas, int colunas) { int linha=0, coluna=0,i=0; for(linha=0; linha<linhas; linha++) { for (coluna=0; coluna<colunas; coluna++) { *(tabuleiro+(linha*colunas)+coluna)=i; i++; } printf("\n "); } } Desde já obrigado Edited January 1, 2016 at 11:42 PM by thoga31 GeSHi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 1, 2016 at 09:04 PM Report Share #591183 Posted January 1, 2016 at 09:04 PM como deves ter percebido, essa notação não está errada. no entanto, se realmente pretendes aceder aos elementos da metrix de forma dos dois redireccionamentos, o mais fácil seria (por ventura): #define NLINHAS 20 #define NCOLUNAS 20 char** tabuleiro; tabuleiro = malloc(sizeof(char*) * NLINHAS); for (int linha = 0; linha < NLINHAS; linha++) { tabuleiro[linha] = malloc(sizeof(char) * NCOLUNAS); } printf("celula 10(linha)x5(coluna) : %d\n", tabuleiro[10][5]); // NOTA : não esquecer do ciclo de libertação de memória 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
RVPF Posted January 2, 2016 at 01:08 PM Author Report Share #591197 Posted January 2, 2016 at 01:08 PM Sim eu percebi que a notação estava funcional não tinha era a certeza se era uma linguagem correcta para trabalhar com matrizes. foi mesmo a única maneira que consegui e a que acho mais simples, o único problema é que não sei utilizar quando preciso de algo do tipo tabuleiro[3][2]=qquercoisa Nesse método (o que postou) tenho dificuldade em perceber que argumentos tenho de passar para trabalhar a matriz noutra função e mais uma duvida com esse método tendo o limite com o define a matriz continua a ser considerada dinâmica? Desculpa a noobice e obrigado pela ajuda. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 2, 2016 at 02:21 PM Report Share #591201 Posted January 2, 2016 at 02:21 PM (edited) O tipo de dados que passas para uma funcao e o tipo de dados da declaracao Agora, se e dinâmica? Depende de certa forma, uma estrutura alocada será sempre estática, a não ser que essa memória seja manipulada através do realloc, permitindo fazer o "redimensionamento". por outro lado, existe aquilo a que se chama de estruturas dinâmicas que fica longe deste tipo de implementação. por isso, chamar esta implementação de estática ou dinâmica, é quase uma questão de gosto. para mim, é considerado uma implementação estática caso não seja uma estrutura em que o seu redimensionamento não necessita de passar pelo realloc. Edited January 2, 2016 at 02:47 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
RVPF Posted January 2, 2016 at 06:12 PM Author Report Share #591215 Posted January 2, 2016 at 06:12 PM Muito obrigado pela ajuda, com o código dado acima e com a matéria que aqui tenho consegui fazer o que queria, deixo aqui o código para se fizer jeito a alguém #include <stdio.h> #include <stdlib.h> void imprimirTabuleiro (char** ppTabuleiro, int linhas, int colunas); void inserir_na_matriz (char** ppTabuleiro, int linhas, int colunas); void** criamatrix(int linhas, int colunas); int main() { char** tabuleiro=NULL; int linhas = 0, colunas=0; printf("Introduza o numero de linhas: "); scanf("%d",&linhas); printf("Introduza o numero de colunas: "); scanf("%d",&colunas); tabuleiro=criamatrix(linhas, colunas); inserir_na_matriz(tabuleiro, linhas, colunas); imprimirTabuleiro (tabuleiro, linhas, colunas); return 0; } void** criamatrix(int linhas, int colunas) { char** ppaux = NULL; ppaux =(char**) malloc(sizeof(char*) * linhas); int i=0,j=0; for (i = 0; i < linhas; i++) { *(ppaux+i)=(char*)malloc(colunas*sizeof(char)); for(j=0;j<colunas;j++){ *(*(ppaux+i)+j)='a'; } } return ppaux; } void inserir_na_matriz (char** ppTabuleiro, int linhas, int colunas) { int auxLinhas = 0, auxColunas = 0; for(auxLinhas=0; auxLinhas<linhas; auxLinhas++) { for (auxColunas=0; auxColunas<colunas; auxColunas++) { ppTabuleiro[auxLinhas][auxColunas]='a'; } } } void imprimirTabuleiro (char** ppTabuleiro, int linhas, int colunas) { int auxLinhas = 0, auxColunas = 0; printf("\n"); for (auxLinhas = 0; auxLinhas < linhas; auxLinhas++) { for (auxColunas = 0; auxColunas < colunas; auxColunas++) { printf (" %c", ppTabuleiro[auxLinhas][auxColunas]); } printf("\n"); } } Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now