Ir ao conteúdo
  • Cadastre-se
Augusto G rocha

Problema com repeat e if e else

Recommended Posts

Inicialmente o exercício e o código que eu já escrevi

 

Faça um programa para controlar o estoque de mercadorias de uma empresa. Inicialmente, o programa deverá preencher dois vetores com dez posições cada, onde o primeiro corresponde ao código do produto e o segundo ao total desse produto em estoque. Logo após, o programa deverá ler um conjunto indeterminado de dados contendo o código de um cliente e o código do produto que ele deseja comprar, juntamente com a quantidade. Código do cliente igual a zero indica fim do programa. O programa deverá verificar:

 


 Se o código do produto solicitado existe. Se existir, tentar atender ao pedido; caso contrário, exibir mensagem Código Inexistente;


 Cada pedido feito por um cliente só pode ser atendido integralmente. Caso isso não seja possível, escrever a mensagem Não temos estoque suficiente desta mercadoria. Se puder atendê-lo, escrever a mensagem Pedido atendido. Obrigado e volte sempre;


 Efetuar a atualização do estoque somente se o pedido for atendido integralmente;


 No final do programa, escrever os códigos dos produtos com seus respectivos estoques atualizados.

 

CODIGO

 

Program Lista4Exercicio3;
Var
Codigo: array [1..10]of integer;
Quant: array [1..10]of integer;

C,Q,i,code,Cliente: integer;

Begin
  Writeln('--------------------------------Lista 4 Exercicio 3----------------------------');
  
  Writeln('Inserir o codigo dos produtos');
  
  for i := 1 to 10 do
  begin
    Readln(Codigo[i]);
  end;
  
  Writeln('Inserir a quantidade de produtos produtos');
  
  for i := 1 to 10 do
  begin
    Readln(Quant[i]);
  end;
  Writeln('');
  Writeln('TABELA DE PRODUTOS');
  Writeln('');
  for i := 1 to 10 do
  begin
    Writeln('CODIGO DO PRODUTO >>> ',Codigo[i],' QUANTIDADE EXISTENTE >>> ',Quant[i]);
  end;
  
  repeat
    
    Writeln('');
    Writeln('Insira o codigo do cliente');
    Readln(Cliente);
    
    
    Writeln('Digite o codigo do produto a ser comprado');
    Readln(code);
    
    for i := 1 to 10 do
    begin
      if code = Codigo[i]   then begin
        Quant[i]:= Quant[i] - 1;
      Writeln('Pedido atendido, Obrigado e volte sempre');
    end    else if (code <> Codigo[i]) Then
    begin
      Writeln('Codigo inexistente');
    end;
  end;
  
  
  Writeln('');
  Writeln('TABELA DE PRODUTOS');
  Writeln('');
  for i := 1 to 10 do
  begin
    Writeln('CODIGO DO PRODUTO >>> ',Codigo[i],' QUANTIDADE EXISTENTE >>> ',Quant[i]);
  end;
  
  
Until(Cliente = 0);

Writeln('FIM DO PROGRAMA');


End.

 

Tem dois problemas nesse programa 

 

for i := 1 to 10 do
    begin
      if code = Codigo[i]   then begin
        Quant[i]:= Quant[i] - 1;
      Writeln('Pedido atendido, Obrigado e volte sempre');
    end    else if (code <> Codigo[i]) Then
    begin
      Writeln('Codigo inexistente');
    end;
  end;

O programa faz a redução na tabela sem problemas mas ele mostra "Codigo inexistente" todas as 10 vezes e eu não quero isso

Já  tentei tirar o "For" do else mas ele não entedeu isso.

 

// Segundo

Until(Cliente = 0);

Writeln('FIM DO PROGRAMA');

Queria que o programa encerraça quando eu apertasse 0 no "Read" do Cliente mas mas ele me inginora continua rodando .

 

essas são minhas duvidas. 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Augusto G rocha.

 

1) Leitura dos dados

15 horas atrás, Augusto G rocha disse:

Inicialmente, o programa deverá preencher dois vetores com dez posições cada, onde o primeiro corresponde ao código do produto e o segundo ao total desse produto em estoque.

 

15 horas atrás, Augusto G rocha disse:

Writeln('Inserir o codigo dos produtos');
  
  for i := 1 to 10 do
  begin
    Readln(Codigo[i]);
  end;
  
  Writeln('Inserir a quantidade de produtos produtos');
  
  for i := 1 to 10 do
  begin
    Readln(Quant[i]);
  end;

 

Acho que seria mais prático ler a quantidade logo após ler o código... ou seja, em um único for... pois assim fica mais fácil para correlacionar um coisa com a outra.

 

 

2) Busca de código de produto

16 horas atrás, Augusto G rocha disse:

O programa faz a redução na tabela sem problemas mas ele mostra "Codigo inexistente" todas as 10 vezes e eu não quero isso

Já  tentei tirar o "For" do else mas ele não entedeu isso.

 

16 horas atrás, Augusto G rocha disse:

for i := 1 to 10 do
    begin
      if code = Codigo[i]   then begin
        Quant[i]:= Quant[i] - 1;
      Writeln('Pedido atendido, Obrigado e volte sempre');
    end    else if (code <> Codigo[i]) Then
    begin
      Writeln('Codigo inexistente');
    end;
  end;

 

Perceba que um código só será inexistente após verificar todos! No seu código, você está informando que não existe para cada tentativa sem sucesso.

 

Para corrigir, você poderia usar uma FLAG para verificar se foi encontrado ou não... por exemplo, antes do for, essa flag teria um valor indicando que não foi encontrado, daí, dentro do if, no caso como sendo encontrado, essa flag passaria a ter um valor indicando que foi encontrado!.

Dessa forma, ao final do for, verifica o valor da flag...

 

 

Abaixo um exemplo:

obs.: sugiro que tente fazer antes sozinho, caso tenha dificuldade, consultar esse modelo e adequar a sua necessidade.
 

Spoiler

- Se você clicou aqui antes de tentar, sinto muito... (:

- Caso tentou e não conseguiu, por favor, poste o seu código e onde está com dúvidas.

 

 

 

3) Condição para encerramento

17 horas atrás, Augusto G rocha disse:

Queria que o programa encerraça quando eu apertasse 0 no "Read" do Cliente mas mas ele me inginora continua rodando .

Você poderia inserir um estrutura de seleção (if) logo após ler o código cliente, se o código for diferente de "0", faz a parte que continua o programa. Ai vê se utiliza um else ou não (será facultativo, pois como o if não será executado, irá direto para logo após esse if, que nesse contexto, iria para o until, que por sua vez iria "aceitar o fim do repeat") ..

 

***

 

No aguardo.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×