Jump to content
Fórum Script Brasil

Resolvedor de equações quadráticas


Recommended Posts

Olá, amigos.

Poderiam me dizer o que acham do meu programa? Críticas, sugestões, etc. .

#include <iostream>
#include <locale>
#include <math.h>
#include <cmath>
#include <complex>
#include <windows.h>
#include <conio.h>
#include <limits>
using namespace std;

float a = 0; float b = 0; float c = 0;float x1 = 0; float x2 = 0;
double Delta = 0;
bool repetir = false;
int i = 0; int Sim_ou_Nao = 0;

void Instrucoes(bool);
void ClearScreen();
float Descobrir_Coeficientes (float,float,float, bool);
float Calcular_Raizes(float, float, float);
float Mostrar_Raizes (float,float);
float Mostrar_Raizes_Complexas(float,float, float);
bool Repetir(bool);

void Instrucoes(bool repetir)
{
    if ( (i == 0 ) || (repetir == true))
    {
    cin.sync();
    cout << "\não digitar os coeficientes, utilize apenas números e o '.' para representar\nnúmeros decimais." << endl;
    cout << "\nNão utilize frações nem expoentes. " << endl << endl;
    cout << "Pressione qualquer tecla para continuar" << endl;
    getch();
    cout << "------------------------------------------------------------------------------" << endl;
    Descobrir_Coeficientes(a,b,c, repetir);
    }
}

void ClearScreen()
  {
  HANDLE                     hStdOut;
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  DWORD                      count;
  DWORD                      cellCount;
  COORD                      homeCoords = { 0, 0 };

  hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
  if (hStdOut == INVALID_HANDLE_VALUE) return;

  /* Get the number of cells in the current buffer */
  if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
  cellCount = csbi.dwSize.X *csbi.dwSize.Y;

  /* Fill the entire buffer with spaces */
  if (!FillConsoleOutputCharacter(
    hStdOut,
    (TCHAR) ' ',
    cellCount,
    homeCoords,
    &count
    )) return;

  /* Fill the entire buffer with the current colors and attributes */
  if (!FillConsoleOutputAttribute(
    hStdOut,
    csbi.wAttributes,
    cellCount,
    homeCoords,
    &count
    )) return;

  /* Move the cursor home */
  SetConsoleCursorPosition( hStdOut, homeCoords );
  }

float Descobrir_Coeficientes(float a, float b, float c, bool repetir)
{
    cin.sync();
    cout << "\nDigite o valor do coeficiente que acompanha x²:" << endl;
    cin >> a;
    cin.sync();
    if(!cin) // or if(cin.fail())
    {
    // user didn't input a number
    cin.clear(); // reset failbit
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
    // next, request user reinput
    cout << "O coeficiente precisa ser um número." << endl << endl;
    getch();
    ClearScreen();
    Descobrir_Coeficientes(a,b,c,repetir);
    }
    if (a == 0)
    {
        cout << "\nEsse coeficiente não pode ser nulo. Digite novamente." << endl;
        Descobrir_Coeficientes(a,b,c,repetir);
    }
    else
    {
    cin.sync();
    cout << "\nDigite o valor do coeficiente que acompanha x" << endl;
    cin >> b;
    if(!cin) // or if(cin.fail())
    {
    // user didn't input a number
    cin.clear(); // reset failbit
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
    // next, request user reinput
    cout << "\n\nO coeficiente precisa ser um número." << endl << endl;
    getch();
    ClearScreen();
    Descobrir_Coeficientes(a,b,c,repetir);
    }
    }
    cin.sync();
    cout << "\nDigite o valor do coeficiente do termo independente" << endl;
    cin >> c;
    if(!cin) // or if(cin.fail())
    {
    // user didn't input a number
    cin.clear(); // reset failbit
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
    // next, request user reinput
    cout << "\n\nO coeficiente precisa ser um número." << endl << endl;
    getch();
    ClearScreen();
    Descobrir_Coeficientes(a,b,c,repetir);
    }
    cin.sync();
    i++;
    Calcular_Raizes(a,b,c);
     return 0;
    }

float Calcular_Raizes(float a, float b,float c)
{
    double x_1 = 0; double x_2 = 0;
    Delta = pow(b,2) - 4*a*c;
    if (Delta < 0)
    {
        Mostrar_Raizes_Complexas(a,b,c);
    }
    else
    {
        x_1 = (-b + sqrt(Delta))/(2*a);
        x_2 = (-b - sqrt(Delta))/(2*a);

    x1 = x_1; x2 = x_2;

    Mostrar_Raizes(x1,x2);
    }
    return 0;
}

float Mostrar_Raizes(float x1, float x2)
{
    cout << "\nAs raízes da equação dada são " << x1 << " e " << x2 << endl;
    cout << "\nPressione qualquer tecla para continuar." << endl;
    getch();
    cout << "------------------------------------------------------------------------------" << endl;
    cin.sync();
    Repetir(repetir);
    return 0;
}

float Mostrar_Raizes_Complexas(float a,float b, float c)
{
    float Parte_Real = -b/(2*a);
    float Delta_Imaginario = abs(pow(b,2) - 4*a*c);
    float Imaginario = (sqrt(Delta_Imaginario))/(2*a);
    complex<float> x1C(Parte_Real,Imaginario) ;
    complex<float> x2C(Parte_Real,-Imaginario);

    cout << "\nAs raízes da equação dada são " << real(x1C) << "+" <<  imag(x1C) << "i" << " e " << real(x2C) <<  imag(x2C) << "i"<< endl;
    cout << "\nPressione qualquer tecla para continuar." << endl;
    getch();
    cout << "------------------------------------------------------------------------------" << endl;
    cin.sync();
    Repetir(repetir);
    return 0;
}

bool Repetir (bool repetir)
{
    cout << "\n\nDeseja usar o programa novamente?(1/2)" << endl;
    cin >> Sim_ou_Nao;
    cin.sync();
    if (Sim_ou_Nao == 1)
    {
        repetir = true;
        cin.sync();
        ClearScreen();
        Instrucoes(repetir);
    }
    else if ( Sim_ou_Nao == 2)
    {
     cout << "\nAdeus!" << endl;
    }
    else if(!cin) // or if(cin.fail())
    {
    // user didn't input a number
    cin.clear(); // reset failbit
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
    // next, request user reinput
        cout << "\nOpção inválida." << endl << endl;
        Repetir(repetir);
    }
    return 0;
}

int main()
{
    SetConsoleTitle("Resolvedor de Equacoes do Segundo Grau");
    setlocale(LC_ALL, "Portuguese");
    Instrucoes(repetir);
    return 0;
}

Grato pela atenção.

Att.,

Pedro

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...