janielton 0 Denunciar post Postado Julho 9, 2007 Estou tendo dificuldade para elaborar essa parte de um trabalho. Nele é necessario varias vezes fazer o escalonamento de varias matrizes..entao queria criar uma funçao onde passamos uma matriz com os valores da matriz..e no final devolve a matriz ja escalonada..fiz esse codigo mas nao sei onde esta o erro: na hora de imprimir ele pega so o primeiro valor digitado e vai incrementando o valor e nao a memoria! #include <stdio.h>#include <stdlib.h>void preenxer(int **vet, int a, int b){int i,j;for (i=0;i<a;i++){ for (j=0;j<b;j++) { printf("%d elemento da %d linha", i+1,j+1); scanf("%d",*(vet)+(i*b)+j); } }}int main(){ int v,r,i,j; int *vet; printf("numero de variaveis?"); scanf("%d",&v); printf("numero de restriçoes"); scanf("%d",&r); vet = (int*) malloc(sizeof(int)*v*r); preenxer(&vet,r,v); printf("\n"); for (i=0;i<r;i++) { for (j=0;j<v;j++) { printf("%d elemento da %d linha: %d\n", i+1, j+1, *(vet)+(i*v)+j); } }} alguem ajuda?? Compartilhar este post Link para o post Compartilhar em outros sites
Ricardo Lima (Aram) 0 Denunciar post Postado Julho 11, 2007 Não testei o seu código... mãs.... 1. No main você cria uma matriz UNIdimensional (int *) enquanto o método recebe uma matriz BIdimensional (int **)... 2. Documente a função preenxer (sic)... Vou começar pelo main, depois vou pra função preenxer. Vou assumir que você quer uma matriz bidimensional. Vamos ao código... #include <stdio.h>#include <stdlib.h>/* Eu nao soube o que representava linhas e colunas e acabei modificando o código de um *//* jeito que alterou sua lógica toda... seja mais informativo com seu código... *//* Recebe uma matriz mat e um inteiro a que significa ?? e outro inteiro b ?? e faz ?? com mat. *//* DOCUMENTA ISSUUUUUUUUUU PORR#@%#$ */void preenxer(int **vet, int a, int b);int main(){ int l,c,i,j; /* Codigo antigo: int *vet; */ /* deixarei vet, mas seria na verdade mat (matriz pelo jeito) */ int **vet; printf("numero de linhas: "); scanf("%d",&l); printf("numero de colunas: "); scanf("%d",&c); /* Nao entendi bem o problema entao estou supondo que a matriz tem l linhas e c colunas */ vet = (int**) malloc(sizeof(int*) * l); /* Cada linha de vet é um ponteiro. Um ponteiro para uma array. Teremos l arrays de c colunas cada. */ /* Primeiro inicializamos só as linhas. Agora cada linha de vet será inicializada, pois cada uma terá que ter seu espaço alocado */ for (i = 0; i < l; i++) { vet[i] = (int *) malloc(sizeof(int) * c); /* cada linha de vet recebe um ponteiro para um array de c colunas */ /* prefiro a notação de vetor do q aritimética de ponteiros vet[i] eh a mesma coisa que *(vet + i) */ } /* codigo antigo: preenxer(&vet,r,v); -> vet já é do tipo int** não passe o end dele. */ preenxer(vet, l, c); printf("\n"); for (i=0;i<l;i++) { for (j=0;j<c;j++) { /*Notacao de vetor!*/ printf("%d elemento da %d linha: %d\n", i+1, j+1, vet[i][j]); } }}void preenxer(int **vet, int a, int b){int i,j, aux;for (i=0;i<a;i++){ for (j=0;j<b;j++) { printf("%d elemento da %d linha: ", i+1,j+1); /* Nao consegui colocar direto no array entaum usei ese aux aqui ehehehe */ scanf("%d", &aux); /* Notação de array eh mais simples, e uma vez que foram inicializados com malloc, o array só se perde depois que derem um free nele. */ vet[i][j] = aux; }}} Compartilhar este post Link para o post Compartilhar em outros sites
janielton 0 Denunciar post Postado Julho 11, 2007 valeu!! hoje pela manha tinha encontrado mais ou menos isso dai..a alocaçao primeiro das linhas e depois das colunas..ai estava a "grande sacada"! :D Compartilhar este post Link para o post Compartilhar em outros sites
Ricardo Lima (Aram) 0 Denunciar post Postado Julho 11, 2007 sim era a grande sacada, mas toma cuidado com as dimensoes dos arrays que você tava trabalhando e sempre que possivel use a notação de array pra facilitar a vida :) Compartilhar este post Link para o post Compartilhar em outros sites
janielton 0 Denunciar post Postado Julho 11, 2007 sim era a grande sacada, mas toma cuidado com as dimensoes dos arrays que você tava trabalhando e sempre que possivel use a notação de array pra facilitar a vida :)nao entendi a sua colocacao..o que fiz de errado ai alem da falta de comentarios?? :unsure: Compartilhar este post Link para o post Compartilhar em outros sites
Ricardo Lima (Aram) 0 Denunciar post Postado Julho 11, 2007 No seu código, a funcao preenxer recebe um int** void preenxer(int **vet, int a, int b); mas no main você cria um int* int* vet; e depois manda o endereço de vet para preenxer.... vet tem uma linha apenas... e não n linhas... você já teria que ter criado no main um int** int** vet; Compartilhar este post Link para o post Compartilhar em outros sites
noone 0 Denunciar post Postado Novembro 10, 2008 Ta errado isso daí: for (i=0;i<l;i++) { for (j=0;j<c;j++) { /*Notacao de vetor!*/ printf("%d elemento da %d linha: %d\n", i+1, j+1, vet[i][j]); } } Tem que saber qual contador representa o que. i representa as linhas e j as colunas. Estás escrevendo 'linha' elemento da 'coluna' linha: valor. Compartilhar este post Link para o post Compartilhar em outros sites