Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

janielton

passar matriz bidimensional para funcao

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.