Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas Dantas

O que há de errado neste programa em PASCAL?

Recommended Posts

Olá iMasters!

 

Eu estou estudando pascal, e tem um exercício que propõe o seguinte:

 

1. Criar uma variável para ser utilizada como resposta;

2. Ler dois valores (variáveis A e B);

3. Efetuar o cálculo, armazenando o resultado em R;

4. Apresentar o valor calculado contido na variável R;

5. Perguntar ao usuário se deseja continuar executando o programa; e

6. Repetir o passos 2, 3 e 4 até que a resposta do usuário seja não.

 

É para utilizar os comandos REPEAT e UNTIL. Estou usando Dev-Pascal.

 

Fiz assim:

 

program exerc6_3;

var
  r, a, b :integer; { Contador, Resultado, Primeira Parcela, Segunda parcela }
  w       :string;  { Resposta }

begin
    repeat
          w:='sim'; { Inicializando a variável resposta }
          read(a, B); { Ler primeira e segunda parcela }
          r := a + b; { Colocar resultado em R }
          writeln('O resultado é', r); { Imprimir na tela }
          write('Desejas continuar? [s/n]');  
          read(w); // Resposta: É aqui que trava. Ao responder ele dá uma mensagem de erro
    until (w <> 's') or (w <> 'S');
    writeln('Obrigado');
end.

 

Se alguém me disser o erro, eu agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá iMasters!

 

Eu estou estudando pascal, e tem um exercício que propõe o seguinte:

 

 

 

É para utilizar os comandos REPEAT e UNTIL. Estou usando Dev-Pascal.

 

Fiz assim:

 

program exerc6_3;

var
  r, a, b :integer; { Contador, Resultado, Primeira Parcela, Segunda parcela }
  w       :string;  { Resposta }

begin
    repeat
          w:='sim'; { Inicializando a variável resposta }
          read(a, B); { Ler primeira e segunda parcela }
          r := a + b; { Colocar resultado em R }
          writeln('O resultado é', r); { Imprimir na tela }
          write('Desejas continuar? [s/n]');  
          read(w); // Resposta: É aqui que trava. Ao responder ele dá uma mensagem de erro
    until (w <> 's') or (w <> 'S');
    writeln('Obrigado');
end.

 

Se alguém me disser o erro, eu agradeço.

 

Man se liga nessa linha:

w:='sim'; { Inicializando a variável resposta }

coloque

w:='s'; { Inicializando a variável resposta }

E por segurança mude isso:

until (w <> 's') or (w <> 'S');

para:

until ((w <> 's') or (w <> 'S'));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Man se liga nessa linha:

w:='sim'; { Inicializando a variável resposta }

coloque

w:='s'; { Inicializando a variável resposta }

E por segurança mude isso:

until (w <> 's') or (w <> 'S');

para:

until ((w <> 's') or (w <> 'S'));

 

 

Obrigado, mas não deu certo. Basta eu digitar um valor, depois outro. Então aperto enter. Pergunta se quero continuar, já diz obrigado e fecha. O que fazer?

 

Outra pergunta, o que muda inicializando a variável W com SIM e não s?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não está em nenhum dos dois lugares mencionados acima...

Veja, você criou a variavel "b", mas está tentando ler a variavel "B": read( a, B );

O segundo problema é que no seu until está assim: until (w <> 's') or (w <> 'S'); então, quando o w for diferente de "s" ou "S" ele fecha o programa... Mas veja só, se ele digitar "s", o programa fecha pois é diferente de "S", e se ele digitar "S" irá fechar pois é diferente de "s", portanto o correto é utilizar and no lugar de or...

E tem mais uma coisa, como o usuario irá digitar a variavel w, não a necessidade de inicializa-la, abaixo deixo o programa que aqui funcionou corretamente

 

program exerc6_3;

var
  r, a, b :integer; { Contador, Resultado, Primeira Parcela, Segunda parcela }
  w       :string;  { Resposta }

begin
    repeat
          read(a, B); { Ler primeira e segunda parcela }
          r := a + b; { Colocar resultado em R }
          writeln('O resultado é', r); { Imprimir na tela }
          write('Desejas continuar? [s/n]');  
          read(w); // Resposta: É aqui que trava. Ao responder ele dá uma mensagem de erro
    until (w <> 's') and (w <> 'S');
    writeln('Obrigado');
end.

 

Espero ter te ajudado :thumbsup:

 

ATENÇÃO: Por alguma razão demoniaca o b no read não ta ficando minusculo shuashuahaush, mude ali

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não está em nenhum dos dois lugares mencionados acima...

Veja, você criou a variavel "b", mas está tentando ler a variavel "B": read( a, B );

O segundo problema é que no seu until está assim: until (w <> 's') or (w <> 'S'); então, quando o w for diferente de "s" ou "S" ele fecha o programa... Mas veja só, se ele digitar "s", o programa fecha pois é diferente de "S", e se ele digitar "S" irá fechar pois é diferente de "s", portanto o correto é utilizar and no lugar de or...

E tem mais uma coisa, como o usuario irá digitar a variavel w, não a necessidade de inicializa-la, abaixo deixo o programa que aqui funcionou corretamente

 

program exerc6_3;

var
   r, a, b :integer; { Contador, Resultado, Primeira Parcela, Segunda parcela }
   w       :string;  { Resposta }

begin
     repeat
           read(a, B); { Ler primeira e segunda parcela }
           r := a + b; { Colocar resultado em R }
           writeln('O resultado é', r); { Imprimir na tela }
           write('Desejas continuar? [s/n]');  
           read(w); // Resposta: É aqui que trava. Ao responder ele dá uma mensagem de erro
     until (w <> 's') and (w <> 'S');
     writeln('Obrigado');
end.

 

Espero ter te ajudado :thumbsup:

 

ATENÇÃO: Por alguma razão demoniaca o b no read não ta ficando minusculo shuashuahaush, mude ali

 

 

Pois é, eu tinha feito lido a variável com "b" minúsculo mesmo, o fórum que não aceita. Troquei o or por and e tirei a inicialização de w, tal como tu fizeste. Todavia, quando eu coloco a primeira parcela e depois a segunda, o programa dá o resultado e fecha, indicando que ainda não funcionou.

 

Veja como digitei o código:

 

program exerc6_3;

var
  r, a, b :integer; { Contador, Resultado, Primeira Parcela, Segunda parcela }
  w       :string;

begin
    repeat
   read(a, B);
          r := a + b;
          writeln('O resultado e', r);
          write('Desejas continuar? [s/n]');
          read(w);
    until ((w <> 's') and (w <> 'S'));
    writeln('Obrigado');
end.

 

1ª Pergunta: Só por saber, que faria diferença caso eu declarasse 'b' e usasse 'B'? Pois na apostila diz que o PASCAL não é case sensitive, isto é, não se importa se está maiúsculo ou minúsculo.

 

2ª Pergunta: Que compilador você usa? Freepascal (o meu) é bom?

 

3ª A última, mas não menos importante: Por que não funcionou? rsrsrs

 

Desde já, grato.

 

Obrigado pessoal. Eu fiz o que o Ismael falou e usei, dessa vez, o PascalZim e rodou bem, sem erros.

 

Mas ainda quero a resposta da primeira e segunda pergunta. rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

1ª Pergunta: Só por saber, que faria diferença caso eu declarasse 'b' e usasse 'B'? Pois na apostila diz que o PASCAL não é case sensitive, isto é, não se importa se está maiúsculo ou minúsculo.

 

2ª Pergunta: Que compilador você usa? Freepascal (o meu) é bom?

 

3ª A última, mas não menos importante: Por que não funcionou? rsrsrs

 

Desde já, grato.

 

Obrigado pessoal. Eu fiz o que o Ismael falou e usei, dessa vez, o PascalZim e rodou bem, sem erros.

 

Mas ainda quero a resposta da primeira e segunda pergunta. rsrs

Sei la mano, eu só não gosto de ficar trocando maiusculo e minusculo assim shuashuashua, e eu utilizo o free pascal aqui, ele é ótimo sim, só que da uns bugs doido as vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo o Pascal não sendo case-sensitive, acostume-se a padronizar seus nomes pelo código, pois a grande maioria das outras linguagens são case-sensitive.

 

Tente substituir a linha until ((w <> 's') and (w <> 'S')); por until ((w <> 's') or (w <> 'S'));.

 

Se o usuário digitar a letra 's' no final, o escopo do laço vai verificar. A letra 's' é diferente de 's' e diferente de 'S' ao mesmo tempo? Não, pois a letra 's' é igual a letra 's', mas diferente da letra 'S'. Acredito que o correto ali seria um OR.

 

Faça o teste e nos mantenha informado sobre seu progresso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.