Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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






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

×