fbpx

Problema #1458 – ecuatii_grad_2 – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Dându-se o ecuaţie de gradul 2, să se scrie un program care determină soluţiile acestei ecuaţii.

Date de intrare

Fișierul de intrare ecuatii.in conține pe prima linie un şir de caractere de forma ax^2+bx+c, reprezentând o ecuaţie de gradul 2: ax2+bx+c=0ax2+bx+c=0

Date de ieșire

Fișierul de ieșire ecuatii.out va conține soluţiile acestei ecuaţii, cu 2 zecimale exacte, sperate printr-un spaţiu. Dacă ecuaţia nu are soluţii reale, se va afişa -1. Dacă ecuaţia are o singură soluţie reală, se va afişa numai aceasta, cu 2 zecimale exacte.

Restricții și precizări

  • a, b, c ∈ [-10 3 , 10 3 ], a≠0
  • Dacă valorile a şi b nu sunt precizate (ex: x^2+x+1=0), acestea vor fi egale cu 1 sau -1, în funcţie de semn (vedeţi exemplele)
  • Dacă ecuaţia are 2 soluţii reale, se va afişa cea mai mică, urmată de cea mai mare

Exemple:

#include <bits/stdc++.h>



using namespace std;

ifstream cin("ecuatii.in");
ofstream cout("ecuatii.out");

int main()
{
    char ch;
    cin >> ch;
    int a = 0;
    bool negativ=false;
    int cnt=0;
    while(ch != 'x')
    {
        if(ch == '-')
            negativ=true;
        else
            a=a*10+(int)ch - 48 , cnt++;
        cin >> ch;
    }
    if(cnt==0)
        a=1;
    if(negativ)
        a*=-1;
    negativ=false;
    while(ch !='-' && ch !='+')
        cin >> ch;
    int b = 0;
    if(ch == '+')
    {
        cin >> ch;
        bool ok=true;
        if(ch=='x')
            ok=false;
        while(ch != 'x')
        {
            b = b * 10 + (int)ch - 48;
            cin >> ch;
        }
        if(!ok)
            b=1;
    }
    else
    {
        cin >> ch;
        bool ok=true;
        if(ch=='x')
            ok=false;
        while(ch != 'x')
        {
            b = b * 10 + (int)ch - 48;
            cin >> ch;
        }
        if(!ok)
            b=1;
        b*=-1;
    }
    int c;
    cin >> ch;
    if(ch=='+')
        cin >> c;
    else
        cin >> c , c *= -1;
    float delta = b * b - 4 * a * c;
    if(delta < 0)
        cout << -1;
    else if(delta == 0)
    {
        float rez = - b / (2 * a);
        cout << fixed << setprecision(2) << rez;
    }
    else
    {
        float delta1 = sqrt(delta);
        float rez1 = (-b + delta1) / (2 * a);
        float rez2 = (-b - delta1) / (2 * a);
        if(rez1 > rez2)
            swap(rez1 , rez2);
        cout << fixed << setprecision(2) << rez1 << ' ' << rez2;
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa