segunda-feira, 16 de novembro de 2009

função que soma duas matrizes esparsas...

void soma(tipo_nodo**l1,tipo_nodo **l2,tipo_nodo **r ,int linhas, int colunas)
{
tipo_nodo *aux1,*aux2;
int l,c,aux;
aux1= *l1;
aux2= *l2;
for(l=0;llin==l && aux1->col==c)//testamos se a posição da matriz que estamos acessando esta na lista
{
if(aux2!=NULL)//se tiver na lista, testamos se existe uma segunda lista caso existir, testamos também se a osição da matriz que estamos acessando esta na segunda lista
{
if(aux2->lin==l && aux2->col==c)
{
aux=aux1->dado + aux2->dado;//fazemos a soma das duas posições
if(aux!=0)
insere(r,aux,l,c);//inserimos numa matriz resposta
aux1=aux1->prox;//toda vez que conseguimos acessar uma posição que tenha na lista, temos que passar para a proxima posição.
aux2=aux2->prox;
}
else//caso a posição da matriz não esteja na segunda lista, consideramos que ela é 0
{
aux=aux1->dado + 0;
insere(r,aux,l,c);
aux1=aux1->prox;
}
}
else
{
aux=aux1->dado + 0;
insere(r,aux,l,c);
aux1=aux1->prox;
}
}
if(aux2!=NULL) //se cair neste if, é porque o primeiro não existe, então somamos a segunda matriz com 0
{
if(aux2->lin==l && aux2->col==c)
{
aux = 0 + aux2->dado;
insere(r,aux,l,c);
aux2=aux2->prox;
}
}

}
else
{
if(aux2!=NULL)
{
if(aux2->lin==l && aux2->col==c)
{
aux = 0 + aux2->dado;
insere(r,aux,l,c);
aux2=aux2->prox;
}
}
}
}
}
}

Nenhum comentário:

Postar um comentário