Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Zadaci
- // 1. zadatak
- class GeoException : public exception {
- private:
- double mA, mB, mC;
- public:
- GeoException(double, double, double);
- double getA();
- double getB();
- double getC();
- };
- GeoException::GeoException(double A, double B, double C) : mA(A), mB(B), mC(C) {}
- double GeoException::getA() {
- return mA;
- }
- double GeoException::getB() {
- return mB;
- }
- double GeoException::getC() {
- return mC;
- }
- class Trokut {
- private:
- double mA, mB, mC;
- public:
- Trokut();
- Trokut(double, double, double);
- double povrsina();
- double opseg();
- bool pravokutan();
- };
- Trokut::Trokut() : mA(0), mB(0), mC(0) {}
- Trokut::Trokut(double A, double B, double C) : mA(A), mB(B), mC(C) {
- if (mC >= mA + mB || mB >= mA + mC || mA >= mB + mC) {
- throw GeoException(mA, mB, mC);
- }
- }
- double Trokut::povrsina() {
- double s = (mA + mB + mC) / 2;
- return sqrt(s*(s - mA)*(s - mB)*(s - mC));
- }
- double Trokut::opseg() {
- return mA + mB + mC;
- }
- bool Trokut::pravokutan() {
- if (mC == sqrt(mA * mA + mB * mB)) {
- return true;
- }
- return false;
- }
- int main() {
- try {
- Trokut T1, T2(7, 5, 6);
- cout << "Prvi trokut: " << endl;
- cout << "Opseg: " << T1.opseg() << "\nPovrsina: " << T1.povrsina() << endl;
- cout << "Drugi trokut: " << endl;
- cout << "Opseg: " << T2.opseg() << "\nPovrsina: " << T2.povrsina() << endl;
- if (T2.pravokutan()) {
- cout << "Trokut je pravokutan." << endl;
- }
- else {
- cout << "Trokut nije pravokutan." << endl;
- }
- }
- catch (GeoException& iznimka) {
- cout << "Trokut sa stranicama: " << iznimka.getA() << ", " << iznimka.getB() << ", " << iznimka.getC() << " nije moguc." << endl;
- }
- return 0;
- }
- // 2. zadatak
- // ---------------------------------------
- namespace Enio {
- class Complex {
- friend bool operator==(Complex&, Complex&);
- friend bool operator!=(Complex&, Complex&);
- friend bool operator<(Complex&, Complex&);
- friend bool operator>(Complex&, Complex&);
- friend bool operator<=(Complex&, Complex&);
- friend bool operator>=(Complex&, Complex&);
- private:
- double mRe, mIm;
- public:
- Complex();
- Complex(double, double);
- void setRe(double);
- void setIm(double);
- double getRe();
- double getIm();
- };
- Complex::Complex() :mRe(0), mIm(0) {}
- Complex::Complex(double Re, double Im) : mRe(Re), mIm(Im) {}
- void Complex::setRe(double Re) { mRe = Re; }
- void Complex::setIm(double Im) { mIm = Im; }
- double Complex::getRe() { return mRe; }
- double Complex::getIm() { return mIm; }
- bool operator==(Complex &ref1, Complex &ref2) {
- return sqrt(pow(ref1.mRe, 2) + pow(ref1.mIm, 2)) == sqrt(pow(ref2.mRe, 2) + pow(ref2.mIm, 2));
- }
- bool operator!=(Complex &ref1, Complex &ref2) {
- return !(ref1 == ref2);
- }
- bool operator<(Complex &ref1, Complex &ref2) {
- return sqrt(pow(ref1.mRe, 2) + pow(ref1.mIm, 2)) < sqrt(pow(ref2.mRe, 2) + pow(ref2.mIm, 2));
- }
- bool operator>=(Complex &ref1, Complex &ref2) {
- return !(ref1 < ref2);
- }
- bool operator>(Complex &ref1, Complex &ref2) {
- return sqrt(pow(ref1.mRe, 2) + pow(ref1.mIm, 2)) > sqrt(pow(ref2.mRe, 2) + pow(ref2.mIm, 2));
- }
- bool operator<=(Complex &ref1, Complex &ref2) {
- return !(ref1 > ref2);
- }
- }
- // ---------------------------------------
- namespace Dordan {
- class Complex {
- friend bool operator==(Complex&, Complex&);
- friend bool operator!=(Complex&, Complex&);
- friend bool operator<(Complex&, Complex&);
- friend bool operator>(Complex&, Complex&);
- friend bool operator<=(Complex&, Complex&);
- friend bool operator>=(Complex&, Complex&);
- private:
- double mRe, mIm;
- public:
- Complex();
- Complex(double, double);
- void setRe(double);
- void setIm(double);
- double getRe();
- double getIm();
- };
- Complex::Complex() :mRe(0), mIm(0) {}
- Complex::Complex(double Re, double Im) : mRe(Re), mIm(Im) {}
- void Complex::setRe(double Re) { mRe = Re; }
- void Complex::setIm(double Im) { mIm = Im; }
- double Complex::getRe() { return mRe; }
- double Complex::getIm() { return mIm; }
- bool operator==(Complex &ref1, Complex &ref2) {
- return ref1.mRe == ref2.mRe && ref1.mIm == ref2.mIm;
- }
- bool operator!=(Complex &ref1, Complex &ref2) {
- return !(ref1 == ref2);
- }
- bool operator<(Complex &ref1, Complex &ref2) {
- return ref1.mRe < ref2.mRe && ref1.mIm < ref2.mIm;
- }
- bool operator>=(Complex &ref1, Complex &ref2) {
- return !(ref1 < ref2);
- }
- bool operator>(Complex &ref1, Complex &ref2) {
- return ref1.mRe > ref2.mRe && ref1.mIm > ref2.mIm;
- }
- bool operator<=(Complex &ref1, Complex &ref2) {
- return !(ref1 > ref2);
- }
- }
- // ---------------------------------------
- template <class Type>
- void swap(Type *xp, Type *yp)
- {
- Type temp = *xp;
- *xp = *yp;
- *yp = temp;
- }
- template<class Type>
- void sort(Type arr[], int n)
- {
- int i, j;
- for (i = 0; i < n - 1; i++) {
- for (j = 0; j < n - i - 1; j++) {
- if (arr[j] > arr[j + 1]) {
- swap(&arr[j], &arr[j + 1]);
- }
- }
- }
- }
- // ---------------------------------------
- int main() {
- srand((unsigned)time(NULL));
- int n = 5;
- Enio::Complex* First = new Enio::Complex[n];
- Dordan::Complex* Second = new Dordan::Complex[n];
- for (int i = 0; i < n; i++) {
- First[i].setRe(rand() % 20); First[i].setIm(rand() % 20);
- Second[i].setRe(rand() % 20); Second[i].setIm(rand() % 20);
- }
- sort(First, n);
- sort(Second, n);
- cout << "First: " << endl;
- for (int i = 0; i < n; i++) {
- cout << First[i].getRe() << " + " << First[i].getIm() << "i" << endl;
- }
- cout << "Second: " << endl;
- for (int i = 0; i < n; i++) {
- cout << Second[i].getRe() << " + " << Second[i].getIm() << "i" << endl;
- }
- delete[] First;
- delete[] Second;
- return 0;
- }
- // Analiza
- // 1. Proširi drugi zadatak iz vježbe br. 3 (predložak klase stog) tako da se podigne
- // iznimka StogExc izvedena iz osnovne klase exception u slučaju da se pokuša
- // umetnuti element na pun stog ili skinuti element sa praznog stoga.Napisati
- // odgovarajuću main funkciju, koja će sadržavati blokove pokušaja i hvatanja.
- // ---------------------------------------
- class StackException : public exception
- {
- private:
- char* msg;
- public:
- StackException(char* txt) : msg(txt) {}
- virtual const char* what() const throw()
- {
- return msg;
- }
- };
- class StackFull : public StackException
- {
- public:
- StackFull() : StackException("Stack is full.") {}
- };
- class StackEmpty : public StackException
- {
- public:
- StackEmpty() : StackException("Stack is empty.") {}
- };
- // ---------------------------------------
- template <typename Type>
- class Stack {
- private:
- Type* mData;
- int mSize;
- int mTop;
- public:
- Stack(int size) : mSize(size) {
- mTop = -1;
- mData = new Type[mSize];
- }
- Stack(const Stack& ref) {
- mTop = ref.mTop;
- mSize = ref.mSize;
- mData = new Type[mSize];
- for (int i = 0; i < mSize; i++) {
- mData[i] = ref.mData[i];
- }
- }
- ~Stack() {
- delete[] mData;
- }
- Type& operator[](int idx) {
- return mData[idx];
- }
- Stack& operator=(const Stack& ref) {
- if (this != &ref) {
- mSize = ref.mSize;
- mData = new Type[mSize];
- for (int i = 0; i < mSize; i++) {
- mData[i] = ref.mData[i];
- }
- }
- return *this;
- }
- bool push(const Type& x) {
- if (mTop >= (mSize - 1)) {
- throw StackFull();
- return false;
- }
- else {
- mData[++mTop] = x;
- cout << x << " pushed into stack\n";
- return true;
- }
- }
- Type pop() {
- if (mTop < 0) {
- throw StackEmpty();
- return 0;
- }
- else {
- Type x = mData[mTop--];
- return x;
- }
- }
- void top() {
- cout << mData[mTop] << endl;
- }
- };
- // ---------------------------------------
- int main() {
- try {
- Stack<int> first(10);
- Stack<double> second(7);
- Stack<int> third = first;
- std::srand((unsigned int)time(0));
- for (int i = 0; i < 10; i++) {
- int random = (int)rand() * 10 / (int)RAND_MAX;
- first.push(random);
- }
- cout << first.pop() << endl;
- first.top();
- for (int i = 0; i < 7; i++) {
- double random = (double)rand() * 10 / (double)RAND_MAX;
- second.push(random);
- }
- cout << second.pop() << endl;
- second.top();
- for (int i = 0; i < 10; i++) {
- int random = (int)rand() * 10 / (int)RAND_MAX;
- third.push(random);
- }
- cout << third.pop() << endl;
- third.top();
- }
- catch (StackFull &iznimka)
- {
- cout << iznimka.what() << endl;
- }
- catch (StackEmpty &iznimka)
- {
- cout << iznimka.what() << endl;
- }
- catch (...)
- {
- cout << "Error!" << endl;
- }
- return 0;
- }
- // 2. Proširi klasu razlomak iz vježbe br. 2 tako da se podigne iznimka u slučaju
- // konstruiranja razlomka sa nazivnikom = 0. U mainu napisati blokove pokušaja i
- // hvatanja iznimke.
- // ---------------------------------------
- class Razlomak
- {
- friend Razlomak operator- (const Razlomak&, const Razlomak&);
- friend Razlomak operator+ (const Razlomak&, const Razlomak&);
- friend Razlomak operator* (const Razlomak&, const Razlomak&);
- friend Razlomak operator/ (const Razlomak&, const Razlomak&);
- friend ostream& operator<< (ostream&, Razlomak&);
- friend istream& operator>> (istream&, Razlomak&);
- friend bool operator== (const Razlomak&, const Razlomak&);
- friend bool operator!= (const Razlomak&, const Razlomak&);
- private:
- int b;
- int n;
- public:
- Razlomak(int x, int y) {
- if (y == 0) {
- throw "Nazivnik ne moze biti 0";
- }
- else {
- b = x;
- n = y;
- }
- }
- Razlomak& operator= (const Razlomak& ref)
- {
- b = ref.b;
- n = ref.n;
- cout << "Pozvan operator pridruzivanja" << endl;
- return *this;
- }
- };
- // ---------------------------------------
- Razlomak operator+ (const Razlomak& r1, const Razlomak& r2)
- {
- return Razlomak(r1.b + r2.n + r2.b*r1.n, r1.n*r2.n);
- }
- Razlomak operator- (const Razlomak& r1, const Razlomak& r2)
- {
- return Razlomak(r1.b + r2.n - r2.b*r1.n, r1.n*r2.n);
- }
- Razlomak operator* (const Razlomak& r1, const Razlomak& r2)
- {
- return Razlomak(r1.b + r2.b, r1.n*r2.n);
- }
- Razlomak operator/ (const Razlomak& r1, const Razlomak& r2)
- {
- return Razlomak(r1.b*r2.n, r1.n*r2.b);
- }
- ostream& operator<< (ostream& izlaz, Razlomak& ref)
- {
- izlaz << ref.b << "/" << ref.n;
- return izlaz;
- }
- istream& operator>> (istream& ulaz, Razlomak& ref)
- {
- char a;
- ulaz >> ref.b >> a >> ref.n;
- return ulaz;
- }
- bool operator== (const Razlomak& r1, const Razlomak& r2)
- {
- return r1.b*r2.n == r1.n*r2.b;
- }
- bool operator!= (const Razlomak& r1, const Razlomak& r2)
- {
- return !(r1 == r2);
- }
- // ---------------------------------------
- int main() {
- try {
- Razlomak A(4, 3);
- Razlomak B(5, 0);
- cout << A + B << endl;
- }
- catch (char *iznimka) {
- cout << iznimka << endl;
- }
- catch (...) {
- cout << "Error!" << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement