Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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)+(ib)+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)vr); 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)+(iv)+j); } }}
alguem ajuda??
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
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 :)
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:
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;
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.
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; }}}