Ir ao conteúdo
  • Cadastre-se

VisualG Exercicio simples de Visualg


Posts recomendados

Exercício: Desenvolva um algoritmo que peça ao usuário valores entre 100 e 200, caso o usuário digite um valor fora deste limite, o sistema deve fechar e exibir a mensagem ("valor fora do alcance").

var
  valor: inteiro


inicio
  escreval ("digite um valor entre 100 e 200: ")
  leia(valor)


  enquanto valor < > 100 e 200 faca
  leia(valor)
  fimenquanto
  
  escreval("valor fora do alcance: "

 

Estou tendo problema pra resolver a partir do comando Enquanto, que eu tento de várias formas chegar a solução, mas não encontro.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Otonashi Oliveira       para postar seu código é melhor usar o botão   <>   que está lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres  ,   e no visualg você precisa colocar a comparação das variáveis separadas por parênteses , assim :

 enquanto (valor  >= 100) e (valor <= 200) faca

e o escreval está sem o fecha parênteses :

 escreval("valor fora do alcance:")

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu nao estou encontrando <> na barra de ferramentas da janela postar, você poderia tirar um print por favor? Pois eu usei <> que é aqui do teclado, mas fica dando erro do tipo "esperava um argumento do tipo logico", e nao estou conseguindo resolver esse problema 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

2#

 

Sobre:

13 horas atrás, Otonashi Oliveira disse:

Pois eu usei <> que é aqui do teclado, mas fica dando erro do tipo "esperava um argumento do tipo logico", e nao estou conseguindo resolver esse problema 

 

Só para deixar claro... o "botão <>" não tem qualquer relação com o operador <> do Visualg (ou melhor, tem apenas que os símbolos são iguais, rs), ou seja, o botão <> do Fórum serve para postar códigos na postagem... já o comando <> no Visualg é um Operador Relacional, que basicamente serve para comparar dados.

 

 

 

3#

Sobre:

Em 15/09/2018 às 15:10, Otonashi Oliveira disse:

var
  valor: inteiro


inicio
  escreval ("digite um valor entre 100 e 200: ")
  leia(valor)


  enquanto valor < > 100 e 200 faca
  leia(valor)
  fimenquanto
  
  escreval("valor fora do alcance: "

 

Dois ponto iniciais:

- Seu código está incompleto. Cadê o fimAlgoritmo? Falta também o algoritmo lá no topo do código.

- Sempre mantenha seu código indentado. Inclusive o próprio Visualg pode dar uma ajuda. Basta pressionar CTRL+G.

 

"Corrigindo" esses pontos teríamos algo assim:

algoritmo "Aqui o nome do meu programa"
var
   valor: inteiro
inicio
   escreval ("digite um valor entre 100 e 200: ")
   leia(valor)
   enquanto valor < > 100 e 200 faca
      leia(valor)
   fimenquanto
   escreval("valor fora do alcance: ")
fimAlgoritmo

Pronto. Em relação ao seu código, essa seria uma base mínima.

 

 

 

4#

Qual versão do Visualg está utilizando? recomendo a versão 3.6.0.5 (exemplo de link aqui), que é a então penúltima versão disponível (atual é a 3.7.0.0, mas não recomendo, pois tem alguns bugs).

 

Então, baseado nessa versão 3.6.0.5, ao compilar o seu código (contido em 3#) deu o seguinte erro:

 

"VisuAlg3 encontrou o seguinte problema em seu algoritmo, na linha 7:

Esperava encontrar FACA"

 

erro_visualg.png

 

Ou seja, como sugerido por @devair1010, a estrutura do comando enquanto está com erro de sintaxe, pois cada uma das "comparações" devem ser feitas separadamente... e para "conectá-las" usam-se os Operadores Lógicos.

 

Em 16/09/2018 às 04:21, devair1010 disse:

 enquanto (valor  >= 100) e (valor <= 200) faca

 

Logo, tem uma expressão ("comparação") que verifica se valor é maior ou igual a 100; tem outra comparação que verificar se o valor é menor ou igual a 200 e tem um operador lógico que "calcula" o resultado final.

 

A primeira expressão resulta em VERDADEIRO ou FALSE (true ou false);

A segunda expressão resulta em VERDADEIRO ou FALSE (true ou false);

Ai o operador lógico "calcula" o resultado de uma resposta E a outra.

 

Ex. 1:

Se valor igual 160.

1ª expressão: 160 é maior ou igual a 100? resposta: VERDADEIRO

2ª expressão: 160 é menor ou igual a 200? resposta: VERDADEIRO
Operador lógico: VERDADEIRO e VERDADEIRO resulta em? resposta VERDADEIRO

Ou seja, o resultado final da expressão geral do enquanto resultou em VERDADEIRO, logo, o enquanto vai repetir.

 

Ex. 2:

Se valor igual 25.

1ª expressão: 25 é maior ou igual a 100? resposta: FALSO

2ª expressão: 25 é menor ou igual a 200? resposta: VERDADEIRO
Operador lógico: FALSO e VERDADEIRO resulta? resposta FALSO

Ou seja, o resultado final da expressão geral do enquanto resultou em FALSO, logo, o enquanto vai parar.

 

 

 

5#

Apenas para demonstrar:

Ah! e se eu quisesse o oposto? ou seja, que se digitasse um valor FORA da faixa desse limite de 100 e 200, o programa continuasse repetindo?

 

Ai a condição do enquanto seria a negação do atual:

Em vez de:

 enquanto (valor  >= 100) e (valor <= 200) faca

Poderia ser:

   enquanto (valor  < 100) ou (valor > 200) faca

 

Ex. 1:

Se valor igual 160.

1ª expressão: 160 é menor que 100? resposta: FALSO

2ª expressão: 160 é maior que 200? resposta: FALSO
Operador lógico: FALSO ou FALSO resulta em? resposta FALSO

Ou seja, o resultado final da expressão geral do enquanto resultou em FALSO, logo, o enquanto vai PARAR.

 

Ex. 2:

Se valor igual 25.

1ª expressão: 25 é menor 100? resposta: VERDADEIRO

2ª expressão: 25 é maior 200? resposta: FALSO
Operador lógico: VERDADEIRO ou FALSO resulta? resposta VERDADEIRO

Ou seja, o resultado final da expressão geral do enquanto resultou em VERDADEIRO, logo, o enquanto vai REPETIR.


Por ai vai.

 

***

 

 

Resumindo:

Se tiver dúvidas sobre o que é um Operador Relacional, pesquise sobre o tema;

Se tiver dúvidas sobre o que é um Operador Lógico, pesquise sobre o tema;

Se tiver dúvidas sobre a sintaxe do Enquanto, pesquise sobre o tem;

etc

 

Ou seja, no caso do seu código, o programa está no enquanto, daí, uma boa sugestão é (além de pesquisar sobre o comando) dá uma olhada em exemplos gerais sobre do comando... veja exemplos de como foi utilizado em outros códigos quaisquer e tente entender a estrutura.

 

No aguardo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Devo começar dizendo que a forma que você explica as coisas de forma completa acaba abrindo a mente das pessoas, realmente agradeço por me motivar dessa forma 

 

Eu dei uma pesquisada sobre as coisas que você citou abaixo, e isso realmente ajudou-me a entender melhor o comando enquanto, apesar de eu achar que eu preciso estudar mais ainda para ficar uma coisa mais concreta

11 horas atrás, Simon Viegas disse:

Se tiver dúvidas sobre o que é um Operador Relacional, pesquise sobre o tema;

Se tiver dúvidas sobre o que é um Operador Lógico, pesquise sobre o tema;

Se tiver dúvidas sobre a sintaxe do Enquanto, pesquise sobre o tem;

 

Enfim, voltando ao exercicio

Algoritmo "Exercicio"
// Disciplina  :  [Linguagem e Lógica de Programação]

// Professor   : (curso online) e (clubedohardware)

// Descrição   : Desenvolva um algoritmo que peça ao usuário valores entre 100 e
// 200, caso o usuário digite um valor fora deste limite, o sistema deve fechar
//e exibir a mensagem (“valor fora do alcance”)

// Autor(a)    : Marcus

// Data atual  : 17/09/2018


Var
valor :inteiro


Inicio


escreval ("digite um valor entre 100 e 200")
leia (valor)



enquanto (valor >= 100) e (valor <= 200) faca
   leia (valor)
   escreval ("valor fora do alcance")
fimenquanto

Fimalgoritmo

 

Deu certo essa resolução, mas se eu por exemplo, digito 180 na primeira, e na segunda vez eu digito 180 novamente, ele acaba dizendo ("valor fora do alcance") sendo que eu acho que essa mensagem nao deveria aparecer nesse momento. Eu nao sei se isso esta certo, mas eu queria saber se tem como eu ficar digitando varias vezes por exemplo o 180 ou outro numero entre 100 e 200 sem que a mensagem ("valor fora do alcance")  apareça.

 

tipo assim, após apertar F9:

 

180
180
150
80
valor fora do alcance

 

Apesar de nao ter ficado como eu queria, se eu digitar normalmente como o enunciado pede, parece ficar certinho, mas eu quero saber se tem como ficar do jeito acima citado

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Otonashi Oliveira    tem como ficar do jeito que você quer ,  e para isso você precisa verificar se o valor está ou não dentro da faixa ,  usando o comando se :

enquanto (valor >= 100) e (valor <= 200) faca
  leia (valor)
  se (valor<100) ou (valor>200) ENTÃO                                        
    escreval ("valor fora do alcance . . . !")
  senao
    escreval("Valor Dentro Da Faixa . . . !")
  fimse
fimenquanto

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

1#

Sobre:

14 horas atrás, Otonashi Oliveira disse:

Devo começar dizendo que a forma que você explica as coisas de forma completa acaba abrindo a mente das pessoas, realmente agradeço por me motivar dessa forma

 

Agradeço também o seu feedback. Estamos aqui para isso. Um dos objetivos centrais é essa colaboração mutua. :)

 

 

 

2#

Sobre:

14 horas atrás, Otonashi Oliveira disse:

Deu certo essa resolução, mas se eu por exemplo, digito 180 na primeira, e na segunda vez eu digito 180 novamente, ele acaba dizendo ("valor fora do alcance") sendo que eu acho que essa mensagem nao deveria aparecer nesse momento. Eu nao sei se isso esta certo, mas eu queria saber se tem como eu ficar digitando varias vezes por exemplo o 180 ou outro numero entre 100 e 200 sem que a mensagem ("valor fora do alcance")  apareça.

 

tipo assim, após apertar F9:

 

180
180
150
80
valor fora do alcance

 

Apesar de nao ter ficado como eu queria, se eu digitar normalmente como o enunciado pede, parece ficar certinho, mas eu quero saber se tem como ficar do jeito acima citado

 

 

Vamos focar no problema em si:

Em 15/09/2018 às 15:10, Otonashi Oliveira disse:

Exercício: Desenvolva um algoritmo que peça ao usuário valores entre 100 e 200, caso o usuário digite um valor fora deste limite, o sistema deve fechar e exibir a mensagem ("valor fora do alcance").

 

Então, de fato o programa deveria rodar mais ou menos como você sugeriu. Veja que o enunciado é explícito: "caso o usuário digite um valor fora deste limite, o sistema deve fechar e exibir a mensagem ("valor fora do alcance")".

 

O único detalhezinho seria que faltou a frase. Poderia ficar algo mais ou menos assim:

Digite valores entre 100 e 200
180
180
150
80
valor fora do alcance

 

Se for seguir essa definição, poderia ficar algo assim:

inicio
escreval("Digite valores entre 100 e 200")
leia(valor)
enquanto (valor >= 100) e (valor <= 200) faca
   leia (valor)
fimEnquanto
escreval("valor fora do alcance")
fimAlgoritmo

Perceba que só será "fora do alcance" se o número estiver "fora do alcance", ou seja, "enquanto" o número digitado estiver na faixa estipulada, vou continuar lendo números, caso contrário paro de ler.

 

 

EXTRAS:

Spoiler

Extra 1#

Aproveitando. Perceba que existe basicamente 3 tipos de laços de repetição: para, enquanto e repita. Cada um tem as suas peculiaridades... ou seja, que serão mais práticas ou não para cada contexto. O para geralmente é mais voltado para quantidades de repetições pré-definidas, pois tem a característica de controlar o laço com uma variável. Existem várias aplicações, mas perceba que é um tipo de laço mais específico... tende a ser mais prático para determinados contexto, mas ao mesmo tempo que tende a ter menos flexibilidade. Já o enquanto e repita possibilitam uma maior flexibilidade... Percebe por exemplo que no seu código o laço não foi concebido para repetir uma determinada quantidade de vezes, algo como repetir 10 vezes, pelo contrário, está voltado para "condições de comparações"... enquanto a condição for válida, vai ficar repetindo... Perceba também que tem "duas condições" na expressão. Poderia ter tantas quanto a linguagem suportar... o importante é que essa expressão resulte VERDADEIRO ou FALSO. Tem mais possibilidades do que com o para.

 

O para seria como um tipo enquanto mais bonitinho... por exemplo:


para i de 1 ate 10 faca
   escreval(i*2)
fimPara

Isso seria uma forma mais simples de escreve isto:


i <- 1
enquanto i<=10 faca
   escreval(i*2)
   i <- i+1
fimEnquanto

 

Ou seja, por questão de funcionalidade, o para nem precisa existir, pois o enquanto ou repita daria conta! Entretanto, a linguagem disponibiliza, como citado, para poder facilitar a implementação... É análogo ao escolha/caso e o se/então. O primeiro é uma forma mais "sofisticada" do segundo, entretanto o se/então é mais flexível... da mesma forma o escolha/caso não precisaria existir, pois o se/então daria conta. Entretanto, da mesma forma o escolha/caso pode simplificar e dar um ar muito mais organizado para alguns contextos.

 

 

Voltando para o enquanto... um detalhe que poderíamos destacar no código é que está "lendo" uma variável, depois verificando se é para começar repetir algo ou não... mas veja que essa repetição é exatamente a mesma coisa que foi feita antes, ou seja, o enquanto é uma estrutura que "primeiro pergunta, depois faz"... mas o seu contexto demonstra que na verdade "primeiro está fazendo, para depois perguntar". É o contrário. É nesses casos que poderíamos usar o repita. Vou demonstra um código e complementar depois, veja:


inicio
escreval("Digite um valor entre 100 e 200")
repita
   leia (valor)
ate nao ((valor >= 100) e (valor <= 200)) //ou poderia usar "ate (valor < 100) ou (valor > 200)"
escreval("valor fora do alcance")
fimAlgoritmo

 

Perceba que o enquanto e o repita são basicamente iguais em essência!!! praticamente 2 detalhes:
- o enquanto verifica antes de começar; já o repita já executa pelo menos uma vez.

- as condições para continuar são inversas, ou seja, no enquanto se a expressão resultar em VERDADEIRO, a repetição continua. Já no repita, se a condição resultar em VERDADEIRO, ela para.

 

Entende? são bem parecidos. Só que uma pergunta antes, o outro já faz. Tanto que é "mesmo coisa", que em algumas outras linguagens de programação, em vez de usar repita, usam apenas enquanto (obs.: só que geralmente em inglês, é claro). Algo assim:

 

O enquanto seria algo como:


enquanto (valor >= 100) e (valor <= 200)
   inicio
   leia (valor)
   fim

Certo?

 

Já para o repita é usado como "faça/enquanto". Ficaria algo como:


faca
   inicio
   leia (valor)
   fim
enquanto (valor >= 100) e (valor <= 200)

Entende? nesse caso, a condição para continua é igual, ou seja, "se VERDADEIRO repete". Só muda que "faz antes, para só depois começar a verificar".

 

Nesse sentido... perceba que o enquanto e o repita são estruturas bem próximas mesmo, ou seja, tudo que faz com uma, dá para fazer com a outra!!! Como já citado... a diferença entre os laços de repetições está em um tender a ser mais prático ou não para cada contexto..

 

 

 

Extra 2#
Se pararmos para analisar, o enquanto seria meio que um repita com um se antes. Ex.:

Esse código:


inicio
escreval("Digite valores entre 100 e 200")
leia(valor)
enquanto (valor >= 100) e (valor <= 200) faca
   leia (valor)
fimEnquanto
escreval("valor fora do alcance")
fimAlgoritmo

 

Seria análogo a este:


inicio
escreval("Digite valores entre 100 e 200")
leia(valor)
se (valor >= 100) e (valor <= 200) entao
   repita
      leia (valor)
   ate nao ((valor >= 100) e (valor <= 200))
fimSe
escreval("valor fora do alcance")
fimAlgoritmo

Perceba usando o enquanto ficou muito mais simples.

 

 

Da mesma forma, se pararmos para analisar, o repita seria meio que um enquanto onde a condição (do enquanto) já inicia sempre resultando em VERDADEIRO. Ex.:

 

Esse código:


inicio
escreval("Digite um valor entre 100 e 200")
repita
   leia (valor)
ate nao ((valor >= 100) e (valor <= 200)) //ou poderia usar "ate (valor < 100) ou (valor > 200)"
escreval("valor fora do alcance")
fimAlgoritmo

 

Seria análogo a este:


algoritmo "Exercicio"
var
   valor :inteiro
inicio
escreval("Digite valores entre 100 e 200")
valor <- 100 //qualquer valor entre 0 a 200 (para satifazer a condição inicial)
enquanto (valor >= 100) e (valor <= 200) faca
   leia (valor)
fimEnquanto
escreval("valor fora do alcance")
fimAlgoritmo

Entende?

 

 

Dúvidas, críticas ou sugestões?

 

No aguardo.

adicionado 6 minutos depois

ADENDO:

 

Só um detalhe que me veio agora:

Em 15/09/2018 às 15:10, Otonashi Oliveira disse:

[...] o sistema deve fechar e exibir a mensagem ("valor fora do alcance"). 

 

Obviamente seria primeiro "exibir a mensagem", só depois "fechar o sistema". Se não for nesse ordem, ficaria complicado, já que a mensagem é exibida no próprio "sistema".

 

Me lembrou aquele "Cúmulo da rapidez": «Fechar a gaveta, trancar e jogar a chave dentro».

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Agradeço por todos os detalhes que ofereceu

 

Concordo com você

22 horas atrás, Simon Viegas disse:

Obviamente seria primeiro "exibir a mensagem", só depois "fechar o sistema". Se não for nesse ordem, ficaria complicado, já que a mensagem é exibida no próprio "sistema".

 

 

kkkkkkk, faz sentido.... perai, nao nao faz sentido kkkk

22 horas atrás, Simon Viegas disse:

Me lembrou aquele "Cúmulo da rapidez": «Fechar a gaveta, trancar e jogar a chave dentro».

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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!