Rezolvare completă PbInfo #2667 ec2i

Ecuație de gradul II

Fie aX^2+bX+c=0 o ecuație de gradul al doilea. Determinați soluțiile complexe ale acestei ecuații.

Date de intrare

Programul citește de la tastatură o expresie de gradul al doilea sub forma unui șir de caractere ce poate conține o singură literă mică (notată mai jos, general, cu X), cifre și simbolurile +, -, ^, reprezentând membrul stâng al ecuației. Pentru clarificare, vezi exemplele de mai jos.

Date de ieșire

  • Dacă ∆=0, se va afișa real și apoi, pe următorul rând, un număr rațional ce reprezintă singura soluție posibilă a ecuației;
  • Dacă ∆>0, se va afișa reale și apoi, pe următorul rând, se vor afișa două numere raționale ce reprezintă soluțiile ecuației în ordine crescătoare;
  • Dacă ∆<0, se va afișa imaginare și apoi, pe următorul rând, se vor afișa 'A B', unde \(A = \frac{-b}{2a}\) și \(B = \frac{ \sqrt{\triangle}}{2a} \), cu semnificația că soluțiile ecuației sunt \( A\pm B \).

Restricții și precizări

  • Expresia dată, cu termenii reașezați descrescător după putere, este de forma aX^2+bX+c.
  • \( a,b,c\in\mathbb{Z} \bigcap {[-10.000, +10.000]} \) și \(a\) nenul;
  • ^ reprezintă ridicarea la putere, adică x^2 este echivalent cu \(x^2\)
  • X \( \in \) ['a', 'z'];
  • Se acceptă o eroare de maximum \( 10^{-2} \).

Exemple:

Exemplul 1:

Intrare

-5x+2x^2+3

Ieșire

reale
1 1.5

Explicație

∆ = 1 (>0)

Exemplul 2:

Intrare

1v^2+9-6v

Ieșire

real
3

Explicație

∆ = 0

Exemplul 3:

Intrare

3a^2+4a+2

Ieșire

imaginare
-0.66 0.47i

Explicație

∆ = -8 (<0)

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema ec2i:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    long long a, b, c, aux;
    long double delta;
    char chr;

    cin >> aux >> chr;
    if(chr == '+' || chr == '-')
        c = aux;
    else
    {
        cin.get(chr);
        if(chr == '^')
        {
            cin.get(chr); // 2
            cin.get(chr); // +/-
            a = aux;
        }
        else b = aux;
    }

    cin >> aux;
    if(chr == '-')
        aux *= -1;
    cin.get(chr);
    if(chr == '+' || chr == '-')
        c = aux;
    else
    {
        cin.get(chr);
        if(chr == '^')
        {
            cin.get(chr); // 2
            cin.get(chr); // +/-
            a = aux;
        }
        else b = aux;
    }

    cin >> aux;
    if(chr == '-')
        aux *= -1;
    if(!cin.get(chr))
        c = aux;
    else
    {
        if(cin.get(chr) && chr == '^')
        {
            cin.get(chr); // 2
            cin.get(chr); // +/-
            a = aux;
        }
        else b = aux;
    }

    delta = (long double)b * (long double)b - (long double)4 * a * c;
    if(-0.2 < delta && delta < 0.2) // pentru a fi siguri ca delta == 0
    {
        cout << "real\n" << (long double)-b/(long double)(2*a);
    }
    else if(delta > 0)
    {
        cout << "reale\n";
        cout << ((long double)-b-sqrt(delta))/(long double)(2*a) << '\n';
        cout << ((long double)-b+sqrt(delta))/(long double)(2*a);
    }
    else // delta < 0
    {
        cout << "imaginare\n";
        cout << (long double)-b/(long double)(2*a) << '\n';
        cout << sqrt(-delta)/(long double)(2*a) << 'i';
    }

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2667 ec2i

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2667 ec2i de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!