TOPIC

PROBLEM 1963 - URI Fórum 1.0

URI Online Judge asked 5 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Gustavo Marini replied 4 years ago

    Olá! O problema pede para que você leia os valores em uma linha. Em C# (e algumas outras linguagens) esse processo precisa ser feito de uma maneira diferente. No seu caso, a entrada pode ser feita da seguinte maneira:

    string[] valores = Console.ReadLine().Split();
    A = Double.Parse(valores[0]);
    B = Double.Parse(valores[1]);

    Além disso, a função matemática Round() vai arredondar seu valor para duas casas decimais somente se as duas ou mais existirem. Repare nos exemplos abaixo:

    Para que o código seja aceito nesse problema, o segundo exemplo (valor b) tem que retornar 15.30, e por isso a função Round() não funciona aqui. Para aplicar a precisão no valor você pode formatar o mesmo, transformando-o em uma string, desta forma:

    Console.Write(c.ToString("0.00") + "%\n");

    assim, ele irá imprimir duas casas após o ponto, independentemente do número de casas do valor original.

    MOD
  • Eric Saboia replied 4 years ago

    Olá, fiz o seguinte código:

    using System;
    
    class URI
    {
    
        static void Main(string[] args)
        {
            double A, B;
            A = Convert.ToDouble(System.Console.ReadLine().Trim());
            B = Convert.ToDouble(System.Console.ReadLine().Trim());
            double c = Math.Round((B - A) / A * 100.00, 2);
            Console.Write(c.ToString() + "%\n");
        }
    }

    No entanto está sempre me dando runtime error, alguém sabe o que é? Obrigado!

  • Unknown replied 4 years ago

    Incluí algumas entrada no uDebug que podem ajudar a encontrar o erro.

    PS: Como já foi dito em uma mensagem acima, para variáveis com valores fracionários utilize sempre tipo double, não float.

  • Felipe Derkian replied 4 years ago

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
        float a , b;
        double div =0.0;
        double resp = 0;
        a=0.0;b=0.0;div=0.0;resp=0.0;
        scanf("%f %f",&a,&b);
    
            div = b/a;
            resp = ((div -1)*100);
    
        printf("%.2f%%\n",resp);
    
    }

    alguem pode me ajudar... já testei no debug para dar negativo ou positivo e resultador e esta normal as respostas

    MOD
  • Felipe Derkian replied 4 years ago

    oi tudo bom galera? alguem pode me ajudar esta dando 10% de erro , valeu;

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
        float a , b;
        double div =0.0;
        double resp = 0;
        a=0.0;b=0.0;div=0.0;resp=0.0;
        scanf("%f %f",&a,&b);
        if(a > 0 && a<=b && b<=1000.00){
    
            div = b/a;
            resp = ((div -1)*100);
    
        printf("%.2f%%\n",resp);
    
        }
    }
    MOD
  • leandro.zatesko.alunos replied 4 years ago

    Simples. Nunca utilize float. Com 32 bits você tem muito pouca precisão para trabalhar. Estude um pouco o padrão de representação numérica em ponto flutuante que você vai entender por que.

    Meu conselho: evite usar ponto flutuante sempre que possível. Se realmente necessário, use double.

    Perceba que é perfeitamente possível, neste problema, trabalhar apenas com inteiros, sem precisar de ponto flutuante. Com double também passa (eu, que sou o autor do problema, fi-lo para que double passasse). Mas é um ótimo exercício tentar passá-lo só com inteiros. Fica aí o desafio :)

  • Victor M. Azevedo replied 4 years ago

    Galera, já consegui realizar esse exercício. Porém, minha dúvida aqui fica quanto ao uso do float ou do double.

    Compilando meu código aqui no CodeBlocks, deu certo utilizando float, porém usando float aqui no URI o código não é aceito.

    Gostaria de saber qual o motivo e como saber quando devo utilizar o Float ou o Double.

    Grato desde já!!!

  • Israel Pinheiro Ruas Junior replied 4 years ago

    Accepted Faltava a cereja do bolo! haha

    Obrigado pela dica! Eu sou novo em C++ e não tinha conhecimento do fixed.

  • 🧙The Install Wizard 🧙 replied 4 years ago

    Use isso para remover a notação cientifica:

    cout << fixed << setprecision(2) << por << endl;

  • Israel Pinheiro Ruas Junior replied 4 years ago

    [Accepted]

    Galera não sei o que está de errado, tem valores que são impressos certos, outros em notação cientifica e inteiros tb! Já fiz várias modificações, mas nada resolve.

    Agradeço desde já.

  • Gabriel Guerra replied 5 years ago

    Obrigado aos dois. Era apenas isso :)

  • Alaa Zaid replied 5 years ago

    use double instead of float.

  • 🧙The Install Wizard 🧙 replied 5 years ago

    ja tentou usar double ?

  • Gabriel Guerra replied 5 years ago

    Sinceramente não sei o que fiz de errado

    Problema resolvido.

    Recebi WA 10%

  • Alaa Zaid replied 5 years ago

    Wrong problem Category..

    Right Category is Beginner.