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șareal
ș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șareale
ș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șaimaginare
și apoi, pe următorul rând, se vor afișa'A B'
, undeA=−b2a șiB=△√2a , cu semnificația că soluțiile ecuației suntA±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∈Z⋂[−10.000,+10.000] șia nenul;^
reprezintă ridicarea la putere, adicăx^2
este echivalent cux2 X
∈ ['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)
#include <bits/stdc++.h> using namespace std; char s[101]; char m[101][101]; char v[101] , p = 0; bool putere(char a[]) { int i = 0; while(a[i]) { if(a[i] == '^') return true; i++; } return false; } bool c(char ch) { return ch >= 'a' && ch <= 'x'; } bool lit(char ch) { return ch >= '0' && ch <= '9'; } bool cif(char a[]) { int i = 0; while(a[i]) { if(c(a[i])) return false; i++; } return true; } int main() { cin >> s; int i = 0; int cnt = 0 , j = 0; if(!(s[0] == '-' || s[0] == '+')) v[p] = '+' , p++; while(s[i]) { if((s[i] == '-' || s[i] == '+')) { v[p] = s[i]; p++; if(i > 0) cnt++; j = 0; } else m[cnt][j] = s[i] , j++; i++; } int ia , ib , ic; for(int i = 0 ; i <= cnt ; ++i) { if(putere(m[i])) ia = i; else if(cif(m[i])) ic = i; else ib = i; } int a = 0 , b = 0 , cc = 0; i = 0; while(lit(m[ia][i])) { a = a * 10 + m[ia][i] - '0'; i++; } i = 0; while(lit(m[ib][i])) { b = b * 10 + m[ib][i] - '0'; i++; } i = 0; while(lit(m[ic][i])) { cc = cc * 10 + m[ic][i] - '0'; i++; } if(v[ia] == '-') a = a * (-1); if(v[ib] == '-') b = b * (-1); if(v[ic] == '-') cc = cc * (-1); int delta = b * b - 4 * a * cc; if(delta < 0) cout << "imaginare" << endl; else if(delta == 0) cout << "real" << endl; else cout << "reale" << endl; if(delta == 0) { cout << ((-1) * b) / (2 * a); } if(delta > 0) { double x1 = ((-1) * b + sqrt(delta)) / (2 * a); double x2 = ((-1) * b - sqrt(delta)) / (2 * a); cout <<min( x1 , x2 ) << ' ' << max (x2 , x1); } if(delta < 0) { delta = delta*(-1); double md = sqrt(delta) / (2 * a) , ms = (double)((-1) * b) / (2 * a); cout << ms << ' ' << md << 'i'; } return 0; }