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'
, 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 .
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!