• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lesiano

Leitura de variáveis - Ordem interessa?

3 mensagens neste tópico

Boas;

main(){
       
       int X,Y,Z;
       
       scanf("%d %d %d",&X,&Y,&Z);
       
       if (((X+Y) < Z) || ((X+Z) < Y) || ((Z+Y) < X)) {
                                                     return 0;
                                                    }
       else{
             printf("Os 3 lados podem formar um triangulo.\n");
            }
            
       if (X == Y == Z){
                        printf("Trinangulo equilatero.\n");
                       }
       
       else if ((Y == Z) || (X == Y) || (X == Z)) {
                                                  printf("Trinangulo isosceles.\n");
                                                  }
       
       if ((X !=Y !=Z)) {
                         printf("Trinangulo escaleno.\n");
                        }
                
       getch();
       
       }

Experimentem trocar a linha " if ((X !=Y !=Z))" por " if ((Z !=Y !=X))". Levei quase 30 minutos a descobrir q estava aí o erro de ele nunca entrar no isósceles. A ordem da comparação de variáveis tem de ser a mesma da leitura? Se o X 'tiver na segunda posição, ele compara tb, o q tem lógica para mim, embora ñ perceba mt bem pq^.

Obg.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te posso responder exactamente à tua pergunta mas eu nunca vi tal coisa a ser feita, esse genero de comparações. Nem faço ideia se ai para o meio são && ou ||.

Se tivesse sido eu a fazer provavelmente teria feito:

X == Y && Y == Z

E no exemplo mais abaixo mas para o !=, fazia igual. Nem sabia que isso era possível.

Mas alguém mais especialista em C, irá responder-te brevemente de certeza...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sou nenhum especialista, mas cá vai... ::)

Não entrava no isósceles ou no escaleno?

As comparações que fizeste têm um significado diferente do que pretendias. São feitas left-to-right, o que significa que (X != Y != Z) é lido como ((X != Y) != Z), e (Z != Y != X) é lido como ((Z != Y) != X). Aposto que estavas a utilizar o valor 1 na variável X.

Por exemplo, para os valores X=1, Y=2, Z=3, o que acontece é:

(X != Y != Z) <=>

(1 != 2 != 3) <=>

((1 != 2) != 3) <=>

(1 != 3) = 1

e assim ele entra no if. Já se for ao contrário:

(Z != Y != X) <=>

(3 != 2 != 1) <=>

((3 != 2) != 1) <=>

(1 != 1) = 0

e ele não entra no if.

Tens que fazer a condição completa: (X != Y && Y != Z && X != Z)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora