Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Header.h
- #pragma once
- #include <iostream>
- #include <cstdlib>
- #include <cmath>
- #include <ctime>
- using namespace std;
- class Wielomian {
- friend void wypisz(Wielomian&);
- unsigned int stopien;
- double* wspolczynniki;
- public:
- Wielomian friend operator+(Wielomian&, Wielomian&);
- Wielomian friend operator-(Wielomian&, Wielomian&);
- Wielomian friend operator*(Wielomian&, int);
- Wielomian friend operator*(Wielomian&, Wielomian&);
- void setStopien(int);
- bool wspolczynnik(int, Wielomian &);
- bool wspolczynnik2(int, Wielomian &);
- friend istream& operator >> (istream &in, Wielomian &);
- friend ostream& operator<<(ostream &out, Wielomian &);
- Wielomian operator=(Wielomian);
- Wielomian();
- Wielomian(int);
- Wielomian(const Wielomian&);
- };
- //Wielomian.cpp
- #include <iostream>
- #include <cstdlib>
- #include <cmath>
- #include <ctime>
- #include "Header.h"
- using namespace std;
- void Wielomian::setStopien(int x)
- {
- stopien = x;
- wspolczynniki = new double[stopien];
- }
- bool Wielomian::wspolczynnik(int x,Wielomian &A)
- {
- int z = 0;
- for (int i = x-1; i >= 0; i--)
- {
- if (A.wspolczynniki[i] > 0)
- {
- return true;
- }
- }
- return false;
- }bool Wielomian::wspolczynnik2(int x, Wielomian &A)
- {
- int z = 0;
- for (int i = x - 1; i >= 0; i--)
- {
- if (A.wspolczynniki[i] != 0)
- {
- return true;
- }
- }
- return false;
- }
- Wielomian::Wielomian()
- {
- wspolczynniki = NULL;
- stopien = 0;
- }
- Wielomian::Wielomian(int x)
- {
- stopien = x + 1;
- wspolczynniki = new double[stopien];
- for (int i = 0; i < stopien; i++)
- {
- wspolczynniki[i] = rand() % 10;
- }
- }
- Wielomian::Wielomian(const Wielomian &kWielomian)
- {
- stopien = kWielomian.stopien;
- wspolczynniki = new double[stopien];
- for (int i = 0; i < stopien; i++)
- {
- wspolczynniki[i] = kWielomian.wspolczynniki[i];
- }
- }
- Wielomian Wielomian::operator=(Wielomian v)
- {
- this->stopien = v.stopien;
- this->wspolczynniki = new double[v.stopien];
- for (int i = 0; i < this->stopien; i++)
- {
- this->wspolczynniki[i] = v.wspolczynniki[i];
- }
- return *this;
- }
- Wielomian operator+(Wielomian& A, Wielomian& B)
- {
- Wielomian C;
- if (A.stopien >= B.stopien)
- {
- C.stopien = A.stopien;
- C.wspolczynniki = new double[C.stopien];
- for (int i = 0; i <= A.stopien; i++)
- {
- if (i <= B.stopien)
- C.wspolczynniki[i] = A.wspolczynniki[i] + B.wspolczynniki[i];
- else
- C.wspolczynniki[i] = A.wspolczynniki[i];
- }
- }
- else
- {
- C.stopien = B.stopien;
- C.wspolczynniki = new double[C.stopien];
- for (int i = 0; i <=B.stopien; i++)
- {
- if (i < A.stopien)
- C.wspolczynniki[i] = A.wspolczynniki[i] + B.wspolczynniki[i];
- else
- C.wspolczynniki[i] = B.wspolczynniki[i];
- }
- }
- return C;
- }
- Wielomian operator-(Wielomian& A, Wielomian& B)
- {
- Wielomian C;
- if (A.stopien >= B.stopien)
- {
- C.stopien = A.stopien;
- C.wspolczynniki = new double[C.stopien];
- for (int i = 0; i <= A.stopien; i++)
- {
- if (i <= B.stopien)
- C.wspolczynniki[i] = A.wspolczynniki[i] - B.wspolczynniki[i];
- else
- C.wspolczynniki[i] = A.wspolczynniki[i];
- }
- }
- else
- {
- C.stopien = B.stopien;
- C.wspolczynniki = new double[C.stopien];
- for (int i = 0; i <= B.stopien; i++)
- {
- if (i < A.stopien)
- C.wspolczynniki[i] = A.wspolczynniki[i] - B.wspolczynniki[i];
- else
- C.wspolczynniki[i] = 0 - B.wspolczynniki[i];
- }
- }
- return C;
- }
- Wielomian operator*(Wielomian&A, int x)
- {
- Wielomian C;
- C.stopien = A.stopien;
- C.wspolczynniki = new double[C.stopien];
- for (int i = 0; i < A.stopien; i++)
- C.wspolczynniki[i] = A.wspolczynniki[i] * x;
- return C;
- }
- Wielomian operator*(Wielomian &A, Wielomian &B)
- {
- Wielomian C;
- C.stopien = A.stopien + B.stopien;
- C.wspolczynniki = new double[C.stopien];
- for (int i = 0; i < C.stopien; i++)
- C.wspolczynniki[i] = 0;
- for (int i = 0; i < A.stopien; i++)
- {
- for (int j = 0; j < B.stopien; j++)
- {
- C.wspolczynniki[i+j] += A.wspolczynniki[i] * B.wspolczynniki[j];
- }
- }
- return C;
- }
- ostream& operator<<(ostream &out, Wielomian &A)
- {
- for (int i = (A.stopien - 1); i >= 0; i--)
- {
- if (A.wspolczynniki[i] == 0)
- continue;
- if (A.wspolczynniki[i] == 1 && i!=0)
- {
- out << "x^" << i<<"+";
- continue;
- }
- if (i == 0)
- {
- out << A.wspolczynniki[i] << endl;
- break;
- }
- cout << A.wspolczynniki[i] << "x^" << i;
- if (A.wspolczynnik2(i, A) == false)
- {
- out << endl;
- break;
- }
- if (A.wspolczynnik(i, A) == true)
- out << "+";
- }
- return out;
- }
- istream& operator >> (istream &in, Wielomian &A)
- {
- cout << "Podaj wspolczynniki od najmniejszego stopnia wielomianu " << endl;
- for (int i = 0; i < A.stopien; i++)
- {
- in >> A.wspolczynniki[i];
- }
- return in;
- }
- //Source.cpp
- #include <iostream>
- #include <cstdlib>
- #include <cmath>
- #include <ctime>
- #include "Header.h"
- using namespace std;
- void wypisz(Wielomian& A)
- {
- for (int i = (A.stopien - 1); i >= 0; i--)
- {
- if (A.wspolczynniki[i] == 0)
- continue;
- if (A.wspolczynniki[i] == 1 && i != 0)
- {
- cout << "x^" << i << "+";
- continue;
- }
- if (i == 0)
- {
- cout << A.wspolczynniki[i] << endl;
- break;
- }
- cout << A.wspolczynniki[i] << "x^" << i;
- if (A.wspolczynnik2(i,A)==false)
- {
- cout << endl;
- break;
- }
- if (A.wspolczynnik(i,A)==true)
- cout << "+";
- }
- }
- int main()
- {
- Wielomian C, A, B;
- int a, b, x, y, z;
- while (1)
- {
- cout << "1.Stworz wielomian A i B" << endl;
- cout << "2.Dodawanie" << endl;
- cout << "3.Odejmowanie" << endl;
- cout << "4.Mnozenie wielomianow przez liczbe" << endl;
- cout << "5.Mnozenie wielomianow przez siebie" << endl;
- cout << "6.Wyswietl wielomiany" << endl;
- cout << "7.Zakoncz" << endl;
- cout << "Co chcesz zrobic?" << endl;
- cin >> x;
- switch (x)
- {
- case 1:
- cout << "Podaj stopien wielomianu A: ";
- cin >> a;
- A.setStopien(a);
- cin >> A;
- cout << "Podaj stopien wielomianu B: ";
- cin >> b;
- B.setStopien(b);
- cin >> B;
- break;
- case 2:
- C = A + B;
- cout << C;
- wypisz(C);
- break;
- case 3:
- C = A - B;
- cout << C;
- wypisz(C);
- break;
- case 4:
- cout << "Podaj liczbe: ";
- cin >> y;
- C = A*y;
- cout << C;
- wypisz(C);
- break;
- case 5:
- C = A*B;
- cout << C;
- wypisz(C);
- break;
- case 6:
- cout << A << B;
- wypisz(A);
- wypisz(B);
- break;
- case 7:
- exit(0);
- break;
- default:
- cout << "Error" << endl;
- break;
- }
- cout << "Zakonczyc dzialanie?" << endl;
- cout << "1.TAK 2.NIE" << endl;
- cin >> z;
- switch (z)
- {
- case 1:
- exit(0);
- break;
- case 2:
- break;
- default:
- cout << "Error" << endl;
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement