Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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.
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- using namespace std;
- // ---------------------------------------
- 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.
- #include <iostream>
- using namespace std;
- // ---------------------------------------
- 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