Ir ao conteúdo
  • Cadastre-se
Vinicius Buzzacaro

RESOLVIDO Erro de cálculo no código

Recommended Posts

Bom, antes de mais nada, queria dizer que sou um estudante de ensino médio em período integral, e bem, estou começando agora a brincar com c++, logo, sou extremamente inexperiente e faço isso pois gostei da pegada dessa linguagem. 

 

Estava programando (ou tentando programar) um app pra rodar no CMD que calculasse os zeros de uma função quadrática, o resto do código parece estar ok (ou quase isso), o problema é que os resultados dos cálculos não batem com os resultados esperados.

 

Aqui vai o código:

 

#include <iostream>
#include <math.h>
#include <cmath>
using std::sqrt;

int main(int argc, char *argv[])

{
    using std::sqrt;
    int  a, b, c, Function_confirmation, Do_again_confirmation;
    double   x1,x2;
    
    
    printf("Calculador dos zeros da funcao!\n");
    system("pause");
    system("cls");
    printf("Digite o 'a' da sua funcao: ");
    scanf("%d", &a);
    system("cls");
    printf("Digite o 'b' da sua funcao: ");
    scanf("%d", &b);
    system("cls");
    printf("Digite o 'c' da sua funcao: ");
    scanf("%d", &c);
    system("cls");
    printf("%dx^2 + %dx + %d;\n", a, b, c);
    printf("Esta e sua funcao?\n Digite 0 para confirmar e 1 para digitar novamente: ");
    scanf("%d", &Function_confirmation);
    
    if(Function_confirmation==0)
        {
            x1 = -b+sqrt((b*b-4*a*c)); x2=-b-sqrt(b*b-4*a*c);
            printf("x1 = %d e x2 = %d\n", x1, x2);
        }
      
    else
        {
            while(Function_confirmation==1)
                   {
                           system("cls");
                           printf("Digite o 'a' da sua funcao: ");
                        scanf("%d", &a);
                        system("cls");
                        printf("Digite o 'b' da sua funcao: ");
                        scanf("%d", &b);
                        system("cls");
                        printf("Digite o 'c' da sua funcao: ");
                        scanf("%d", &c);
                        system("cls");
                        printf("%d * x^2 + %d * x + %d\n", a, b, c);
                         printf("Esta e sua funcao?\n Digite 0 para confirmar e 1 para digitar novamente: ");
                         scanf("%d", &Function_confirmation);
                   }
        }
    printf("Deseja realizar outro calculo?\n Digite 0 para confirmar e 1 para sair: ");
    scanf("%d", &Do_again_confirmation);
    
    if(Do_again_confirmation==0)
        {
                system("cls");
                printf("Digite o 'a' da sua funcao: ");
                   scanf("%d", &a);
                 system("cls");
                  printf("Digite o 'b' da sua funcao: ");
                 scanf("%d", &b);
                system("cls");
                 printf("Digite o 'c' da sua funcao: ");
                scanf("%d", &c);
                  system("cls");
                  printf("%d * x^2 + %d * x + %d\n", a, b, c);
                  printf("Esta e sua funcao?\n Digite 0 para confirmar e 1 para digitar novamente: ");
                 scanf("%d", &Function_confirmation);
    
    if(Function_confirmation==0)
        {
            x1 = -b+sqrt(b*b-4*a*c); x2=-b-sqrt(b*b-4*a*c);
            printf("x1 = %d e x2 = %d\n", x1, x2);
        }
      
    else
        {
            while(Function_confirmation==1)
                   {
                           system("cls");
                           printf("Digite o 'a' da sua funcao: ");
                        scanf("%d", &a);
                        system("cls");
                        printf("Digite o 'b' da sua funcao: ");
                        scanf("%d", &b);
                        system("cls");
                        printf("Digite o 'c' da sua funcao: ");
                        scanf("%d", &c);
                        system("cls");
                        printf("%d * x^2 + %d * x + %d\n", a, b, c);
                         printf("Esta e sua funcao?\n Digite 0 para confirmar e 1 para digitar novamente: ");
                         scanf("%d", &Function_confirmation);
                   }
        }
        
    printf("Deseja realizar outro calculo?\n Digite 0 para confirmar e 1 para sair: ");
    scanf("%d", &Do_again_confirmation);
    
        }
        
        system("pause");
        return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

OBS: Sei que na fórmula desse código ta faltando dividir tudo por 2*a, no outro código coloquei tudo dividido, mas o resultado ainda assim não bate.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está imprimindo x1 e x2 com %d sendo que são double. Imprima utilizando %lf.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu testei aqui e funcionou com 

Citação

printf("x1 = %lf e x2 = %lfn", x1, x2);

Eu nunca programei em C++, só C, então não tenho certeza, mas o meu aqui só funcionou colocando

Citação

#include <stdlib.h>

#include <stdio.h>

Talvez seja isso

Correção: Acho que sei qual o seu problema. Você não está fazendo a verificação se há raízes ou não, então ele imprime lixo de memória quando o Delta é 0 ou negativo. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando x^2 +6x +9 para teste, o resultado de x1 e x2 deveria dar -3, mesmo sem verificar, neste caso, era para o resultado ser coerente.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei aqui com 1 6 9 e deu -6 e -6, mas isso porque nesse código q você postou ainda não está com o divido por 2*a.

Você não mudou alguma coisa nesse seu código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra ter certeza que não mudei nada copiei o código ali em cima de novo e só mudei o %d por %lf e o resultado está dando nan, compilei com o dev-c++, será que isso pdoe interferir?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou com o Codeblocks, só mudei o %d para %lf e fiz o include da stdlib e stdio porque não roudou no codeblocks sem essas 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×