Ir ao conteúdo

Posts recomendados

Postado

ola estou aqui novamente com mais uma questão do site uri a questão 1036, tentei ver se alguém do fórum da uri me ajudava, mas não deu, alguém poderia achar o erro no código pois esta dando Wrong answer (20%), eu não consigo ver o problema.

#include <iostream>
#include <math.h>

using namespace std;
 
int main() {
    double a,b,c;
    double x1,x2,delta;
    
    cin >> a >> b >> c;
    
    x1 = (((-b) + sqrt((pow(b,2) - 4*a*c)))/(2*a));
    x2 = (((-b) - sqrt((pow(b,2) - 4*a*c)))/(2*a));
    // Imprime os resultados
    
    if(delta >= 0){
        cout<<fixed;
        cout.precision(5);
        cout << "R1 = " << x1 << "\n" << "R2 = " << x2 << endl;
    }else{
        cout << "Impossivel calcular" << endl;
    }
    return 0;
}

 

  • Obrigado 1
Postado

@Miguel_G_Silvestre    você precisa fazer todos os casos de testes que estão site , e nesse exercício são quatro casos , e no segundo e quarto caso está errado a resposta , pois está escrevendo  " nan   nan " e deveria escrever Impossível de calcular , e não consegui descobrir o motivo ,  vou pesquisar e depois posto alguma coisa .

  • Curtir 1
Postado
1 hora atrás, Miguel_G_Silvestre disse:

ola estou aqui novamente com mais uma questão do site uri a questão 1036, tentei ver se alguém do fórum da uri me ajudava, mas não deu, alguém poderia achar o erro no código pois esta dando Wrong answer (20%), eu não consigo ver o problema

 

Podia mesmo postar o endereço do site ou ao menos a questão aqui para quem quer ajudar e não tem noção do que seja uri.

  • Curtir 1
  • Obrigado 1
Postado

URI Online Judge | 1036

Fórmula de Bhaskara

Leia 3 valores de ponto flutuante e efetue o cálculo das raízes da equação de Bhaskara. Se não for possível calcular as raízes, mostre a mensagem correspondente “Impossivel calcular”, caso haja uma divisão por 0 ou raiz de numero negativo.

Entrada

Leia três valores de ponto flutuante (double) A, B e C.

Saída

Se não houver possibilidade de calcular as raízes, apresente a mensagem "Impossivel calcular". Caso contrário, imprima o resultado das raízes com 5 dígitos após o ponto, com uma mensagem correspondente conforme exemplo abaixo. Imprima sempre o final de linha após cada mensagem.

 

Exemplos de Entrada                                Exemplos de Saída

 

10.0 20.1 5.1                                             R1 = -0.29788

                                                                  R2 = -1.71212

 

0.0 20.0 5.0                                               Impossivel calcular

 

10.3 203.0 5.0                                           R1 = -0.02466

                                                                  R2 = -19.68408

 

10.0 3.0 5.0                                               Impossivel calcular

 

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

 

  • Curtir 1
  • Obrigado 1
Postado

Melhor! Bem melhor!

 

Alguém aqui do forum, acho que @devair1010 tinha me dito no ano passado que isso era de uma universidade do sul, mas eu não me lembrava mais.

 

Sobre o seu programa:

  double x1,x2,delta;
    
    cin >> a >> b >> c;
    
    x1 = (((-b) + sqrt((pow(b,2) - 4*a*c)))/(2*a));
    x2 = (((-b) - sqrt((pow(b,2) - 4*a*c)))/(2*a));
    // Imprime os resultados
    
    if(delta >= 0){
        cout<<fixed;
        cout.precision(5);
        cout << "R1 = " << x1 <<

Onde está aquela parte em que você calcula o valor de delta?

 

Outro palpite, para você não perder tempo com esse tipo de programa em que você tem algum tipo de exemplo:

 

Recortar e Colar. Veja

// 1
    a = 10.0,  b = 20.1, c = 5.1; 
    cout << "[a,b,c] = [" << a <<
        ", " << b <<
        ", " << c <<
        "] (res= -0.29788, -1.71212)" << endl;
// 2
    a = 0, b = 20.0, c = 5.0;
    cout << "[a,b,c] = [" << a <<
        ", " << b <<
        ", " << c <<
        "] (impossivel)" << endl;
// 3
    a = 10.3, b = 203.0, c = 5.0;
    cout << "[a,b,c] = [" << a <<
        ", " << b <<
        ", " << c <<
        "] (res= -0.02466, -19.68408)" << endl;
// 4
    a = 10.0, b = 3.0, c = 5.0;
    cout << "[a,b,c] = [" << a <<
        ", " << b <<
        ", " << c <<
        "] (impossivel)" << endl;

Esses são os quatro testes do enunciado. Coloque isso antes de tudo e não seja paciente a ponto de ficar digitando para testar. 

Quando funcionar você comenta essa parte e envia o código. Mais simples.

 

 

 

 

adicionado 16 minutos depois

Espero que tenha entendido o que eu expliquei sobre usar os valores do enunciado antes de tudo. É algo que economiza muito tempo de quem está aprendendo. Ou talvez competindo.

 

A fórmula que você está usando é um quociente e o denominador é (2a). Onde você testou para ver se isso é zero? Não testou. Claro que os caras vão testar e vai dar erro certo? Eles ainda foram legais e mostraram isso no exemplo do enunciado e nem assim você testou. Foi mal.


Seu programa:

 

image.png.187639ae771efd9b48a4b51b4de2c6a0.png


Claro que se o cara digitar 0 seu programa já era. Não precisamos nem saber o que ele tenta calcular: Olha o 2*a depois da barra ... Isso quer dizer divisão por zero.

 

Veja uma possibilidade. É o seu programa na verdade. Só digitei sobre o texto

#include <iostream>
#include <math.h>

using namespace std;

int main() {
    double a, b, c;
    double x1, x2, delta;

    //cin >> a >> b >> c;
    //a = 10.0,  b = 20.1, c = 5.1; 
    //cout << "[a,b,c] = [" << a <<
    //    ", " << b <<
    //    ", " << c <<
    //    "] (res= -0.29788, -1.71212)" << endl;

    //a = 0, b = 20.0, c = 5.0;
    //cout << "[a,b,c] = [" << a <<
    //    ", " << b <<
    //    ", " << c <<
    //    "] (impossivel)" << endl;

    a = 10.3, b = 203.0, c = 5.0;
    cout << "[a,b,c] = [" << a <<
        ", " << b <<
        ", " << c <<
        "] (res= -0.02466, -19.68408)" << endl;

    //a = 10.0, b = 3.0, c = 5.0;
    //cout << "[a,b,c] = [" << a <<
    //    ", " << b <<
    //    ", " << c <<
    //    "] (impossivel)" << endl;

    // a formula termina em um quociente: 2 * a
    if (a == 0)
    {
        cout << "Impossivel calcular" << endl;
        return 0;
    };  // if

    delta = (b * b) - (4 * a * c);
    if (delta < 0) 
    {
        cout << "Impossivel calcular" << endl;
        return 0;
    };  // if

    x1 = (-b + sqrt(delta)) / (2 * a);
    x2 = (-b - sqrt(delta)) / (2 * a);
    cout << fixed;
    cout.precision(5);
    cout << "R1 = " << x1 << "\n" << "R2 = " << x2 << endl;
    return 0;
}

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

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

×
×
  • Criar novo...