Trabalho com Passagem de Parâmetros
-
Agora você vai fazer um programa que
manipula mais de uma lista.
-
O programa fará isto com um único
conjunto de funções e passagem das diversas listas como parâmetros.
-
Como aplicação imaginemos um
sistema de contabilidade simples.
-
Você vai ter um Plano de Contas constituído
por duas listas: débitos e créditos.
-
O mesmo conjunto de funções
(que você já implementou) vai poder ser utilizado para isso:
você somente precisa ampliar o conjunto de parâmetros da função
para passar por referência também a lista que você quer
alterar.
-
A passagem de parâmetro da lista
deve ser por referência porque você deseja que as alterações
sejam persistentes.
Modelagem de um Lançamento
-
Cada lista de débitos ou créditos
é constituida de um lançamento. O lançamento possui:
-
Um valor real (positivo).
-
Um nome, por exemplo “pagar proteção
à Mafia”
tipo Lancamento {
caracter
*nome; “ponteiro para char alocado no heap“
real
valor;
};
Modelagem de um tipo Lista para Débitos
ou Créditos
Pseudo-código:
constantes Maxlista = 100;
tipo ListaContabil {
Lancamento
dados[Maxlista]; “ Vetor de Estrutura Lançamento
“
inteiro
ultimo;
};
Importante: Observe que criando
um vetor de lancamentos, você não vai estar reservando memória
para os nomes destes, pois o campo nome é só ponteiros. Lembre-se
de alocar.
Usando (pseudo código)
ListaContabil debitos, creditos;
-
Passe estas variáveis como parâmetro
por referência:
adiciona(&debitos, nomeLanc,
valorLanc)
Inteiro FUNÇÃO adiciona(ListaContabil
*plano,
caracter *nome,
real valor)
Importante: nome é passado
como ponteiro para caracter. Use um buffer global para ler o nome do lancamento
do usuário.
Modelagem da Lista
![](ponteiros2.gif)
Usando (Código C)
-
Referencie diferentemente se estiver usando
ponteiros para a lista ou a lista diretamente:
ListaContabil debitos, creditos;
debitos.dados[2].valor = 5.0;
strcpy(debitos.dados[2].nome,
buffer);
Suponha: ListaContabil
*ponteiro e
ponteiro = &debitos;
ponteiro->dados[2].valor = 5.0;
strcpy(ponteiro->dados[2].nome,
buffer);