Advertisement
Guest User

Untitled

a guest
May 26th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.47 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. class Delta;
  6. class DeltaR;
  7. class DeltaU;
  8.  
  9. class Delta {
  10. public:
  11.     Delta() {}
  12.     virtual ~Delta() {}
  13.     virtual float pdelta(Delta *) = 0;
  14.     float getWartosc() {
  15.         return wartosc;
  16.     }
  17. protected:
  18.     float wartosc;
  19. };
  20.  
  21. class DeltaR : public Delta {
  22. public:
  23.     DeltaR(int a, int b, int c) {
  24.         wartosc = 1.f*b*b - 4.f * a*c;
  25.     }
  26.     ~DeltaR() {}
  27.     float pdelta(Delta *deltau) {
  28.         if (deltau->getWartosc() == 0) {
  29.             return (float)sqrt(fabs(wartosc));
  30.         }
  31.         else {
  32.             return (float)sqrt((sqrt(wartosc * wartosc + deltau->getWartosc() * deltau->getWartosc()) + wartosc) / 2);
  33.         }
  34.     }
  35. };
  36.  
  37. class DeltaU : public Delta {
  38. public:
  39.     DeltaU(int a, int d) {
  40.         wartosc = -4.f * a*d;
  41.     }
  42.     ~DeltaU() {}
  43.     float pdelta(Delta *deltar) {
  44.         return (float)sqrt((sqrt(deltar->getWartosc()*deltar->getWartosc() + wartosc * wartosc) - deltar->getWartosc()) / 2);
  45.     }
  46. };
  47.  
  48. struct LiczbaZespolona {
  49.     float real;
  50.     float img;
  51. };
  52.  
  53. void formatujLiczbeZespolona(LiczbaZespolona liczba) {
  54.     if (liczba.real != 0) {
  55.         printf("%f", liczba.real);
  56.     }
  57.     if (liczba.img < 0 || liczba.real == 0) {
  58.         printf("%fi", liczba.img);
  59.     }
  60.     else if (liczba.img > 0) {
  61.         printf("+%fi", liczba.img);
  62.     }
  63.     printf("\n");
  64. }
  65.  
  66.  
  67. class Rownanie {
  68. public:
  69.     Rownanie() {
  70.         x1 = new LiczbaZespolona;
  71.         x2 = new LiczbaZespolona;
  72.         x3 = new LiczbaZespolona;
  73.         x4 = new LiczbaZespolona;
  74.         x1->real = 0;
  75.         x2->real = 0;
  76.         x3->real = 0;
  77.         x4->real = 0;
  78.         x1->img = 0;
  79.         x2->img = 0;
  80.         x3->img = 0;
  81.         x4->img = 0;
  82.         s = new LiczbaZespolona;
  83.         r = new LiczbaZespolona;
  84.         il = new LiczbaZespolona;
  85.         wprowadz(&a, &b, &c, &d);
  86.         formatuj(a, b, c, d);
  87.         oblicz(a, b, c, d, x1, x2, x3, x4);
  88.         dodaj(DeltaR(a, b, c), DeltaU(a, d), *x1, *x2, *x3, *x4, s);
  89.         odejmij(DeltaR(a, b, c), DeltaU(a, d), *x1, *x2, *x3, *x4, r);
  90.         pomnoz(DeltaR(a, b, c), DeltaU(a, d), *x1, *x2, *x3, *x4, il);
  91.         wyswietl(a, b, c, d, *x1, *x2, *x3, *x4, *s, *r, *il);
  92.     }
  93.     ~Rownanie() {
  94.         delete x1;
  95.         delete x2;
  96.         delete x3;
  97.         delete x4;
  98.     }
  99.     void wprowadz(int *a, int *b, int *c, int *d) {
  100.         printf("a = ");
  101.         scanf("%d", a);
  102.         printf("b = ");
  103.         scanf("%d", b);
  104.         printf("c = ");
  105.         scanf("%d", c);
  106.         printf("d = ");
  107.         scanf("%d", d);
  108.     }
  109.     void formatuj(int a, int b, int c, int d) {
  110.         if (a == 0 && b == 0 && c == 0 && d == 0) {
  111.             printf("0");
  112.         }
  113.         if (a != 0) {
  114.             printf("%dxx", a);
  115.         }
  116.         if (b < 0) {
  117.             printf("%dx", b);
  118.         }
  119.         else if (b>0) {
  120.             printf("+%dx", b);
  121.         }
  122.         if (c < 0) {
  123.             printf("%d", c);
  124.         }
  125.         else if (c>0) {
  126.             printf("+%d", c);
  127.         }
  128.         if (d < 0) {
  129.             printf("%di", d);
  130.         }
  131.         else if (d > 0) {
  132.             printf("+%di", d);
  133.         }
  134.         printf(" = 0\n");
  135.     }
  136.     void oblicz(int a, int b, int c, int d, LiczbaZespolona *x1, LiczbaZespolona *x2, LiczbaZespolona *x3, LiczbaZespolona *x4) {
  137.         Delta *deltar = new DeltaR(a, b, c);
  138.         Delta *deltau = new DeltaU(a, d);
  139.         if ((a != 0) && (d == 0)) {
  140.             //1
  141.            
  142.             if (deltar->getWartosc() > 0) {
  143.                  x1->real = (-1.f*b - deltar->pdelta(deltau)) / (2 * a);
  144.                  x2->real = (-1.f*b + deltar->pdelta(deltau)) / (2 * a);
  145.             }
  146.             else if (deltar->getWartosc() == 0) {
  147.                 x1->real = (-1.f*b) / (2 * a);
  148.             }
  149.             else {
  150.  
  151.                 x1->real = (-1.f*b) / (2 * a);
  152.                 x1->img =-deltar->pdelta(deltau) / (2 * a);
  153.                 x2->real = x1->real;
  154.                 x2->img = -x1->img;
  155.             }
  156.         }
  157.  
  158.         if ((a == 0) && (b != 0) && (d == 0)) {
  159.             //2
  160.             x1->img = (-1.f*c) / b;
  161.         }
  162.  
  163.         if ((a == 0) && (b == 0) && ((c != 0) || (d != 0))) {
  164.             //3
  165.             printf("Rownanie sprzeczne\n");
  166.         }
  167.  
  168.         if ((a == 0) && (b == 0) && (c == 0) && (d == 0)) {
  169.             //4
  170.             printf("Rownanie tozsamosciowe\n");
  171.         }
  172.         if ((a == 0) && (b != 0) && (d != 0)) {
  173.             //5
  174.             x1->real = -1.f*c / d;
  175.             x1->img = -1.f*d / b;
  176.         }
  177.  
  178.  
  179.         if ((a != 0) && (d != 0)) {
  180.             x1->real = (-1.f*b - deltar->pdelta(deltau)) / (2.f*a);
  181.             x1->img = (-1.f*b - deltau->pdelta(deltar)) / (2.f*a);
  182.            
  183.             x2->real = (-1.f*b - deltar->pdelta(deltau)) / (2.f*a);
  184.             x2->img = (-1.f*b + deltau->pdelta(deltar)) / (2.f*a);
  185.  
  186.             x3->real = (-1.f*b + deltar->pdelta(deltau)) / (2.f*a);
  187.             x3->img = (-1.f*b + deltau->pdelta(deltar)) / (2.f*a);
  188.  
  189.             x4->real = (-1.f*b + deltar->pdelta(deltau)) / (2.f*a);
  190.             x4->img = (-1.f*b - deltau->pdelta(deltar)) / (2.f*a);
  191.         }
  192.  
  193.         delete deltar;
  194.         delete deltau;
  195.     }
  196.    
  197.     void dodaj(DeltaR deltar, DeltaU deltau, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona *s) {
  198.         if (deltau.getWartosc() == 0) {
  199.             if (deltar.getWartosc() > 0) {
  200.                 s->real = x1.real +x2.real;
  201.             }
  202.             else if (deltar.getWartosc() < 0) {
  203.                 s->real = x1.real + x2.real;
  204.                 s->img = x1.img + x2.img;
  205.             }
  206.         }
  207.         else if (deltar.getWartosc() != 0) {
  208.             s->real = x1.real + x2.real + x3.real + x4.real;
  209.             s->img = x1.img + x2.img + x3.img + x4.img;
  210.         }
  211.     }
  212.     void odejmij(DeltaR deltar, DeltaU deltau, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona *r) {
  213.         if (deltau.getWartosc() == 0) {
  214.             if (deltar.getWartosc() > 0) {
  215.                 r->real = x1.real - x2.real;
  216.             }
  217.             else if (deltar.getWartosc() < 0) {
  218.                 r->real = x1.real - x2.real;
  219.                 r->img = x1.img - x2.img;
  220.             }
  221.         }
  222.         else if (deltar.getWartosc() != 0) {
  223.             r->real = x1.real - x2.real - x3.real - x4.real;
  224.             r->img = x1.img - x2.img - x3.img - x4.img;
  225.         }
  226.     }
  227.     void pomnoz(DeltaR deltar, DeltaU deltau, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona *il) {
  228.         if (deltau.getWartosc() == 0) {
  229.             if (deltar.getWartosc() > 0) {
  230.                 il->real = x1.real * x2.real;
  231.             }
  232.             else if (deltar.getWartosc() < 0) {
  233.                 il->real = x1.real * x2.real - x1.img * x2.img;
  234.                 il->img = (x1.real * x2.img + x2.real * x1.img);
  235.             }
  236.         }
  237.         else if (deltar.getWartosc() != 0) {
  238.             il->real = ((x1.real) * (x2.real) - (x1.img) * (x2.img)) * ((x3.real) * (x4.real) - (x3.img) * (x4.img)) - ((x1.real) * (x2.img) + (x2.real) * (x1.img)) * ((x3.real) * (x4.img) + (x4.real) * (x3.img));
  239.             il->img = ((x1.real) * (x2.real) - (x1.img) * (x2.img)) * ((x3.real) * (x4.real) + (x4.real) * (x3.img)) + ((x1.real) * (x2.img) + (x2.real) * (x1.img)) * ((x3.real) * (x4.real) - (x3.img) * (x4.img));
  240.         }
  241.     }
  242.  
  243.  
  244.     void wyswietl(int a, int b, int c, int d, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona s, LiczbaZespolona r, LiczbaZespolona il) {
  245.         Delta *deltar = new DeltaR(a, b, c);
  246.         Delta *deltau = new DeltaU(a, d);
  247.         if ((a != 0) && (d == 0)) {
  248.             //1
  249.             printf("deltar = %f\n", deltar->getWartosc());
  250.            
  251.             if (deltar->getWartosc() > 0) {
  252.                 printf("x1 = ");
  253.                 formatujLiczbeZespolona(x1);
  254.  
  255.             }
  256.             else if (deltar->getWartosc() == 0) {
  257.                 printf("x1 = ");
  258.                 formatujLiczbeZespolona(x1);
  259.             }
  260.             else {
  261.                 printf("pdeltar = %f\n", deltar->pdelta(deltau));
  262.                 printf("x1 = ");
  263.                 formatujLiczbeZespolona(x1);
  264.  
  265.                 printf("x2 =");
  266.                 formatujLiczbeZespolona(x2);
  267.  
  268.                 printf("s = ");
  269.                 formatujLiczbeZespolona(s);
  270.                 printf("r = ");
  271.                 formatujLiczbeZespolona(r);
  272.                 printf("il = ");
  273.                 formatujLiczbeZespolona(il);
  274.  
  275.             }
  276.         }
  277.  
  278.         if ((a == 0) && (b != 0) && (d == 0)) {
  279.             //2
  280.             //*x1r = (-1.f*c) / b;
  281.             printf("x1 = ");
  282.             formatujLiczbeZespolona(x1);
  283.         }
  284.  
  285.         if ((a == 0) && (b == 0) && ((c != 0) || (d != 0))) {
  286.             //3
  287.             //printf("Rownanie sprzeczne\n");
  288.         }
  289.  
  290.         if ((a == 0) && (b == 0) && (c == 0) && (d == 0)) {
  291.             //4
  292.             //printf("Rownanie tozsamosciowe\n");
  293.         }
  294.         if ((a == 0) && (b != 0) && (d != 0)) {
  295.             //5
  296.             printf("x1 = ");
  297.             formatujLiczbeZespolona(x1);
  298.         }
  299.  
  300.  
  301.         if ((a != 0) && (d != 0)) {
  302.             //6
  303.             printf("deltar = %f\n", deltar->getWartosc());
  304.             printf("deltau = %f\n", deltau->getWartosc());
  305.  
  306.             printf("pdeltar = %f\n", deltar->pdelta(deltau));
  307.             printf("pdeltau = %f\n", deltau->pdelta(deltar));
  308.  
  309.             printf("x1 = ");
  310.             formatujLiczbeZespolona(x1);
  311.  
  312.             printf("x2 = ");
  313.             formatujLiczbeZespolona(x2);
  314.  
  315.             printf("x3 = ");
  316.             formatujLiczbeZespolona(x3);
  317.  
  318.             printf("x4 = ");
  319.             formatujLiczbeZespolona(x4);
  320.  
  321.             printf("s = ");
  322.             formatujLiczbeZespolona(s);
  323.             printf("r = ");
  324.             formatujLiczbeZespolona(r);
  325.             printf("il = ");
  326.             formatujLiczbeZespolona(il);
  327.         }
  328.         delete deltar;
  329.         delete deltau;
  330.     }
  331.    
  332. private:
  333.     int a;
  334.     int b;
  335.     int c;
  336.     int d;
  337.     LiczbaZespolona* x1;
  338.     LiczbaZespolona* x2;
  339.     LiczbaZespolona* x3;
  340.     LiczbaZespolona* x4;
  341.     LiczbaZespolona* s;
  342.     LiczbaZespolona* r;
  343.     LiczbaZespolona* il;
  344. };
  345.  
  346. int main() {
  347.     Rownanie *row = new Rownanie();
  348.     delete row;
  349.     getchar(); getchar();
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement