Douglas Dantas 0 Denunciar post Postado Julho 12, 2012 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
Robz Lancaster 0 Denunciar post Postado Julho 12, 2012 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
Douglas Dantas 0 Denunciar post Postado Julho 12, 2012 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
Ismaeldm 5 Denunciar post Postado Julho 12, 2012 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
Douglas Dantas 0 Denunciar post Postado Julho 12, 2012 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
Ismaeldm 5 Denunciar post Postado Julho 14, 2012 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
Croves 1 Denunciar post Postado Julho 17, 2012 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