Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com questão de C


brayannayou

Pergunta

Olá, criei um código para resolver a seguinte questão do URI.

https://www.urionlinejudge.com.br/judge/pt/problems/view/1037

	#include <stdio.h>
#include <math.h>
int main()
{
    double A;
	    scanf("%lf", &A);
	    if((A>=0) && (A<=25))          //Se o A for maior ou igual a 0 e for menor ou igual a 25 será dado o printf
    {
        printf("Intervalo [0,25]\n");  // print da acima
	            if((A>25) && (A<=50))    //Se A for maior que 25 e for menor ou igual a 50 será dado o printf
            {
                printf("Intervalo (25,50]\n"); // print da acima
	                    if((A>50) && (A<=75))    //Se a for maior que 50 e for igual ou menor que 75 será dado o printf
                    {
                        printf("Intervalo (50,75]\n");    //print da acima
	                            if((A>75) && (A<=100))    //Se A for maior que 75 e for menor ou igual a 100 será dado o printf
                            {
                                printf("Intervalo (75,100]\n");    //print da acima
                
                            }
                    }
            }
    }
    else{
        printf("Fora do intervalo\n");    //Se tudo tiver errado ;-; , ai da isso... O código está compilando certinho, mas o problema está nas ifs (quase 100%) mas não consigo achar
                                        //poderia me ajudar? O imput 20.01 está dando Fora do intervalo, demonstrando que já tem erro 
    }
	    return 0;
}
	

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

suponho que ao comparar um double com um int o erro está nisso. A Solução arrumada de tal maneira funcionou corretamente:
 

#include <stdio.h>

int main() {
    float f;
    scanf ( "%f", &f );
    
    if(f < 0.0000)
        printf("Fora de intervalo\n");
    else if(f >= 0.0000 && f <= 25.0000)
        printf("Intervalo [0,25]\n");
    else if(f > 25.0000 && f <=50.0000)
        printf("Intervalo (25,50]\n");
    else if(f > 50.0000 && f <=75.0000)
        printf("Intervalo (50,75]\n");
    else if(f > 75.0000 && f <=100.0000)
        printf("Intervalo (75,100]\n");
    else if(f > 100.0000)
        printf("Fora de intervalo\n");
    
    return 0;
}


Para você fazer uma ideia do problema veja isso:

#include <stdio.h>

int main() {
    float f = 3.14;
    
    if (f == 3.14) printf( "igual");
    else        printf( "diferente");
    
    return 0;
}

Da errado não é?(diferente)
Pois é... o que acontece nesse caso é que você ta comparando f que é um float com 3.14 que é uma literal e nesse caso a literal é como se fosse um double. Se eu trocar o tipo de dado de f por double funcionaria. Vamos ver:

#include <stdio.h>

int main() {
    double f = 3.14;
    
    if (f == 3.14) printf( "igual");
    else        printf( "diferente");
    
    return 0;
}


Agora trata-se de comparar 2 doubles e então essa comparação é correta.
Outra forma de solucionar o problema é fazendo um cast desta forma:

#include <stdio.h>

int main() {
    float f = 3.14;
    
    if (f == (float)3.14) printf( "igual");
    else        printf( "diferente");
    
    return 0;
}

Nesse caso estamos informando que o valor literal 3.14 dentro do if trata-se explicitamente de um float, e não de um double, que é tomado de forma não transparente ao usuário(implicitamente) por não expor de forma clara de que tipo de dado o usuario quer que tome a literal já que 3.14 pode ser tanto float como double, e o compilador toma como double se o usuario não indicar que é float ou outra coisa, já que pode ser char, int, etc. >_<

Pode ser feito tambem if (f == 3.14f).

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...