[1] Comentário enviado por mbmaciel em 05/10/2009 - 10:07h
Para funcionar corretamente um pequeno ajuste, depois da linha repeat.
...
repeat
qtde:=0;
writeln(' 1 - Inserir ');
...
Assim o procedure que calcula a media vai funcionar corretamente.
Abraço!
[2] Comentário enviado por joserribeirojuni em 05/10/2009 - 10:51h
Nos testes que eu fiz aqui, isso não foi necessário, mas se fosse pra zerar "qtde" poderia colocar fora do repeat senão fica atribuindo, sem necessidade, enquanto passar pelo laço.
Procedure Cria_lista(Var Lista: tp_lista);
Begin
new(Lista.primeiro);
Lista.ultimo:=Lista.primeiro;
Lista.ultimo^.prox:=nil;
End;
{Verifica se a lista esta vazia}
Function Vazia(Lista: tp_lista): boolean;
Begin
If Lista.ultimo=Lista.primeiro then
Vazia:=true
else
Vazia:=false;
End;
{Insere item na lista}
Procedure Insere (x: tp_pessoa; var Lista: tp_lista);
Begin
new(Lista.ultimo^.prox);
Lista.ultimo:=Lista.ultimo^.prox;
Lista.ultimo^:=x;
Lista.ultimo^.prox:=nil;
End;
{Encontra o endereco de um item a partir do seu codigo}
Function Localiza (cod: integer; Lista: tp_lista): ponteiro;
Var
paux: ponteiro; {ou paux: ^tp_pessoa;}
Begin
paux:=Lista.primeiro;
while ((paux^.prox<>nil)and(paux^.prox^.chave<>cod)) do
paux:=paux^.prox;
Localiza:=paux;
End;
{ Remove item da lista
Obs.: o item a ser retirado e o seguinte ao apontado por p }
Procedure Remove (p: ponteiro; Var Lista: tp_lista);
Var
q: ^tp_pessoa;
Begin
if ((Vazia(Lista)) or (p^.prox=nil)) then
writeln ('Erro: lista vazia ou item inexistente.')
else
begin
q:=p^.prox;
p^.prox:=q^.prox;
if (p^.prox=nil) then
Lista.ultimo:=p;
dispose(q);
end;
End;
{ Imprime os itens da lista }
Procedure Imprime (Lista: tp_lista);
Var
aux: ponteiro; {ou aux: ^tp_pessoa;}
i: integer;
Begin
i:=1;
aux:=Lista.primeiro^.prox;
while (aux<>nil) do
begin
writeln ('Codigo do item ',i,': ',aux^.chave);
writeln ('Nome do item ',i,': ',aux^.nome);
writeln ('Idade do item ',i,': ',aux^.idade);
i:=i+1;
aux:=aux^.prox;
writeln;
end;
End;
Begin
clrscr;
Cria_lista(Lista_real);
repeat
writeln ('Escolha uma opcao: ');
writeln (' 1 - Verifica se a lista esta vazia;');
writeln (' 2 - Insere item na lista;');
writeln (' 3 - Remove itens da lista;');
writeln (' 4 - Imprime itens da lista;');
writeln (' 0 - Sair;');
readln(op);
case op of
'1': begin
if Vazia(Lista_real) then
writeln ('Lista vazia!')
else
writeln ('Lista nao vazia!');
end;
'2': begin
write ('Digite um codigo para a pessoa: ');
readln(pessoa_aux.chave);
write ('Digite o nome da pessoa: ');
readln(pessoa_aux.nome);
write ('Digite a idade da pessoa: ');
readln(pessoa_aux.idade);
Insere(pessoa_aux, Lista_real);
end;
'3': begin
write ('Remoção com sucesso: ');
readln (codigo);
y:=Lista_real.Primeiro^.prox^.prox;
z:=y;
Lista_real.ultimo^.prox:=z;
codigo:=Lista_real.Primeiro^.chave;
p:=Localiza(codigo, Lista_real);
if p=nil then
writeln ('Remocao impossivel, codigo nao cadastrado!')
else
Remove(p, Lista_real);
end;
'4': begin
Imprime(Lista_real);
end;
else writeln ('Opcao invalida.');
end;
until op='0';
end.
Procedure Cria_lista(Var Lista: tp_lista);
Begin
new(Lista.primeiro);
Lista.ultimo:=Lista.primeiro;
Lista.ultimo^.prox:=nil;
End;
{Verifica se a lista esta vazia}
Function Vazia(Lista: tp_lista): boolean;
Begin
If Lista.ultimo=Lista.primeiro then
Vazia:=true
else
Vazia:=false;
End;
{Insere item na lista}
Procedure Insere (x: tp_pessoa; var Lista: tp_lista);
Begin
new(Lista.ultimo^.prox);
Lista.ultimo:=Lista.ultimo^.prox;
Lista.ultimo^:=x;
Lista.ultimo^.prox:=nil;
End;
{Encontra o endereco de um item a partir do seu codigo}
Function Localiza (cod: integer; Lista: tp_lista): ponteiro;
Var
paux: ponteiro; {ou paux: ^tp_pessoa;}
Begin
paux:=Lista.primeiro;
while ((paux^.prox<>nil)and(paux^.prox^.chave<>cod)) do
paux:=paux^.prox;
Localiza:=paux;
End;
{ Remove item da lista
Obs.: o item a ser retirado e o seguinte ao apontado por p }
Procedure Remove (p: ponteiro; Var Lista: tp_lista);
Var
q: ^tp_pessoa;
Begin
if ((Vazia(Lista)) or (p^.prox=nil)) then
writeln ('Erro: lista vazia ou item inexistente.')
else
begin
q:=p^.prox;
p^.prox:=q^.prox;
if (p^.prox=nil) then
Lista.ultimo:=p;
dispose(q);
end;
End;
{ Imprime os itens da lista }
Procedure Imprime (Lista: tp_lista);
Var
aux: ponteiro; {ou aux: ^tp_pessoa;}
i: integer;
Begin
i:=1;
aux:=Lista.primeiro^.prox;
while (aux<>nil) do
begin
writeln ('Codigo do item ',i,': ',aux^.chave);
writeln ('Nome do item ',i,': ',aux^.nome);
writeln ('Idade do item ',i,': ',aux^.idade);
i:=i+1;
aux:=aux^.prox;
writeln;
end;
End;
Begin
clrscr;
Cria_lista(Lista_real);
repeat
writeln ('Escolha uma opcao: ');
writeln (' 1 - Verifica se a lista esta vazia;');
writeln (' 2 - Insere item na lista;');
writeln (' 3 - Remove itens da lista;');
writeln (' 4 - Imprime itens da lista;');
writeln (' 0 - Sair;');
readln(op);
case op of
'1': begin
if Vazia(Lista_real) then
writeln ('Lista vazia!')
else
writeln ('Lista nao vazia!');
end;
'2': begin
write ('Digite um codigo para a pessoa: ');
readln(pessoa_aux.chave);
write ('Digite o nome da pessoa: ');
readln(pessoa_aux.nome);
write ('Digite a idade da pessoa: ');
readln(pessoa_aux.idade);
Insere(pessoa_aux, Lista_real);
end;
'3': begin
write ('Remoção com sucesso: ');
readln (codigo);
y:=Lista_real.Primeiro^.prox^.prox;
z:=y;
Lista_real.ultimo^.prox:=z;
codigo:=Lista_real.Primeiro^.chave;
p:=Localiza(codigo, Lista_real);
if p=nil then
writeln ('Remocao impossivel, codigo nao cadastrado!')
else
Remove(p, Lista_real);
end;
'4': begin
Imprime(Lista_real);
end;
else writeln ('Opcao invalida.');
end;
until op='0';
end.
Eu postei esse programa enquanto fazia faculdade, faz muito tempo, infelizmente não consigo te ajudar com isso hoje.