Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.82 KB | None | 0 0
  1. // paradygmat4.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <vector>
  7. #include <complex>
  8.  
  9. using namespace std;
  10.  
  11. class Zmienne
  12. {
  13. protected:
  14.     vector <int> tab; //tab[0]=a, tab[1]=b ...
  15.     vector <complex<float>> com;
  16. public:
  17.     void podaj_dane()
  18.     {
  19.         cout << "Podaj kolejno a, b, c, d\n";
  20.         for (int i = 0; i < 4; i++)
  21.         {
  22.             int x;
  23.             cin >> x;
  24.             tab.push_back(x);
  25.         }
  26.     };
  27.     void formatuj_równanie()
  28.     {
  29.         if (!tab.empty())
  30.         {
  31.             if (tab[0] == 0);
  32.             else printf("%dxx", tab[0]);
  33.             if (tab[1] < 0) printf("%dx", tab[1]);
  34.             else if (tab[1] == 0);
  35.             else printf("+%dx", tab[1]);
  36.             if (tab[2] < 0) printf("%d", tab[2]);
  37.             else if (tab[2] == 0);
  38.             else printf("+%d", tab[2]);
  39.             if (tab[3] < 0) printf("%di", tab[3]);
  40.             else if (tab[3] == 0) printf("\n");
  41.             else printf("+%di\n", tab[3]);
  42.         }
  43.     }
  44. };
  45.  
  46. class Delta : public Zmienne
  47. {
  48. public:
  49.     float oblicz_d_r()
  50.     {
  51.         com.push_back(complex<float>((tab[1] * tab[1]) - (4 * tab[0] * tab[2]), 0));
  52.         cout << com.size() << endl;
  53.         return (tab[1] * tab[1]) - (4 * tab[0] * tab[2]);
  54.     }
  55.     float oblicz_d_u()
  56.     {
  57.         com[0] = com[0] + complex<float>(0, (-4 * tab[0] * tab[3]));
  58.         cout << com.size() << endl;
  59.         return (-4 * tab[0] * tab[3]);
  60.     }
  61.     complex<float> oblicz_p_d_ru()
  62.     {
  63.         com.push_back(sqrt(com[0]));
  64.         return sqrt(com[0]);
  65.     }
  66.     float oblicz_p_d_r(float delta_r, float delta_u)
  67.     {
  68.         delta_r = delta_r * delta_r + delta_u * delta_u;
  69.         delta_r = sqrt(delta_r);
  70.         delta_r = (delta_r + delta_r) / 2;
  71.         delta_r = sqrt(delta_r);
  72.         com.push_back(complex<float>(delta_r, 0)); //com[1]
  73.         cout << com.size() << endl;
  74.         //cout << com[1].real()<<endl;
  75.         return delta_r;
  76.     }
  77.     float oblicz_p_d_u(float delta_r, float delta_u)
  78.     {
  79.         delta_u = delta_r * delta_r + delta_u * delta_u;
  80.         delta_u = sqrt(delta_u);
  81.         delta_u = (delta_u - delta_r) / 2;
  82.         delta_u = sqrt(delta_u);
  83.         com[1] = com[1] + complex<float>(0, delta_u);
  84.         //cout << com[1].imag();
  85.         cout << com.size();
  86.         return delta_u;
  87.     }
  88.  
  89. };
  90. class Rownanie : public Delta
  91. {
  92. public:
  93.     void oblicz_rnie()
  94.     {
  95.         if (tab[3] == 0 && tab[0] != 0)
  96.         {
  97.             if (com[0].real()>0)
  98.             {
  99.                 com.push_back(complex<float>((-1.0*tab[1] - com[1].real()) / (2 * 1.0*tab[0]), 0)); //com[2]
  100.                 com.push_back(complex<float>((-1.0*tab[1] + com[1].real()) / (2 * 1.0*tab[0]), 0)); //com[3]
  101.                                                                                                     //com[2].real((-1.0*tab[1] - oblicz_p_d_r(oblicz_d_r(), oblicz_d_u())) / (2 * 1.0*tab[0]));
  102.                                                                                                     //com[3].real((-1.0*tab[1] + oblicz_p_d_r(oblicz_d_r(), oblicz_d_u())) / (2 * 1.0*tab[0]));
  103.                 return;
  104.             }
  105.             else if (com[0].real() == 0)
  106.             {
  107.                 com.push_back(complex<float>((-1.0*tab[1] / (2 * 1.0*tab[0])), 0)); //com[2]
  108.                 return;
  109.             }
  110.             else if (com[0].real()<0)
  111.             {
  112.                 com.push_back(complex<float>((-1.0*tab[1] / (2 * tab[0] * 1.0)), (-1.0*(com[1].real()) / (2 * tab[0] * 1.0)))); //com[2];
  113.                 com.push_back(complex<float>(com[2].real(), -com[2].imag())); //com[3]
  114.                                                                               //com[2].real(-1.0*tab[1] / (2 * tab[0] *1.0));
  115.                                                                               //com[2].imag(-1.0*(oblicz_p_d_r(fabs(oblicz_d_r()), oblicz_d_u())) / (2 * tab[0] *1.0));
  116.                                                                               //com[3].real(com[2].real());
  117.                                                                               //com[3].imag(-com[2].imag());
  118.                 return;
  119.             }
  120.         }
  121.  
  122.         if (tab[0] == 0 && tab[1] != 0 && tab[3] == 0)
  123.         {
  124.             com.push_back(complex<float>(0, 0)); //com[2]
  125.             com.push_back(complex<float>(tab[2], 0));//com[3]
  126.             com.push_back(complex<float>(tab[1], 0));//com[4]
  127.             com[2] = com[2] + complex<float>((com[3].real()*-1.0) / com[4].real(), 0);
  128.             return;
  129.         }
  130.         if (tab[0] == 0 && tab[1] == 0 && (tab[2] != 0 || tab[3] != 0))
  131.         {
  132.             return;
  133.         }
  134.         if (tab[0] == 0 && tab[1] == 0 && tab[2] == 0 && tab[3] == 0)
  135.         {
  136.             return;
  137.         }
  138.         if (tab[0] == 0 && tab[1] != 0 && tab[3] != 0)
  139.         {
  140.             com.push_back(complex<float>(0, 0)); //com[2]
  141.             com.push_back(complex<float>(tab[2], 0)); //com[3]
  142.             com.push_back(complex<float>(tab[1], 0)); //com[4]
  143.             com.push_back(complex<float>(tab[3], 0)); //com[5]
  144.             com[2] = com[2] + complex<float>((-com[3].real()) / com[4].real(), (-com[5].real()) / com[4].real());
  145.             //com[2].real((-com[3].real()) / com[4].real());
  146.             //com[2].imag((-com[5].real()) / com[4].real());
  147.             return;
  148.         }
  149.         if (tab[0] != 0 && tab[3] != 0)
  150.         {
  151.             com.push_back(complex<float>(((-tab[1] - sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) + com[0].real()) / 2)) / (2 * tab[0])), ((-sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) - com[0].real()) / 2)) / (2 * tab[0]))));
  152.             //com[2].real((-tab[1] - sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) + com[0].real()) / 2)) / (2 * tab[0]));
  153.             //com[2].imag((-sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) - oblicz_d_r()) / 2)) / (2 * tab[0]));
  154.             com.push_back(complex<float>(((-tab[1] - sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) + com[0].real()) / 2)) / (2 * tab[0])), (sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) - com[0].real()) / 2)) / (2 * tab[0])));
  155.             //com[3].real((-tab[1] - sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) + oblicz_d_r()) / 2)) / (2 * tab[0]));
  156.             //com[3].imag((sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) - oblicz_d_r()) / 2)) / (2 * tab[0]));
  157.             com.push_back(complex<float>((-tab[1] + sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) + com[0].real()) / 2)) / (2 * tab[0]), (sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) - com[0].real()) / 2)) / (2 * tab[0])));
  158.             //com[4].real((-tab[1] + sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) + oblicz_d_r()) / 2)) / (2 * tab[0]));
  159.             //com[4].imag((sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) - oblicz_d_r()) / 2)) / (2 * tab[0]));
  160.             com.push_back(complex<float>((-tab[1] + sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) + com[0].real()) / 2)) / (2 * tab[0]), (-sqrt((sqrt(com[0].real()*com[0].real() + com[0].imag()*com[0].imag()) - com[0].real()) / 2)) / (2 * tab[0])));
  161.             //com[5].real((-tab[1] + sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) + oblicz_d_r()) / 2)) / (2 * tab[0]));
  162.             //com[5].imag((-sqrt((sqrt(oblicz_d_r()*oblicz_d_r() + oblicz_d_u()*oblicz_d_u()) - oblicz_d_r()) / 2)) / (2 * tab[0]));
  163.             return;
  164.         }
  165.     }
  166.  
  167.     void dodaj()
  168.     {
  169.         if (com[0].real()>0 && com[0].imag() == 0)
  170.         {
  171.             com.push_back(com[2] + com[3]);
  172.         }
  173.         else if ((com[0].real() < 0 || com[0].imag() != 0) && tab[3] == 0)
  174.         {
  175.             com.push_back(com[2] + com[3]);
  176.         }
  177.         else if (com[0].real()<0 || com[0].imag() != 0)
  178.         {
  179.             com.push_back(com[2] + com[3] + com[4] + com[5]);
  180.             //com[com.size()].real((com[2].real())+(com[3].real())+(com[4].real())+(com[5].real()));
  181.             //com[com.size()].imag((com[2].imag())+(com[3].imag())+(com[4].imag())+(com[5].imag()));
  182.         }
  183.     }
  184.     void odejmij()
  185.     {
  186.  
  187.         if (com[0].real()>0 && com[0].imag() == 0)
  188.         {
  189.             com.push_back(com[2] - com[3]);
  190.             //com[7].real((com[2].real())-(com[3].real()));
  191.         }
  192.         else if ((com[0].real() < 0 || com[0].imag() != 0) && tab[3] == 0)
  193.         {
  194.             com.push_back(com[2] - com[3]);
  195.         }
  196.         else if (com[0].real()<0 || com[0].imag() != 0)
  197.         {
  198.             com.push_back(com[2] - com[3] - com[4] - com[5]);
  199.             //com[7].real(com[2].real() - com[3].real() - com[4].real() - com[5].real());
  200.             //com[7].imag(com[2].imag() - com[3].imag() - com[4].imag() - com[5].imag());
  201.         }
  202.     }
  203.     void pomnoz()
  204.     {
  205.         if (com[0].real()>0 && com[0].imag() == 0)
  206.         {
  207.             com.push_back(complex<float>((com[2].real()*com[3].real()), 0));
  208.         }
  209.         else if (com[0].real() < 0 && com[4].real() == 0)
  210.         {
  211.             com.push_back(complex<float>((com[2].real())*(com[3].real()) - com[2].imag()*com[3].imag(), com[2].real()*com[3].imag() + com[3].real()*com[2].imag()));
  212.             //com[8].real((com[2].real())*(com[3].real())- com[2].imag()*com[3].imag());
  213.             //com[8].imag(com[2].real()*com[3].imag() + com[3].real()*com[2].imag());
  214.         }
  215.         else if (com[0].real()<0)
  216.         {
  217.             com.push_back(complex<float>((com[2].real())*(com[3].real()*(com[4].real())*(com[5].real())), com[2].imag()*com[3].imag()*com[4].imag()*com[5].imag()));
  218.             //com[8].real((com[2].real())*(com[3].real()*(com[4].real())*(com[5].real())));
  219.             //com[8].imag(com[2].imag()*com[3].imag()*com[4].imag()*com[5].imag());
  220.         }
  221.         else if (com[0].imag() != 0)
  222.         {
  223.             int x = (com[2].real()*com[3].real() - com[2].imag()*com[3].imag())*(com[4].real() *com[5].real() - com[4].imag()*com[5].imag()) - (com[2].real()*com[3].imag() + com[3].real()*com[2].imag())*(com[4].real()*com[5].real() + com[5].imag()*com[4].imag());
  224.             int y = (com[2].real()*com[3].real() - com[2].imag()*com[3].imag())*(com[4].real()*com[5].real() + com[4].imag()*com[5].imag()) + (com[4].real()*com[5].real() - com[4].imag()*com[5].imag())*(com[2].real()*com[3].imag() + com[3].real()*com[2].imag());
  225.             com.push_back(complex<float>(x, y));
  226.             //com[8].real((com[2].real()*com[3].real() - com[2].imag()*com[3].imag())*(com[4].real() *com[5].real() - com[4].imag()*com[5].imag()) - (com[2].real()*com[3].imag() + com[3].real()*com[2].imag())*(com[4].real()*com[5].real() + com[5].imag()*com[4].imag()));
  227.             //com[8].imag((com[2].real()*com[3].real() - com[2].imag()*com[3].imag())*(com[4].real()*com[5].real() + com[4].imag()*com[5].imag()) + (com[4].real()*com[5].real() - com[4].imag()*com[5].imag())*(com[2].real()*com[3].imag() + com[3].real()*com[2].imag()));
  228.         }
  229.  
  230.     }
  231.  
  232.     void wyswietl_wynik()
  233.     {
  234.         int end = com.size() - 1;
  235.         cout << "Wyswietlam wyniki z funkcji w klasie Rownanie" << endl;
  236.         if (tab.at(3) == 0 && tab.at(0) != 0)
  237.         {
  238.             if (com[0].real()>0)
  239.             {
  240.                 printf("x1r = %f\nx2r = %f", com[2].real(), com[3].real());
  241.                 printf("\nsr = %f\n", com[end - 2].real());
  242.                 printf("\nrr = %f\n", com[end - 1].real());
  243.                 printf("\nilr = %f\n", com[end].real());
  244.                 return;
  245.             }
  246.             else if (com[0].real() == 0)
  247.             {
  248.                 printf("x1r = %f", com[2].real());
  249.                 return;
  250.             }
  251.             else if (com[0].real()<0)
  252.             {
  253.                 printf("x1r = %f\nx2r = %f\n", com[2].real(), com[3].real());
  254.                 printf("x1u = %f\nx2u = %f\n", com[2].imag(), com[3].imag());
  255.                 printf("\nsu = %f\n", com[end - 2].imag());
  256.                 printf("\nsr = %f\n", com[end - 2].real());
  257.                 printf("\nru = %f\n", com[end - 1].imag());
  258.                 printf("\nrr = %f\n", com[end - 1].real());
  259.                 printf("\nilr = %f\n", com[end].real());
  260.                 printf("\nilu = %f\n", com[end].imag());
  261.                 return;
  262.             }
  263.         }
  264.         if (tab[0] == 0 && tab[1] != 0 && tab[2] == 0)
  265.         {
  266.             printf("x1r = %f\n", com[2].real());
  267.             return;
  268.         }
  269.         if (tab[0] == 0 && tab[1] == 0 && (tab[2] != 0 || tab[3] != 0))
  270.         {
  271.             printf("Rownanie sprzeczne");
  272.         }
  273.         if (tab[0] == 0 && tab[1] == 0 && tab[2] == 0 && tab[3] == 0)
  274.         {
  275.             printf("Rownanie tozsamosciowe");
  276.         }
  277.         if (tab[0] == 0 && tab[1] != 0 && tab[3] != 0)
  278.         {
  279.             printf("x1r = %f\n x1u = %f\n", com[2].real(), com[2].imag());
  280.             return;
  281.         }
  282.         if (tab[0] != 0 && tab[3] != 0)
  283.         {
  284.             printf("x1r = %f\nx1u = %f\n", com[2].real(), com[2].imag());
  285.             printf("x2r = %f\nx2u = %f\n", com[3].real(), com[3].imag());
  286.             printf("x3r = %f\nx3u = %f\n", com[4].real(), com[4].imag());
  287.             printf("x4r = %f\nx4u = %f\n", com[5].real(), com[5].imag());
  288.             printf("\nsu = %f\n", com[end - 2].imag());
  289.             printf("\nsr = %f\n", com[end - 2].real());
  290.             printf("\nru = %f\n", com[end - 1].imag());
  291.             printf("\nrr = %f\n", com[end - 1].real());
  292.             printf("\nilr = %f\n", com[end].real());
  293.             printf("\nilu = %f\n", com[end].imag());
  294.             return;
  295.         }
  296.     }
  297. };
  298.  
  299. class Liczba_zesp : public Rownanie
  300. {
  301. public:
  302.     void wyswietl_wynik()
  303.     {
  304.         int end = com.size() - 1;
  305.         cout << "Wyswietlam wyniki z funkcji w klasie Rownanie" << endl;
  306.         if (tab.at(3) == 0 && tab.at(0) != 0)
  307.         {
  308.             if (com[0].real()>0)
  309.             {
  310.                 printf("x1r = %f\nx2r = %f", com[2].real(), com[3].real());
  311.                 printf("\nsr = %f\n", com[end - 2].real());
  312.                 printf("\nrr = %f\n", com[end - 1].real());
  313.                 printf("\nilr = %f\n", com[end].real());
  314.                 return;
  315.             }
  316.             else if (com[0].real() == 0)
  317.             {
  318.                 printf("x1r = %f", com[2].real());
  319.                 return;
  320.             }
  321.             else if (com[0].real()<0)
  322.             {
  323.                 printf("x1r = %f\nx2r = %f\n", com[2].real(), com[3].real());
  324.                 printf("x1u = %f\nx2u = %f\n", com[2].imag(), com[3].imag());
  325.                 printf("\nsu = %f\n", com[end - 2].imag());
  326.                 printf("\nsr = %f\n", com[end - 2].real());
  327.                 printf("\nru = %f\n", com[end - 1].imag());
  328.                 printf("\nrr = %f\n", com[end - 1].real());
  329.                 printf("\nilr = %f\n", com[end].real());
  330.                 printf("\nilu = %f\n", com[end].imag());
  331.                 return;
  332.             }
  333.         }
  334.         if (tab[0] == 0 && tab[1] != 0 && tab[3] == 0)
  335.         {
  336.             printf("x1r = %f\n", com[2].real());
  337.             return;
  338.         }
  339.         if (tab[0] == 0 && tab[1] == 0 && (tab[2] != 0 || tab[3] != 0))
  340.         {
  341.             printf("Rownanie sprzeczne");
  342.         }
  343.         if (tab[0] == 0 && tab[1] == 0 && tab[2] == 0 && tab[3] == 0)
  344.         {
  345.             printf("Rownanie tozsamosciowe");
  346.         }
  347.         if (tab[0] == 0 && tab[1] != 0 && tab[3] != 0)
  348.         {
  349.             printf("x1r = %f\n x1u = %f\n", com[2].real(), com[2].imag());
  350.             return;
  351.         }
  352.         if (tab[0] != 0 && tab[3] != 0)
  353.         {
  354.             printf("x1r = %f\nx1u = %f\n", com[2].real(), com[2].imag());
  355.             printf("x2r = %f\nx2u = %f\n", com[3].real(), com[3].imag());
  356.             printf("x3r = %f\nx3u = %f\n", com[4].real(), com[4].imag());
  357.             printf("x4r = %f\nx4u = %f\n", com[5].real(), com[5].imag());
  358.             printf("\nsu = %f\n", com[end - 2].imag());
  359.             printf("\nsr = %f\n", com[end - 2].real());
  360.             printf("\nru = %f\n", com[end - 1].imag());
  361.             printf("\nrr = %f\n", com[end - 1].real());
  362.             printf("\nilr = %f\n", com[end].real());
  363.             printf("\nilu = %f\n", com[end].imag());
  364.             return;
  365.         }
  366.     }
  367. };
  368.  
  369. int main()
  370. {
  371.     Liczba_zesp a;
  372.     a.podaj_dane();
  373.     a.formatuj_równanie();
  374.     a.oblicz_d_r();
  375.     a.oblicz_d_u();
  376.     a.oblicz_p_d_ru();
  377.     //--------------------------
  378.     a.oblicz_rnie();
  379.     a.dodaj();
  380.     a.odejmij();
  381.     a.pomnoz();
  382.     a.wyswietl_wynik();
  383.     getchar();
  384.     getchar();
  385.     return 0;
  386. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement