Ir ao conteúdo
  • Cadastre-se

VisualG Calculadora trigonométrica, condicionais "OU" não funciona


Posts recomendados

Estou aprendendo lógica no VisuAlg, e tentei fazer uma calculadora trigonométrica utilizando os conceitos, tudo dá certo, menos a linha 33, e eu não entendo qual é o problema, se o então está lá.

Eis o código:

algoritmo "Perguntando se quer tan, cos ou sen"
// Função : Criar uma espécie de calculadora trigonométrica
// Autor : João Lucas Gomes de Moura
// Data : 15/07/2023
var
   F: caractere
   S, C, T, R: real
inicio
      Escreval("Bem vindo a calculadora trigonométrica!")
      Escreval("Escolha uma função: S para Seno, C para Cosseno, e T para Tangente")
      Leia(F)
      Se (F = "S") então
         Escreval("Escreva um número para calcularmos o Seno:")
         Leia(S)
         R <- Sen(S)
         Escreval("O seno de ", S, " é igual a ", R)
         Escreva("Obrigado pela preferência!")
      Fimse
      Se (F = "C") então
         Escreval("Escreva um número para calcularmos o Cosseno:")
         Leia(S)
         R <- Cos(S)
         Escreval("O Cosseno de ", S, " é igual a ", R)
         Escreva("Obrigado pela preferência!")
      Fimse
      Se (F = "T") então
         Escreval("Escreva um número para calcularmos a Tangente:")
         Leia(S)
         R <- Tan(S)
         EscrevaL("A Tangente de ", S, " é igual a ", R)
         Escreva("Obrigado pela preferência!")
      Fimse
      Se ((F = "S" OU "C" OU "T") = Falso) então
         Escreva("É para escolher uma das letras acima bobo. Executa essa ***** de novo!")
      Fimse
fimalgoritmo

 

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

A lógica para o visualg nessa sentença está errada.

6 horas atrás, João Lucas Gomes de Moura disse:

Se ((F = "S" OU "C" OU "T") = Falso) então

Você teria que comparar a variável com todas as letras. mais ou menos dessa maneira

// Estou negando a sentença para ela ser verdadeira 
Se (não (operacao = "S") OU (operacao = "C") OU (operacao = "T")) então

No visualg quando você for usar operadores lógicos (não, E ou OU) você tem que proteger as operações de desigualdade (<, <=, >=, >, =, <>) desta maneira

// Correto!
se ((valor >= 1) E (valor <= 3)) então

se você colocar dessa maneira vai esta errado

// Errado!
se valor >= 1 E valor <= 3 então

Não vai funcionar.

 

Seu algoritmo funcionando

algoritmo "Perguntando se quer tan, cos ou sen"
// Função : Criar uma espécie de calculadora trigonométrica
// Autor : João Lucas Gomes de Moura, modificador por KGIN!
// Data : 15/07/2023
var
   operacao:caractere
   valor, resposta:real
inicio
   Escreval("Bem vindo a calculadora trigonométrica!")
   Escreval("Escolha uma função: S para Seno, C para Cosseno, e T para Tangente")
   Leia(operacao)

   Se (operacao = "S") então
      Escreval("Escreva um número para calcularmos o Seno:")
      Leia(valor)
      resposta <- Sen(valor)
      Escreval("O seno de ", valor, " é igual a ", resposta)
      Escreva("Obrigado pela preferência!")
   Fimse

   Se (operacao = "C") então
      Escreval("Escreva um número para calcularmos o Cosseno:")
      Leia(valor)
      resposta <- Cos(valor)
      Escreval("O Cosseno de ", valor, " é igual a ", resposta)
      Escreva("Obrigado pela preferência!")
   Fimse

   Se (operacao = "T") então
      Escreval("Escreva um número para calcularmos a Tangente:")
      Leia(valor)
      resposta <- Tan(valor)
      EscrevaL("A Tangente de ", valor, " é igual a ", resposta)
      Escreva("Obrigado pela preferência!")
   Fimse

   Se (não (operacao = "S") OU (operacao = "C") OU (operacao = "T")) então
      Escreva("É para escolher uma das letras acima bobo. Executa essa ***** de novo!")
   Fimse
fimalgoritmo

Outra dica é tente dar nomes mais significativos para as variáveis.

uma variável com o nome valor e muito mais significativa do que usar uma letra solta como V ou F. e tente escrever mais em torno dos dados que o usuário vai fornecer, veja que o seu algoritmo é só um copia e cola. isso não é uma coisa ruim as vezes.

 

Veja que muitas partes davam para ser reutilizadas

algoritmo "Otimização maxima!"

var
   NOME_OPERACOES: vetor [1..3] de caractere

   operacao, contador:inteiro
   valor:real


inicio
   // Define o nome das operações
   NOME_OPERACOES[1] <- "Seno"
   NOME_OPERACOES[2] <- "Cosseno"
   NOME_OPERACOES[3] <- "Tangente"

   // Mensagem de boas vindas!
   escreval("Bem vindo a calculadora trigonometrica!")

   // Loop principal....
   repita
      // Pega o tipo de operação
      escreval("Escolha uma das operações a baixo")
      para contador de 1 ate 3 faca
         escreval(contador ," para ", NOME_OPERACOES[contador])
      fimPara
      escreval(" 0 para sair!")
      leia(operacao)

      // Pega o valor para a operação
      se ((operacao >= 1) e (operacao <=3)) então
         escreval
         escreva("Escreva um numero para calcularmos ")
         se (operacao <= 2) então
            escreva("o ", NOME_OPERACOES[operacao], ":")
         seNao
            escreva("a ", NOME_OPERACOES[operacao], ":")
         fimSe
         leia(valor)

         // Faz a operação
         escreval
         se (operacao <= 2) então
            escreva("O ", NOME_OPERACOES[operacao])
         seNao
            escreva("A ", NOME_OPERACOES[operacao])
         fimSe
         escreva(" de ", valor," e igual a ")
         escolha operacao
         caso 1
            escreval(sen(valor))
         caso 2
            escreval(cos(valor))
         caso 3
            escreval(tan(valor))
         fimEscolha
         escreval("Pressione enter para continuar")
         leia(contador)      // Reutilizei :b
      fimSe
      limpaTela
   ate operacao = 0
fimAlgoritmo

 

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

  • DiF alterou o título para Calculadora trigonométrica, condicionais "OU" não funciona
  • Membro VIP

Complementando:

 

Como sabido, o então e não (com ~) não funcionam no VisualG. Esse acento é colocado aqui no Fórum por causa de um "corretor automático". Basta substituir pela palavra correta. Exemplo:

 

Pressiona "Ctrl-U":

 

image.png

 

E substitui tudo ou vai analisando um a um... O não como só tem um, basta editar manualmente.

 

 

 

Sobre:

Em 15/07/2023 às 19:33, kgin disse:
Se (não (operacao = "S") OU (operacao = "C") OU (operacao = "T")) então

 

Esta expressão está incompleta. A negação seria da expressão toda, e não só da sentença ao lado.

 

A linha acima seria, tecnicamente, igual a:

se ((não (operacao = "S")) OU (operacao = "C") OU (operacao = "T")) então

 

 

Ajustando poderia ficar com algo assim:

 

se não ((operacao = "S") OU (operacao = "C") OU (operacao = "T")) então

 

Ou seja: "nego o resultado da expressão".

 

ou

 

se (não ((operacao = "S") OU (operacao = "C") OU (operacao = "T"))) então

 

Ou ainda negando a expressão em si no código:

 

se ((operacao <> "S") E (operacao <> "C") E (operacao <> "T")) então

 

Dá na mesma. As 3 expressões são logicamente equivalentes.

 

 

Adendo: "ah! porque está funcionando? Eu testei tudo e foi de boa". Pelo simples fato do VisualG ser bugado! 😄. Tenho quase certeza que isso não é proposital. Seria uma falha no interpretador da execução.

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!