Ir ao conteúdo
  • Cadastre-se

problema lógica


Arthur2010

Posts recomendados

Olá amigos, to com um probleminha de lógica aqui, é o seguinte:

o programa exibe uma mensagem na tela para o usuário fazer uma escolha (s/S) para sim, caso ele digite (n/N) o programa deveria cancelar a ação do usuario,

aqui está a parte do código


readln(codPesq);
x:= false;
i:= 1;
while (i<6) and(x=false) do
BEGIN
if codPesq = vetProdutos[i].rescod then
BEGIN
writeln('deseja excluir mesmo ? S/s');
readln(resp);
END;
if(resp='S') or(resp='s') then
BEGIN
vetProdutos[i].rescod := '';
vetProdutos[i].desc := '';
vetProdutos[i].dat_ent := '';
vetProdutos[i].qtd := 0;
x:= true; {pra cair fora do laço}
writeln('Produto eliminado');
END;
if (resp='N') or (resp='n') then
BEGIN
{não sei como fazer esta parte}
END;
i:=i+1;
END;
if x=false then writeln('Erro! Codigo invalido');

Resumindo: o usuário digita S/s pra confirmar a exclusão, e N/n pra desistir de excluir

Grato!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá amigos, to com um probleminha de lógica aqui, é o seguinte:

o programa exibe uma mensagem na tela para o usuário fazer uma escolha (s/S) para sim, caso ele digite (n/N) o programa deveria cancelar a ação do usuario,

aqui está a parte do código


readln(codPesq);
x:= false;
i:= 1;
while (i<6) and(x=false) do
BEGIN
if codPesq = vetProdutos[i].rescod then
BEGIN
writeln('deseja excluir mesmo ? S/s');
readln(resp);
END;
if(resp='S') or(resp='s') then
BEGIN
vetProdutos[i].rescod := '';
vetProdutos[i].desc := '';
vetProdutos[i].dat_ent := '';
vetProdutos[i].qtd := 0;
x:= true; {pra cair fora do laço}
writeln('Produto eliminado');
END;
if (resp='N') or (resp='n') then
BEGIN
{não sei como fazer esta parte}
END;
i:=i+1;
END;
if x=false then writeln('Erro! Codigo invalido');

Resumindo: o usuário digita S/s pra confirmar a exclusão, e N/n pra desistir de excluir

Grato!

Olá Arthur2010

Fiz algumas adaptações... os comentários estão no próprio código.

  readln(codPesq);
x:= false;
[COLOR="Blue"] {i:=1;}
i:=0; {para colocar a atualizacao do indice em cima. Tanto faz, mas eu
preferiria assim}[/COLOR]
while (i<6) and (x=false) do
BEGIN
[COLOR="Blue"] i:=i+1; {atualiza o índice}[/COLOR]
if codPesq = vetProdutos[i].rescod then {caso encontre o produto}
BEGIN
[COLOR="Blue"] (*
Aqui seria interessante você exibir os dados completos (ou parciais)
do produto, para o usuário confirmar ou não a exclusão

ex.:
imprimirProduto(vetProdutos[i]);

PS: é óbvio que você teria que implementar esse procedimento acima!!!
*)[/COLOR]
[COLOR="Red"] (*
writeln('Deseja excluir mesmo ? S/s');

// Veja que o usario deverah digita 'S' ou 'N', S ou s é uma problema
do programador (isso é transparente ao usuario)
*)[/COLOR]
writeln('Deseja excluir esse produto ? [S] ou [N] ');
readln(resp);
[COLOR="Blue"] resp:=UpCase(resp); {torna a letra maiuscula - precisa do CRT}[/COLOR]
[COLOR="Blue"] {if (resp='S') or (resp='s') then} {nao vai mais precisar do 's'zinho}
if (resp='S') then {caso confirme a exclusao}[/COLOR]
BEGIN
vetProdutos[i].rescod := '';
vetProdutos[i].desc := '';
vetProdutos[i].dat_ent := '';
vetProdutos[i].qtd := 0;
x:=true; {pra cair fora do laço} {e nao continuar pesquisando}
writeln('Produto eliminado');
readkey; {dah um pause antes de continuar}
END
[COLOR="Blue"]
else {caso digite qualquer outra letra (inclusive 'N' ou 'n'}
BEGIN {aqui codigo caso cancele}
writeln('Operacao concelada pelo usuário');
readkey; {dah um pause antes de continuar}
END;[/COLOR]
END;
[COLOR="Red"] if x=false then {e se achar e depois cancelar também vai ser invalido??}[/COLOR]
writeln('Erro! Codigo invalido');
END;

Qualquer coisa é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

Olá EstilingueAtomico, sobre a parte de listar os dados dos produtos eu ja o tinha feito acima, listo apenas o código deles, só não coloquei porque queria postar exatamente a parte que eu estava com problema, a minha dúvida que continua é quando o usuário digita 'N' o programa exibe a mensagem operação canc... e ai em seguida aparece código inválido -q é a mensagem de erro- Então: ele não sai do laço 'for' e exibe varias vezes.

Grato!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá EstilingueAtomico, sobre a parte de listar os dados dos produtos eu ja o tinha feito acima, listo apenas o código deles, só não coloquei porque queria postar exatamente a parte que eu estava com problema, a minha dúvida que continua é quando o usuário digita 'N' o programa exibe a mensagem operação canc... e ai em seguida aparece código inválido -q é a mensagem de erro- Então: ele não sai do laço 'for' e exibe varias vezes.

Grato!

Olá

Realmente, acho que o erro persiste..

Acredito que precisa corrigir dois erros:

1) Fazer parar de pesquisar independente da resposta do usuário

Quando o "if encontrar" o código correspondente automaticamente não seria mais necessário continuar pesquisando, daí terá que fazer o while não seguir para o próximo loop, independentemente do usuário confirmar ou não a exclusão.

2) A mensagem de verificação de erro está dentro do While

A mensagem de erro deveria ficar fora do laço, e não dentro. A lógica é deixar fazer a pesquisa, caso não encontre só aí teria que exibir o erro.

OBS.: Para o 2º funcionar corretamente, o 1º também terá que ser corrigido, já que o 2º vai depender do primeiro 1º.

Com essas mudanças acredito que funcionará...

PS: Se conseguir deixar tudo certinho, por favor, mesmo assim poste as mudanças aqui para analisarmos e também para servir de consulta para outros membros futuros. E também se precisar de algumas dicas sobre esse algoritmo pode ficar a vontade para perguntar.

Tente ai, estamos no aguardo.

Qualquer coisa é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

oii,coloquei a mensagem de erro fora do laço, mas minha dúvida ficou na primeira parte, pra fazer ele cair fora do while eu teria que fazer as duas condições mudarem(i ser maior que 6 e x ser verdadeiro) certo? então coloquei i:=algo e x:=true abaixo do if codPesq = vetProdu...

mas não deu certo.

Grato!


while (i<6) and (x=false) do
BEGIN
i:=i+1; {atualiza o índice}
if codPesq = vetProdutos[i].rescod then {caso encontre o produto}
i:=7;
x:=true;
BEGIN
writeln('Deseja excluir esse produto ? [S] ou [N] ');
readln(resp);

resp:=UpCase(resp); {torna a letra maiuscula - precisa do CRT}
if (resp='S') then {caso confirme a exclusao}
BEGIN
vetProdutos[i].rescod := '';
vetProdutos[i].desc := '';
vetProdutos[i].dat_ent := '';
vetProdutos[i].qtd := 0;
x:=true; {pra cair fora do laço} {e nao continuar pesquisando}
writeln('Produto eliminado');
readkey; {dah um pause antes de continuar}
END


else {caso digite qualquer outra letra (inclusive 'N' ou 'n'}
BEGIN {aqui codigo caso cancele}
writeln('Operacao concelada pelo usuário');
readkey; {dah um pause antes de continuar}
END;
END;

end;

writeln('Erro! Codigo invalido');

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!