Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- class Delta;
- class DeltaR;
- class DeltaU;
- class Delta {
- public:
- Delta() {}
- virtual ~Delta() {}
- virtual float pdelta(Delta *) = 0;
- float getWartosc() {
- return wartosc;
- }
- protected:
- float wartosc;
- };
- class DeltaR : public Delta {
- public:
- DeltaR(int a, int b, int c) {
- wartosc = 1.f*b*b - 4.f * a*c;
- }
- ~DeltaR() {}
- float pdelta(Delta *deltau) {
- if (deltau->getWartosc() == 0) {
- return (float)sqrt(fabs(wartosc));
- }
- else {
- return (float)sqrt((sqrt(wartosc * wartosc + deltau->getWartosc() * deltau->getWartosc()) + wartosc) / 2);
- }
- }
- };
- class DeltaU : public Delta {
- public:
- DeltaU(int a, int d) {
- wartosc = -4.f * a*d;
- }
- ~DeltaU() {}
- float pdelta(Delta *deltar) {
- return (float)sqrt((sqrt(deltar->getWartosc()*deltar->getWartosc() + wartosc * wartosc) - deltar->getWartosc()) / 2);
- }
- };
- struct LiczbaZespolona {
- float real;
- float img;
- };
- void formatujLiczbeZespolona(LiczbaZespolona liczba) {
- if (liczba.real != 0) {
- printf("%f", liczba.real);
- }
- if (liczba.img < 0 || liczba.real == 0) {
- printf("%fi", liczba.img);
- }
- else if (liczba.img > 0) {
- printf("+%fi", liczba.img);
- }
- printf("\n");
- }
- class Rownanie {
- public:
- Rownanie() {
- x1 = new LiczbaZespolona;
- x2 = new LiczbaZespolona;
- x3 = new LiczbaZespolona;
- x4 = new LiczbaZespolona;
- x1->real = 0;
- x2->real = 0;
- x3->real = 0;
- x4->real = 0;
- x1->img = 0;
- x2->img = 0;
- x3->img = 0;
- x4->img = 0;
- s = new LiczbaZespolona;
- r = new LiczbaZespolona;
- il = new LiczbaZespolona;
- wprowadz(&a, &b, &c, &d);
- formatuj(a, b, c, d);
- oblicz(a, b, c, d, x1, x2, x3, x4);
- dodaj(DeltaR(a, b, c), DeltaU(a, d), *x1, *x2, *x3, *x4, s);
- odejmij(DeltaR(a, b, c), DeltaU(a, d), *x1, *x2, *x3, *x4, r);
- pomnoz(DeltaR(a, b, c), DeltaU(a, d), *x1, *x2, *x3, *x4, il);
- wyswietl(a, b, c, d, *x1, *x2, *x3, *x4, *s, *r, *il);
- }
- ~Rownanie() {
- delete x1;
- delete x2;
- delete x3;
- delete x4;
- }
- void wprowadz(int *a, int *b, int *c, int *d) {
- printf("a = ");
- scanf("%d", a);
- printf("b = ");
- scanf("%d", b);
- printf("c = ");
- scanf("%d", c);
- printf("d = ");
- scanf("%d", d);
- }
- void formatuj(int a, int b, int c, int d) {
- if (a == 0 && b == 0 && c == 0 && d == 0) {
- printf("0");
- }
- if (a != 0) {
- printf("%dxx", a);
- }
- if (b < 0) {
- printf("%dx", b);
- }
- else if (b>0) {
- printf("+%dx", b);
- }
- if (c < 0) {
- printf("%d", c);
- }
- else if (c>0) {
- printf("+%d", c);
- }
- if (d < 0) {
- printf("%di", d);
- }
- else if (d > 0) {
- printf("+%di", d);
- }
- printf(" = 0\n");
- }
- void oblicz(int a, int b, int c, int d, LiczbaZespolona *x1, LiczbaZespolona *x2, LiczbaZespolona *x3, LiczbaZespolona *x4) {
- Delta *deltar = new DeltaR(a, b, c);
- Delta *deltau = new DeltaU(a, d);
- if ((a != 0) && (d == 0)) {
- //1
- if (deltar->getWartosc() > 0) {
- x1->real = (-1.f*b - deltar->pdelta(deltau)) / (2 * a);
- x2->real = (-1.f*b + deltar->pdelta(deltau)) / (2 * a);
- }
- else if (deltar->getWartosc() == 0) {
- x1->real = (-1.f*b) / (2 * a);
- }
- else {
- x1->real = (-1.f*b) / (2 * a);
- x1->img =-deltar->pdelta(deltau) / (2 * a);
- x2->real = x1->real;
- x2->img = -x1->img;
- }
- }
- if ((a == 0) && (b != 0) && (d == 0)) {
- //2
- x1->img = (-1.f*c) / b;
- }
- if ((a == 0) && (b == 0) && ((c != 0) || (d != 0))) {
- //3
- printf("Rownanie sprzeczne\n");
- }
- if ((a == 0) && (b == 0) && (c == 0) && (d == 0)) {
- //4
- printf("Rownanie tozsamosciowe\n");
- }
- if ((a == 0) && (b != 0) && (d != 0)) {
- //5
- x1->real = -1.f*c / d;
- x1->img = -1.f*d / b;
- }
- if ((a != 0) && (d != 0)) {
- x1->real = (-1.f*b - deltar->pdelta(deltau)) / (2.f*a);
- x1->img = (-1.f*b - deltau->pdelta(deltar)) / (2.f*a);
- x2->real = (-1.f*b - deltar->pdelta(deltau)) / (2.f*a);
- x2->img = (-1.f*b + deltau->pdelta(deltar)) / (2.f*a);
- x3->real = (-1.f*b + deltar->pdelta(deltau)) / (2.f*a);
- x3->img = (-1.f*b + deltau->pdelta(deltar)) / (2.f*a);
- x4->real = (-1.f*b + deltar->pdelta(deltau)) / (2.f*a);
- x4->img = (-1.f*b - deltau->pdelta(deltar)) / (2.f*a);
- }
- delete deltar;
- delete deltau;
- }
- void dodaj(DeltaR deltar, DeltaU deltau, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona *s) {
- if (deltau.getWartosc() == 0) {
- if (deltar.getWartosc() > 0) {
- s->real = x1.real +x2.real;
- }
- else if (deltar.getWartosc() < 0) {
- s->real = x1.real + x2.real;
- s->img = x1.img + x2.img;
- }
- }
- else if (deltar.getWartosc() != 0) {
- s->real = x1.real + x2.real + x3.real + x4.real;
- s->img = x1.img + x2.img + x3.img + x4.img;
- }
- }
- void odejmij(DeltaR deltar, DeltaU deltau, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona *r) {
- if (deltau.getWartosc() == 0) {
- if (deltar.getWartosc() > 0) {
- r->real = x1.real - x2.real;
- }
- else if (deltar.getWartosc() < 0) {
- r->real = x1.real - x2.real;
- r->img = x1.img - x2.img;
- }
- }
- else if (deltar.getWartosc() != 0) {
- r->real = x1.real - x2.real - x3.real - x4.real;
- r->img = x1.img - x2.img - x3.img - x4.img;
- }
- }
- void pomnoz(DeltaR deltar, DeltaU deltau, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona *il) {
- if (deltau.getWartosc() == 0) {
- if (deltar.getWartosc() > 0) {
- il->real = x1.real * x2.real;
- }
- else if (deltar.getWartosc() < 0) {
- il->real = x1.real * x2.real - x1.img * x2.img;
- il->img = (x1.real * x2.img + x2.real * x1.img);
- }
- }
- else if (deltar.getWartosc() != 0) {
- 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));
- 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));
- }
- }
- void wyswietl(int a, int b, int c, int d, LiczbaZespolona x1, LiczbaZespolona x2, LiczbaZespolona x3, LiczbaZespolona x4, LiczbaZespolona s, LiczbaZespolona r, LiczbaZespolona il) {
- Delta *deltar = new DeltaR(a, b, c);
- Delta *deltau = new DeltaU(a, d);
- if ((a != 0) && (d == 0)) {
- //1
- printf("deltar = %f\n", deltar->getWartosc());
- if (deltar->getWartosc() > 0) {
- printf("x1 = ");
- formatujLiczbeZespolona(x1);
- }
- else if (deltar->getWartosc() == 0) {
- printf("x1 = ");
- formatujLiczbeZespolona(x1);
- }
- else {
- printf("pdeltar = %f\n", deltar->pdelta(deltau));
- printf("x1 = ");
- formatujLiczbeZespolona(x1);
- printf("x2 =");
- formatujLiczbeZespolona(x2);
- printf("s = ");
- formatujLiczbeZespolona(s);
- printf("r = ");
- formatujLiczbeZespolona(r);
- printf("il = ");
- formatujLiczbeZespolona(il);
- }
- }
- if ((a == 0) && (b != 0) && (d == 0)) {
- //2
- //*x1r = (-1.f*c) / b;
- printf("x1 = ");
- formatujLiczbeZespolona(x1);
- }
- if ((a == 0) && (b == 0) && ((c != 0) || (d != 0))) {
- //3
- //printf("Rownanie sprzeczne\n");
- }
- if ((a == 0) && (b == 0) && (c == 0) && (d == 0)) {
- //4
- //printf("Rownanie tozsamosciowe\n");
- }
- if ((a == 0) && (b != 0) && (d != 0)) {
- //5
- printf("x1 = ");
- formatujLiczbeZespolona(x1);
- }
- if ((a != 0) && (d != 0)) {
- //6
- printf("deltar = %f\n", deltar->getWartosc());
- printf("deltau = %f\n", deltau->getWartosc());
- printf("pdeltar = %f\n", deltar->pdelta(deltau));
- printf("pdeltau = %f\n", deltau->pdelta(deltar));
- printf("x1 = ");
- formatujLiczbeZespolona(x1);
- printf("x2 = ");
- formatujLiczbeZespolona(x2);
- printf("x3 = ");
- formatujLiczbeZespolona(x3);
- printf("x4 = ");
- formatujLiczbeZespolona(x4);
- printf("s = ");
- formatujLiczbeZespolona(s);
- printf("r = ");
- formatujLiczbeZespolona(r);
- printf("il = ");
- formatujLiczbeZespolona(il);
- }
- delete deltar;
- delete deltau;
- }
- private:
- int a;
- int b;
- int c;
- int d;
- LiczbaZespolona* x1;
- LiczbaZespolona* x2;
- LiczbaZespolona* x3;
- LiczbaZespolona* x4;
- LiczbaZespolona* s;
- LiczbaZespolona* r;
- LiczbaZespolona* il;
- };
- int main() {
- Rownanie *row = new Rownanie();
- delete row;
- getchar(); getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement