Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<vector>
- #include<complex>
- #include<stdio.h>
- #include<math.h>
- #include<iostream>
- using namespace std;
- struct Liczba_zespolona {
- float cz_rz;
- float cz_ur;
- };
- void formatuj_liczbe_zesp(complex<float> l_zespolona) {
- if (l_zespolona.imag() == 0) {
- printf("%.3f \n", l_zespolona.real());
- }
- else if (l_zespolona.imag() > 0) {
- printf("%.3f + %.3fi \n", l_zespolona.real(), l_zespolona.imag());
- }
- else {
- printf("%.3f %.3fi \n", l_zespolona.real(), l_zespolona.imag());
- }
- }
- class Dane {
- protected:
- //int a, b, c, d;
- vector <int> zmienna;
- vector <complex<float>> wyniki;
- // vector <complex<float>> wyjsciowe;
- //int element;
- // int element2;
- Liczba_zespolona delta, pdelta;
- public:
- int element = 0;
- void wprowadz_dane() {
- int size = 4;
- for (int i = 0; i < size; i++) {
- printf("podaj zmienna: %d \n",i);
- scanf_s("%d", &element);
- //cin >> element;
- zmienna.push_back(element);
- }
- //delta 0 pdelta 1
- wyniki.push_back(complex<float>(0, 0));
- wyniki.push_back(complex<float>(0, 0));
- wyniki.at(0).real(delta.cz_rz);
- wyniki.at(0).imag(delta.cz_ur);
- wyniki.at(1).real(pdelta.cz_rz);
- wyniki.at(1).imag(pdelta.cz_ur);
- }
- void formatuj_rownanie() {
- if (zmienna.at(0) > 0) {
- printf("%dxx", zmienna.at(0));
- }
- else if (zmienna.at(0)<0) {
- printf("%dxx", zmienna.at(0));
- }
- else {
- printf("");
- }
- if (zmienna.at(1) > 0 && zmienna.at(0) != 0) {
- printf("+%dx", zmienna.at(1));
- }
- else if (zmienna.at(1) > 0 && zmienna.at(0) == 0) {
- printf("%dx", zmienna.at(1));
- }
- else if (zmienna.at(1)<0) {
- printf("%dx", zmienna.at(1));
- }
- else if (zmienna.at(1) == 0 && zmienna.at(0) != 0) {
- printf("");
- }
- else {
- printf("");
- }
- if (zmienna.at(2) > 0) {
- printf("+%d", zmienna.at(2));
- }
- else if (zmienna.at(2)<0) {
- printf("%d", zmienna.at(2));
- }
- else {
- printf("");
- }
- if (zmienna.at(3) > 0 && zmienna.at(2) == 0 && zmienna.at(1) == 0 && zmienna.at(0) == 0) {
- printf("%di=0", zmienna.at(3));
- }
- else if (zmienna.at(3) > 0) {
- printf("+%di=0", zmienna.at(3));
- }
- else if (zmienna.at(3)<0) {
- printf("%di=0", zmienna.at(3));
- }
- else {
- printf("=0");
- }
- printf("\n");
- }
- complex<float> obl_delta() {
- wyniki.at(0).real((zmienna.at(1)*zmienna.at(1)) - (4 * zmienna.at(0)*zmienna.at(2)));
- wyniki.at(0).imag(-(4 * zmienna.at(0)*zmienna.at(3)));
- return wyniki.at(0);
- }
- complex<float> oblicz_p_d_r() {
- wyniki.at(1).real(sqrt((sqrt((wyniki.at(0).real()*wyniki.at(0).real()) + (wyniki.at(0).imag()*wyniki.at(0).imag())) + wyniki.at(0).real()) / 2));
- return wyniki.at(1);
- }
- complex<float> oblicz_p_d_u() {
- wyniki.at(1).imag(sqrt((sqrt((wyniki.at(0).real()*wyniki.at(0).real()) + (wyniki.at(0).imag()*wyniki.at(0).imag())) - wyniki.at(0).real()) / 2));
- return wyniki.at(1);
- }
- };
- class Pierwiastki {
- protected:
- complex <float> pierwiastek[4];
- Liczba_zespolona x1, x2, x3, x4;
- public:
- Pierwiastki() {
- x1.cz_rz = 0;
- x1.cz_ur = 0;
- x2.cz_rz = 0;
- x2.cz_ur = 0;
- x3.cz_rz = 0;
- x3.cz_ur = 0;
- x4.cz_rz = 0;
- x4.cz_ur = 0;
- }
- };
- class Bazowa : public Dane, public Pierwiastki {
- public:
- Bazowa() {
- wprowadz_dane();
- //x1 x2 x3 x4 2,3,4,5
- wyniki.push_back(complex<float>(0, 0));
- wyniki.push_back(complex<float>(0, 0));
- wyniki.push_back(complex<float>(0, 0));
- wyniki.push_back(complex<float>(0, 0));
- wyniki.at(2).real(x1.cz_rz);
- wyniki.at(2).real(x1.cz_ur);
- wyniki.at(3).real(x2.cz_rz);
- wyniki.at(3).real(x2.cz_ur);
- wyniki.at(4).real(x3.cz_rz);
- wyniki.at(4).real(x3.cz_ur);
- wyniki.at(5).real(x4.cz_rz);
- wyniki.at(5).real(x4.cz_ur);
- obl_delta();
- oblicz_p_d_r();
- oblicz_p_d_u();
- }
- void formatuj_rownanie() {
- if (zmienna.at(0) > 0) {
- printf("%dxx", zmienna.at(0));
- }
- else if (zmienna.at(0)<0) {
- printf("%dxx", zmienna.at(0));
- }
- else {
- printf("");
- }
- if (zmienna.at(1) > 0 && zmienna.at(0) != 0) {
- printf("+%dx", zmienna.at(1));
- }
- else if (zmienna.at(1) > 0 && zmienna.at(0) == 0) {
- printf("%dx", zmienna.at(1));
- }
- else if (zmienna.at(1)<0) {
- printf("%dx", zmienna.at(1));
- }
- else if (zmienna.at(1) == 0 && zmienna.at(0) != 0) {
- printf("");
- }
- else {
- printf("");
- }
- if (zmienna.at(2) > 0) {
- printf("+%d", zmienna.at(2));
- }
- else if (zmienna.at(2)<0) {
- printf("%d", zmienna.at(2));
- }
- else {
- printf("");
- }
- if (zmienna.at(3) > 0 && zmienna.at(2) == 0 && zmienna.at(1) == 0 && zmienna.at(0) == 0) {
- printf("%di=0", zmienna.at(3));
- }
- else if (zmienna.at(3) > 0) {
- printf("+%di=0", zmienna.at(3));
- }
- else if (zmienna.at(3)<0) {
- printf("%di=0", zmienna.at(3));
- }
- else {
- printf("=0");
- }
- printf("\n");
- }
- void oblicz_rownanie() {
- if (zmienna.at(0) != 0 && zmienna.at(3) == 0) {
- if (wyniki.at(0).real() > 0) {
- wyniki.at(2).real((-(float)zmienna.at(1) - pdelta.cz_rz) / (2 * zmienna.at(0)));
- wyniki.at(3).real((-(float)zmienna.at(1) + pdelta.cz_rz) / (2 * zmienna.at(0)));
- }
- //1.2
- if (wyniki.at(0).real() == 0) {
- wyniki.at(2).real(-(float)zmienna.at(1) / (2 * zmienna.at(0)));
- }
- //1.3
- if (wyniki.at(0).real() < 0) {
- obl_delta();
- wyniki.at(0).real(-wyniki.at(0).real());
- oblicz_p_d_r();
- wyniki.at(2).real((float)-zmienna.at(1) / (2 * zmienna.at(0)));
- wyniki.at(2).imag((float)-(pdelta.cz_rz / (2 * zmienna.at(0))));
- wyniki.at(3).real(wyniki.at(2).real());
- wyniki.at(3).imag(-wyniki.at(2).imag());
- obl_delta();
- }
- }
- //2.
- if (zmienna.at(0) == 0 && zmienna.at(1) != 0 && zmienna.at(3) == 0) {
- wyniki.at(2).real(-((float)zmienna.at(2) / zmienna.at(1)));
- }
- //3.
- if (zmienna.at(0) == 0 && zmienna.at(1) == 0 && (zmienna.at(2) != 0 || zmienna.at(3) != 0)) {
- printf("Rownanie sprzeczne \n");
- }
- //4.
- if (zmienna.at(0) == 0 && zmienna.at(1) == 0 && zmienna.at(2) == 0 && zmienna.at(3) == 0) {
- printf("Rownanie tozsamosciowe \n");
- }
- //5.
- if (zmienna.at(0) == 0 && zmienna.at(1) != 0 && zmienna.at(3) != 0) {
- wyniki.at(2).real(-((float)zmienna.at(2) / zmienna.at(1)));
- wyniki.at(2).imag(-((float)zmienna.at(3) / zmienna.at(1)));
- }
- //6.
- if (zmienna.at(0) != 0 && zmienna.at(3) != 0) {
- wyniki.at(2).real((-zmienna.at(1) - wyniki.at(1).real()) / (2 * zmienna.at(0)));
- wyniki.at(2).imag((-zmienna.at(1) - wyniki.at(1).imag()) / (2 * zmienna.at(0)));
- wyniki.at(3).real((-zmienna.at(1) - wyniki.at(1).real()) / (2 * zmienna.at(0)));
- wyniki.at(3).imag((-zmienna.at(1) + wyniki.at(1).imag()) / (2 * zmienna.at(0)));
- wyniki.at(4).real((-zmienna.at(1) + wyniki.at(1).real()) / (2 * zmienna.at(0)));
- wyniki.at(4).imag((-zmienna.at(1) + wyniki.at(1).imag()) / (2 * zmienna.at(0)));
- wyniki.at(5).real((-zmienna.at(1) + wyniki.at(1).real()) / (2 * zmienna.at(0)));
- wyniki.at(5).imag((-zmienna.at(1) - wyniki.at(1).imag()) / (2 * zmienna.at(0)));
- }
- }
- void wyswietl_wynik() {
- if (zmienna.at(0) != 0 && zmienna.at(3) == 0) {
- printf("Delta= %f \n", wyniki.at(0).real());
- //1.1
- //deltar = 8.204060;
- if (wyniki.at(0).real() > 0) {
- printf("x1dr = %f \n", wyniki.at(2).real());
- printf("x2r = %f \n", wyniki.at(3).real());
- printf("\n");
- }
- //1.2
- if (wyniki.at(0).real() == 0) {
- printf("x1r = %f \n", wyniki.at(2).real());
- }
- //1.3
- if (wyniki.at(0).real() < 0) {
- printf("x1 %f");
- formatuj_liczbe_zesp(wyniki.at(2));
- printf(" x2 "); ///////////////////////////////////
- formatuj_liczbe_zesp(wyniki.at(3));
- printf("\n");
- }
- }
- //2.
- if (zmienna.at(0) == 0 && zmienna.at(1) != 0 && zmienna.at(3) == 0) {
- printf("x1r = %f \n", wyniki.at(2).real());
- }
- //3.
- if (zmienna.at(0) == 0 && zmienna.at(1) == 0 && (zmienna.at(2) != 0 || zmienna.at(3) != 0)) {
- printf("Rownanie sprzeczne \n");
- }
- //4.
- if (zmienna.at(0) == 0 && zmienna.at(1) == 0 && zmienna.at(2) == 0 && zmienna.at(3) == 0) {
- printf("Rownanie tozsamosciowe \n");
- }
- //5.
- if (zmienna.at(0) == 0 && zmienna.at(1) != 0 && zmienna.at(3) != 0) {
- printf("x1");
- formatuj_liczbe_zesp(wyniki.at(2));
- }
- //6.
- if (zmienna.at(0) != 0 && zmienna.at(3) != 0) {
- printf("Delta = %f ", wyniki.at(0).real());
- if (wyniki.at(0).imag() > 0)
- printf("+ ");
- printf("%fi\n", wyniki.at(0).imag());
- printf("x1 ");
- formatuj_liczbe_zesp(wyniki.at(2));
- printf("\n");
- printf("x2 ");
- formatuj_liczbe_zesp(wyniki.at(3));
- printf("\n");
- printf("x3 ");
- formatuj_liczbe_zesp(wyniki.at(4));
- printf("\n");
- printf("x4 ");
- formatuj_liczbe_zesp(wyniki.at(5));
- printf("\n");
- }
- }
- complex <float> *getPierwiastki() {
- pierwiastek[0].real(wyniki.at(2).real());
- pierwiastek[0].imag(wyniki.at(2).imag());
- pierwiastek[1].real(wyniki.at(3).real());
- pierwiastek[1].imag(wyniki.at(3).imag());
- pierwiastek[2].real(wyniki.at(4).real());
- pierwiastek[2].imag(wyniki.at(4).imag());
- pierwiastek[3].real(wyniki.at(5).real());
- pierwiastek[3].imag(wyniki.at(5).imag());
- return pierwiastek;
- }
- };
- class Operacje :public Dane {
- protected:
- //Liczba_zespolona suma, roznica, iloczyn;
- public:
- virtual void wykonaj_operacje() = 0;
- virtual void wyswietl_wynik() = 0;
- };
- class Dodawanie : public Pierwiastki, public Operacje {
- public:
- Dodawanie(complex <float> *tab) {
- //suma
- wyniki.push_back(complex<float>(0, 0));
- /*wyniki.at(2).real(tab[0].real());
- wyniki.at(2).real(tab[0].imag());
- wyniki.at(3).real(tab[0].real());
- wyniki.at(3).real(tab[0].imag());
- wyniki.at(4).real(tab[0].real());
- wyniki.at(4).real(tab[0].imag());
- wyniki.at(5).real(tab[0].real());
- wyniki.at(5).real(tab[0].imag());*/
- wyniki.at(2) = tab[0];
- wyniki.at(3) = tab[1];
- wyniki.at(4) = tab[2];
- wyniki.at(5) = tab[3];
- wyniki.at(6).real(0.0);
- wyniki.at(6).imag(0.0);
- }
- void wykonaj_operacje() {
- obl_delta();
- if (wyniki.at(0).imag() != 0) {
- wyniki.at(6).real(wyniki.at(2).real() + wyniki.at(3).real() + wyniki.at(4).real() + wyniki.at(5).real());
- wyniki.at(6).imag(wyniki.at(2).imag() + wyniki.at(3).imag() + wyniki.at(4).imag() + wyniki.at(5).imag());
- }
- else if (wyniki.at(0).real() > 0) {
- wyniki.at(6).real(wyniki.at(2).real() + wyniki.at(3).real());
- }
- else if (wyniki.at(0).real() < 0) {
- wyniki.at(6).real(wyniki.at(2).real() + wyniki.at(3).real());
- wyniki.at(6).imag(wyniki.at(2).imag() + wyniki.at(3).imag());
- }
- }
- void wyswietl_wynik() {
- if (zmienna.at(0) != 0 && zmienna.at(3) == 0) {
- //1.1
- if (wyniki.at(0).real() > 0) {
- printf("sr = %f \n", wyniki.at(6).real());
- }
- //1.3
- if (wyniki.at(0).real() < 0) {
- printf("suma ");
- formatuj_liczbe_zesp(wyniki.at(6));
- printf("\n");
- }
- }
- //6.
- if (zmienna.at(0) != 0 && zmienna.at(3) != 0) {
- printf("suma ");
- formatuj_liczbe_zesp(wyniki.at(6));
- printf("\n");
- }
- }
- };
- class Odejmowanie :public Pierwiastki, public Operacje {
- public:
- Odejmowanie(complex <float> *tab) {
- //roznica
- wyniki.push_back(complex<float>(0, 0));
- //wyniki.at(2).real(tab[0].cz_rz);
- wyniki.at(2) = tab[0];
- wyniki.at(3) = tab[1];
- wyniki.at(4) = tab[2];
- wyniki.at(5) = tab[3];
- wyniki.at(7).real(0.0);
- wyniki.at(7).imag(0.0);
- }
- void wykonaj_operacje() {
- obl_delta();
- if (wyniki.at(0).imag() != 0) {
- wyniki.at(7).real(wyniki.at(2).real() - wyniki.at(3).real() - wyniki.at(4).real() - wyniki.at(5).real());
- wyniki.at(7).imag(wyniki.at(2).imag() - wyniki.at(3).imag() - wyniki.at(4).imag() - wyniki.at(5).imag());
- }
- else if (wyniki.at(0).real() > 0) {
- wyniki.at(7).real(wyniki.at(2).real() - wyniki.at(3).real());
- }
- else if (wyniki.at(0).real() < 0) {
- wyniki.at(7).real(wyniki.at(2).real() - wyniki.at(3).real());
- wyniki.at(7).imag(wyniki.at(2).imag() - wyniki.at(3).imag());
- }
- }
- void wyswietl_wynik() {
- if (zmienna.at(0) != 0 && zmienna.at(3) == 0) {
- //1.1
- if (wyniki.at(0).real() > 0) {
- printf("sr = %f \n", wyniki.at(7).real());
- }
- //1.3
- if (wyniki.at(0).real() < 0) {
- printf("suma ");
- formatuj_liczbe_zesp(wyniki.at(7));
- printf("\n");
- }
- }
- //6.
- if (zmienna.at(0) != 0 && zmienna.at(3) != 0) {
- printf("suma ");
- formatuj_liczbe_zesp(wyniki.at(7));
- printf("\n");
- }
- }
- };
- class Mnozenie : public Pierwiastki, public Operacje {
- public:
- Mnozenie(complex <float> *tab) {
- //roznica
- wyniki.push_back(complex<float>(0, 0));
- //wyniki.at(2).real(tab[0].cz_rz);
- wyniki.at(2) = tab[0];
- wyniki.at(3) = tab[1];
- wyniki.at(4) = tab[2];
- wyniki.at(5) = tab[3];
- wyniki.at(8).real(0.0);
- wyniki.at(8).imag(0.0);
- }
- void wykonaj_operacje() {
- obl_delta();
- if (wyniki.at(0).imag() != 0) {
- wyniki.at(8).real(((wyniki.at(2).real() * wyniki.at(3).real() - wyniki.at(2).imag() * wyniki.at(3).imag()) * (wyniki.at(4).real() * wyniki.at(5).real() - wyniki.at(4).imag() * wyniki.at(5).imag())) - ((wyniki.at(2).real() * wyniki.at(3).imag() + wyniki.at(3).real() * wyniki.at(2).imag()) * (wyniki.at(4).real() * wyniki.at(5).imag() + wyniki.at(5).real() * wyniki.at(4).imag())));
- wyniki.at(8).imag(((wyniki.at(2).real() * wyniki.at(3).real() - wyniki.at(2).imag() * wyniki.at(3).imag()) * (wyniki.at(4).real() * wyniki.at(5).imag() + wyniki.at(5).real() * wyniki.at(4).imag())) + ((wyniki.at(2).real() * wyniki.at(3).imag() + wyniki.at(3).real() * wyniki.at(2).imag()) * (wyniki.at(4).real() * wyniki.at(5).real() - wyniki.at(4).imag() * wyniki.at(5).imag())));
- }
- else if (wyniki.at(0).real() > 0) {
- wyniki.at(8).real(wyniki.at(2).real() * wyniki.at(3).real());
- }
- else if (wyniki.at(0).real() < 0) {
- wyniki.at(8).real((wyniki.at(2).real() * wyniki.at(3).real() - wyniki.at(2).imag() * wyniki.at(3).imag())) ;
- wyniki.at(8).imag((wyniki.at(2).real() * wyniki.at(3).imag() + wyniki.at(3).real() * wyniki.at(2).imag()));
- }
- }
- void wyswietl_wynik() {
- if (zmienna.at(0) != 0 && zmienna.at(3) == 0) {
- //1.1
- if (wyniki.at(0).real() > 0) {
- printf("sr = %f \n", wyniki.at(8).real());
- }
- //1.3
- if (wyniki.at(0).real() < 0) {
- printf("suma ");
- formatuj_liczbe_zesp(wyniki.at(8));
- printf("\n");
- }
- }
- //6.
- if (zmienna.at(0) != 0 && zmienna.at(3) != 0) {
- printf("suma ");
- formatuj_liczbe_zesp(wyniki.at(8));
- printf("\n");
- }
- }
- };
- int main() {
- //Dane obiekt;
- //obiekt.wprowadz_dane();
- //obiekt.formatuj_rownanie();
- Bazowa obiekt;
- Operacje *operacje[3];
- obiekt.oblicz_rownanie();
- obiekt.formatuj_rownanie();
- obiekt.wyswietl_wynik();
- //formatuj_liczbe_zesp(obiekt.obl_delta());
- operacje[0] = new Dodawanie(obiekt.getPierwiastki());
- //operacje[1] = new Odejmowanie(obiekt.getPierwiastki());
- //operacje[2] = new Mnozenie(obiekt.getPierwiastki());
- operacje[0]->wykonaj_operacje();
- operacje[0]->wyswietl_wynik();
- //operacje[1]->wykonaj_operacje();
- //operacje[1]->wyswietl_wynik();
- //operacje[2]->wykonaj_operacje();
- //operacje[2]->wyswietl_wynik();
- system("pause");
- getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement