# PBinfo #2667 – ec2i – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

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)

## Cod sursă C++

```cpp
#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;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2667)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2667/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2667/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
