Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <complex>
- #include <cstdlib>
- #include <iostream>
- #include <locale.h>
- #include <math.h>
- using namespace std;
- const double Pi = 3.14159;
- const double zero = 0.00000001;
- double A, B, C, D, p, q, Delta;
- int wybor;
- int main() {
- setlocale(LC_CTYPE, "Polish");
- cout
- << "Witam w programie do obliczania\npierwiastkow wielomianu 3-stopnia\n";
- for (;;) {
- cout << "-------------------------------" << endl << "\n";
- cout << "1 - zacznij liczyć pierwiastki wielomianu\n";
- cout << "2 - wyjdź z programu\n";
- cin >> wybor;
- switch (wybor) {
- case 1:
- system("cls");
- cout << "\nPodaj A (A!=0): ";
- cin >> A;
- while (A == 0) {
- system("cls");
- cout << "\nBŁĄD !!!! Podaj A (A!=0): ";
- cin >> A;
- }
- cout << "Podaj B: ";
- cin >> B;
- cout << "Podaj C: ";
- cin >> C;
- cout << "Podaj D: ";
- cin >> D;
- p = (C / A) - (B * B) / (3.0 * A * A);
- cout << "\np = " << p;
- q = ((2.0 * B * B * B) / (27.0 * A * A * A)) + (D / A) -
- ((B * C) / (3.0 * A * A));
- cout << "\nq = " << q;
- // Delta = ((q * q) + (4.0 * p * p * p)) / 27.0;
- Delta = pow(q / 2.0, 2.0) + pow(p / 3.0, 3.0);
- cout << "\nDelta = " << Delta << endl;
- cout << "-------------------------------" << endl;
- if (Delta > 0) {
- complex<double> x2;
- complex<double> x3;
- complex<double> wynik;
- double x1;
- double u, v;
- u = pow(-(q / 2.0) + sqrt(abs(Delta)), 1.0 / 3.0);
- v = pow(abs(-(q / 2.0) - sqrt(abs(Delta))), 1.0 / 3.0);
- x1 = u - v - (B / (3 * A));
- x2 = (-(1.0 / 2.0) * (u - v) - (B / (3 * A))) +
- (1i * (sqrt(3.0) / 2.0) * (u + v));
- x3 = (-(1.0 / 2.0) * (u - v) - (B / (3 * A))) -
- (1i * (sqrt(3.0) / 2.0) * (u + v));
- cout << "x1 = " << x1 << endl;
- cout << "x2 = " << real(x2) << " +j " << imag(x2) << endl;
- cout << "x3 = " << real(x3) << " -j " << abs(imag(x3)) << endl;
- // sprawdzenie
- cout << x2 << endl;
- cout << x3 << endl;
- wynik = A * pow(x2, 3) + B * pow(x2, 2) + C * pow(x2, 1) + D;
- cout << wynik << endl;
- }
- else if (Delta < 0) {
- double y1, y2, y3, x1, x2, x3;
- double u, v;
- u = 2 * sqrt(abs(p / 3.0));
- v = acos(((-1.0 * q) / 2.0) * pow(abs(3 / p), 3.0 / 2.0));
- y1 = u * cos(v / 3.0);
- y2 = u * cos((v + 2 * Pi) / 3.0);
- y3 = u * cos((v + 4 * Pi) / 3.0);
- x1 = y1 - (B / (3.0 * A));
- x2 = y2 - (B / (3.0 * A));
- x3 = y3 - (B / (3.0 * A));
- cout << "x1 = " << x1 << endl;
- cout << "x2 = " << x2 << endl;
- cout << "x3 = " << x3 << endl;
- /* double F = (((3.0 * C) / A) - ((B * 😎 / (A * A))) / 3.0;
- double G = (((2.0 * B * B * 😎 / (A * A * A)) - ((9.0 * B * C) / (A *
- A)) + ((27.0 * D) / A)) /27.0; double H = ((G * G) / 4.0) + ((F * F *
- F) / 27.0); double I = sqrt(((G * G) / 4.0) - H); double J = cbrt(F);
- double K = acos(-(G / (2.0 * I)));
- double L = -J;
- double M = cos(K / 3.0);
- double N = sqrt(3.0) * sin(K / 3.0);
- double P = -(B / (3.0 * A));
- double x1 = (2.0 * J * M) + P;
- double x2 = L * (M + N) + P;
- double x3 = L * (M - N) + P;
- cout << "x[1] = " << x1 << endl;
- cout << "x[2] = " << x2 << endl;
- cout << "x[3] = " << x3 << endl; */
- } else if (Delta == 0) {
- double y1, y2, x1, x2;
- double u;
- u = -1 * pow(q / 2.0, 1.0 / 3.0);
- y1 = 2 * u;
- y2 = -u;
- x1 = y1 - B / 3.0;
- x2 = y2 - B / 3.0;
- cout << "x1 = " << x1 << endl;
- cout << "x2 = " << x2 << endl;
- }
- else {
- cout << "BłĄD" << endl;
- }
- cout << "\n";
- break;
- case 2:
- exit(0);
- break;
- default:
- system("cls");
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement