Ir ao conteúdo
  • Cadastre-se

VisualG Condicional com vários E lógicos


Posts recomendados

Prazer a todos.

Tenho dúvida quanto a um algoritmo. É simples. Saber se há condições para a existência de um triângulo.

Fiz o algoritmo, porém não entendo porque o visualg não interpreta corretamente a condicional.

Var
// Seção de Declarações das variáveis
a,b,c,sub1,sub2,sub3:real
Inicio
// Seção de Comandos, procedimento, funções, operadores, etc...
escreval("Entre com o 1º lado")
leia(a)
escreval("Entre com o 2º lado")
leia(b)
escreval("Entre com o 3º lado")
leia(c)
O problema está na linha abaixo. O visualg diz que não encontra a palavra "então"
se (abs(b - c) < a < b + c) e (abs(a - c) < b < a + c) e (abs(a -  < c < a + 
então
   escreval("A figura é um triângulo.")
senao
   escreval("A figura não é um triângulo")
fimse

 

No lugar das figuras é b e parênteses fechando a função. O sistema não aceita quando tento colocar a letra b com o parênteses.

 

abs() é a função absoluto ou módulo de um número.

Obrigado a todos.

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

@deathcon4    você está fazendo duas comparações ao mesmo tempo  elas precisam ser separadas assim :

Algoritmo "semnome"
// Disciplina   : [Linguagem e Lógica de Programação] 
// Professor    : Antonio Carlos Nicolodi 
// Descrição   : Aqui você descreve o que o programa faz! (função)
// Autor(a)    : Nome do(a) aluno(a)
// Data atual  : 06/09/2017
Var
// Seção de Declarações das variáveis 
c,a,b : inteiro

Inicio
// Seção de Comandos, procedimento, funções, operadores, etc... 
se (abs(b-c) < a)e(abs(b-c) < b + c ) e (abs(a - c) < b)e(abs(a-c) < a + c) e (abs(a - B) < c)e(abs(a-b) < a + B) então
   escreval("A figura é um triângulo.")
senao
   escreval("A figura não é um triângulo")
fimse

Fimalgoritmo

 

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

Obrigado. Tem de separar a função e comparar uma a uma. Agora entendi. Não é possível comparar com duas expressões matemáticas ao mesmo tempo como fazemos na tabela verdade ou numa expressão matemática como colocamos no papel. Pensei que interpretasse da mesma forma e vindo da esquerda para a direita. Só é possível com um operador e não mais de um, pois o interpretador do visualg não vai entender.

 

 

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

  • Membro VIP

Isso... é uma questão de "linguagem" (sintaxe). A sua proposta está correta (sensata), apenas que o VisuAlg não entende.

 

ADENDO 1:

No papel a interpretação não necessariamente vai da esquerda para direita, ela é uma pouco mais complexa... Na expressão (abs(b - c) < a < b + c), abstraímos de forma que seria equivale a: "'a' é  maior que o módulo de "b-c" E "a" é maior menor que "b+c", ou seja, o VisuAlg entende da forma que nós entendemos, não da forma como escrevemos, rs.


ADENDO 2:

Será que essa "condição de existência" já protege contra lados negativos ou nulos (igual a 0)?

 

Deixo com vocês..

 

ADENDO 3:

Eu não tinha nem reparado, mas analisando com mais calma, precisaria de um pequenos ajustes em ambos os códigos..

 

Baseado no seu:

var
   {a,b,c,sub1,sub2,sub3:real} //variáveis "sub"s não utilizadas
   a,b,c :real
Inicio
escreval("Entre com o 1º lado")
leia(a)
escreval("Entre com o 2º lado")
leia(b)
escreval("Entre com o 3º lado")
leia(c)

{  Condição de existência de um Triângulo } //apenas para servir como base
{          | b - c | < a < b + c          }
{          | a - c | < b < a + c          }
{          | a - b | < c < a + b          }

{se (abs(b - c) < a < b + c) e (abs(a - c) < b < a + c) e (abs(a -  < c < a +}
{então} //Além do já citado por devair1010, no VisuAlg, o ENTÃO tem que fica na mesma linha
se ((a > abs(b-c)) e (a < b+c)) e ((b > abs(a-c)) e (b < a+c)) e ((c > abs(a-b)) e c < a+b) ENTÃO
   escreval("A figura é um triângulo.")
senao
   escreval("A figura não é um triângulo")
fimse
Fimalgoritmo

 

Código "enxuto":

var
   a,b,c :real
Inicio
escreval("Entre com o 1º lado")
leia(a)
escreval("Entre com o 2º lado")
leia(b)
escreval("Entre com o 3º lado")
leia(c)
{  Condição de existência de um Triângulo } //apenas para servir como base
{          | b - c | < a < b + c          }
{          | a - c | < b < a + c          }
{          | a - b | < c < a + b          }
se ((a > abs(b-c)) e (a < b+c)) e ((b > abs(a-c)) e (b < a+c)) e ((c > abs(a-b)) e c < a+b) ENTÃO
   escreval("A figura é um triângulo.")
senao
   escreval("A figura não é um triângulo")
fimse
Fimalgoritmo

 

 

Em relação ao código do @devair1010:

- Acho que o tipo devem ser real mesmo, pois os lados de um triângulo não são apenas inteiros. (de um modo geral, é claro)

- Algumas comparações estão erradas, como:
 

11 horas atrás, devair1010 disse:

 (abs(b-c) < b + c )

 

Pois, considerando-se o ADENDO 2, "o módulo de um número menos outro, SEMPRE será menor que esse mesmo número mais outro mesmo número". Essa condição sempre será verdadeira.

 

obs.: não parei para analisar as consequência disso, pois estou com um pouco de dor de cabeça, rs. Deixo também para vocês analisarem se estou certo e quais seriam as consequências, como por exemplo quais categorias de triângulos que seriam inválidos poderiam dar falsos positivos.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Verdade. Não levei em consideração se um ou mais lados for zero ou negativo. Vou testar e ver o resultado.

 

adicionado 7 minutos depois

As vezes tem raiz de 2, raiz cúbica. São números fracionários.

 

adicionado 49 minutos depois

Com números negativos sempre dá como resposta de que não é possível ser um triângulo. Com zeros, também diz não ser um triângulo, lógico para como zeros. Para números negativos também está correto, por causa da função abs, que sempre retorna um valor positivo. É igual ao módulo da matemática. | a |. Por isso sempre nega a condição do triângulo, o que ao meu ver está errado. O jeito é escrever uma outra condicional, que agora sei como é, para valores negativos, sem a função abs, como vi em outros algoritmos sobre o mesmo tema.

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

  • Membro VIP

Olá.

 

 

Sobre:

Em 06/09/2017 às 13:03, Simon Viegas disse:

ADENDO 2:

Será que essa "condição de existência" já protege contra lados negativos ou nulos (igual a 0)?

 

Respondendo:

Em 06/09/2017 às 15:48, deathcon4 disse:

Para números negativos também está correto, por causa da função abs, que sempre retorna um valor positivo.

Justamente, pois cada lado tem que ser maior que o módulo de algo, logo necessariamente esse lado tem que ser maior que 0. (pois 0 não pode ser maior que abs(0), ou seja, o não é maior que 0, e nem muito maior que abs("numero_negativo"), ou seja, 0 não é maior que algo maior que 0).

 

Respondendo:

Em 06/09/2017 às 15:48, deathcon4 disse:

É igual ao módulo da matemática. | a |. Por isso sempre nega a condição do triângulo, o que ao meu ver está errado

No caso seria o oposto... como demonstrado acima, está correto sempre negar, já que é impossível um número menor ou igual a zero ser maior que o módulo de qualquer número real!. O módulo de algo é sempre maior ou igual a zero (também chamado de "não negativo", ou seja, positivos mais o 0)!

 

 

 

Sobre:

Em 06/09/2017 às 13:03, Simon Viegas disse:

- Acho que o tipo devem ser real mesmo, pois os lados de um triângulo não são apenas inteiros. (de um modo geral, é claro)

 

Respondendo:

Em 06/09/2017 às 15:48, deathcon4 disse:

As vezes tem raiz de 2, raiz cúbica. São números fracionários.

Na verdade não só os irracionais, pode ser qualquer valor real positivo... Ex.: 0,0000000000001;  2,35;  425,847251, pi,  etc.

 

obs.: raízes de índices ímpares podem ser negativos, ex.: raiz_cúbica(-27) = -3.

 

 

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...