lesiano Posted May 24, 2008 at 12:11 AM Report Share #187041 Posted May 24, 2008 at 12:11 AM 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. Link to comment Share on other sites More sharing options...
Guest id194 Posted May 24, 2008 at 12:18 AM Report Share #187043 Posted May 24, 2008 at 12:18 AM 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... Link to comment Share on other sites More sharing options...
TheDark Posted May 24, 2008 at 02:37 AM Report Share #187059 Posted May 24, 2008 at 02:37 AM 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) Desaparecido. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now