matrizes esparsas em C

guxtin

Membro
Ae galera, dá uma ajuda aí, por favor!
Tenho um trabalho da faculdade em q devo implementar matrizes esparsas em C por listas encadeadas e depois criar uma função que imprima a matriz, outra que Leia a matriz de um arquivo, outra que apague os elementos da matriz, outra que Some duas matrizes e outra que multiplique.
Já criei a estrutura, a função q imprime e uma função q insere um elemento (célula) na matriz. Criei também uma função que lê a matriz do arquivo e outra que apaga.
Porém estou tendo 2 problemas
um é na função que lê a matriz do arquivo.. quando coloco ela na main direto:

FILE *arq;
Apontador Aux = Matriz.Primeiro;
char NomedoArquivo [40];

printf("Digite o nome do arquivo:\n");
scanf("%s",NomedoArquivo);


arq = fopen(NomedoArquivo,"r");
fscanf(arq,"%d, %d",&Matriz.tamlinha,&Matriz.tamcoluna);

InicializaMatriz(&Matriz);

while (!feof(arq))
{
fscanf(arq,"%ld, %ld, %lf",&Aux->Linha,&Aux->Coluna,&Aux->Valor);
Insere(Aux->Linha, Aux->Coluna, Aux->Valor, &Matriz);
}
fclose(arq);


ela funciona perfeitamente... mas quando coloco ela como uma função separada:

void LeMatriz (TipoMatriz *M)
{
FILE *arq;
Apontador Aux = M->Primeiro;
char NomedoArquivo [40];

printf("Digite o nome do arquivo:\n");
scanf("%s",NomedoArquivo);


arq = fopen(NomedoArquivo,"r");
fscanf(arq,"%d, %d",&M->tamlinha,&M->tamcoluna);

InicializaMatriz(M);

while (!feof(arq))
{
fscanf(arq,"%ld, %ld, %lf",&Aux->Linha,&Aux->Coluna,&Aux->Valor);
Insere(Aux->Linha, Aux->Coluna, Aux->Valor, M);
}
fclose(arq);

}


ela fica dando segmentation fault!
Não sei pq :/ e já está me dando dor de cabeça isso rsrs


o outro problema é na função Apaga.. ela apaga direito certo algumas matrizes de arquivos.. mas tem arquivos que lê, cria a matriz, apaga ela, mas na hora de imprimir tudo zero, dá erro tb
sad.gif





será q o problema de funcionar na main e não como função separada está nas funções
InicializaMatriz(M);
Insere(Aux->Linha, Aux->Coluna, Aux->Valor, M);
?
Pq na main eu passo a matriz como &Matriz e aí fora não
mas já tentei de tudo.. passar com & , sem &, com * e sem tb na função e nda dá certo! rsrs


alguém ajude por favor heh
vlw galera!
 
Back
Topo