100p!
#1458. C++ va rog. Dau coroana pentru explicatii de rezolvare
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: \(\scriptsize ax^2+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:
# ecuatii.in ecuatii.out ecuaţie
1 3x^2-x-4 -1.00 1.33 \(\scriptsize 3x^2-x-4=0\)
2 x^2-8x+16 4.00 \(\scriptsize x^2-8x+16=0\)
3 -x^2-8x+16 -9.66 1.66 \(\scriptsize -x^2-8x+16=0\)
4 3x^2-x+0 0.00 0.33 \(\scriptsize 3x^2-x=0\)
5 4x^2+x+16 -1 \(\scriptsize 4x^2+x+16=0\)
6 x^2+0x-4 -2.00 2.00 \(\scriptsize x^2-4=0\)
Ouroboros:
Apropo... orice rezolvare corecta este buna, insa prefer rezolvarile care nu implica utilizarea librariei <query>
Răspunsuri la întrebare
Răspuns de
1
Prea multe explicatii nu-ti trebuie pt ecuatia de gradul al II-lea. Daca sti formula ec de grII ai s-o intelegi. Succes!
#include <bits/stdc++.h>
using namespace std;
char c[20];
int n, i, j, a, b, cc, d;
double x1, x2, s;
bool semn;
int main()
{
ifstream f("ecuatii.in");
ofstream g("ecuatii.out");
f >> c;
while(i < strlen(c))
{
if(c[i] == 'x' && c[i + 1] == '^')
{
if(n == 0 && (c[i - 1] == '-' || c[i - 1] == '+' || i == 0)) n = 1;
if(semn == 0) a = a + n;
else a = a - n;
n = 0;
i = i + 2;
}
else if(c[i] == 'x')
{
if(n == 0 && (c[i - 1] == '-' || c[i - 1] == '+' || i == 0)) n = 1;
if(semn == 0) b = b + n;
else b = b - n;
n = 0;
}
else if(c[i] == '+') semn = 0;
else if(c[i] == '-') semn = 1;
else n = n * 10 + (c[i] - '0');
i ++;
}
if(semn == 0) cc = cc + n;
else cc = cc - n;
d = b * b;
d = d - (4 * a * cc);
if(d < 0) g << -1;
else if(d == 0)
{
x1 = -b;
x1 = double(x1) / (2 * a);
g << fixed << setprecision(2) << x1;
}
else
{
s = double(sqrtl(d));
x1 = -b;
x1 = x1 - s;
x1 = double(x1) / (2 * a);
x2 = -b;
x2 = x2 + s;
x2 = double(x2) / (2 * a);
if(x1 < x2)
{
g << fixed << setprecision(2) << x1 << " ";
g << fixed << setprecision(2) << x2 << '\n';
}
else
{
g << fixed << setprecision(2) << x2 << " ";
g << fixed << setprecision(2) << x1 << '\n';
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
char c[20];
int n, i, j, a, b, cc, d;
double x1, x2, s;
bool semn;
int main()
{
ifstream f("ecuatii.in");
ofstream g("ecuatii.out");
f >> c;
while(i < strlen(c))
{
if(c[i] == 'x' && c[i + 1] == '^')
{
if(n == 0 && (c[i - 1] == '-' || c[i - 1] == '+' || i == 0)) n = 1;
if(semn == 0) a = a + n;
else a = a - n;
n = 0;
i = i + 2;
}
else if(c[i] == 'x')
{
if(n == 0 && (c[i - 1] == '-' || c[i - 1] == '+' || i == 0)) n = 1;
if(semn == 0) b = b + n;
else b = b - n;
n = 0;
}
else if(c[i] == '+') semn = 0;
else if(c[i] == '-') semn = 1;
else n = n * 10 + (c[i] - '0');
i ++;
}
if(semn == 0) cc = cc + n;
else cc = cc - n;
d = b * b;
d = d - (4 * a * cc);
if(d < 0) g << -1;
else if(d == 0)
{
x1 = -b;
x1 = double(x1) / (2 * a);
g << fixed << setprecision(2) << x1;
}
else
{
s = double(sqrtl(d));
x1 = -b;
x1 = x1 - s;
x1 = double(x1) / (2 * a);
x2 = -b;
x2 = x2 + s;
x2 = double(x2) / (2 * a);
if(x1 < x2)
{
g << fixed << setprecision(2) << x1 << " ";
g << fixed << setprecision(2) << x2 << '\n';
}
else
{
g << fixed << setprecision(2) << x2 << " ";
g << fixed << setprecision(2) << x1 << '\n';
}
}
return 0;
}
Alte întrebări interesante
Engleza,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă