Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
deathcon4

VisualG Condicional com vários E lógicos

Recommended Posts

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.

Editado por DiF
Botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

    Editado por Simon Viegas

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×