#include #include template class Stack { private: T* data; size_t capacity; unsigned top; void resize() { capacity *= 2; T* newData = new (std::nothrow) T[capacity]; for (size_t i = 0; i < top; i++) { newData[i] = data[i]; } delete[] data; data = newData; } public: Stack() { capacity = 5; top = 0; data = new (std::nothrow) T[capacity]; } Stack(size_t cap) { capacity = cap; top = 0; data = new (std::nothrow) T[capacity]; } ~Stack() { delete[] data; } T& getTop() { if (isEmpty()) { std::cout << "The stack is empty"; throw new _exception; } else { return data[top - 1]; } } void push(T& el) { if (isFull()) { resize(); } data[top++] = el; } void pop() { if (isEmpty()) { return; } else { top--; } } bool isFull() const { return top == capacity; } bool isEmpty() const { return top == 0; } unsigned size() const { return top; } }; /* ДОМАШНО ЗА СЛЕДВАЩИЯ ПЪТ Във файл е записан израз от вида : <израз> :: = <цифра> | m(<израз>, <израз>) | M(<израз>, <израз>) | А(<израз>, <израз>) < цифра > :: = 0 | 1 | … | 9 | 10 | ... | до колкото голямо число запишете гд където М означава „максимум“, m – „минимум“, а А - "средно аритметично"(да се закрглява числото надолу). Да се дефинира функция, която намира стойността на израза и я записва в друг текстов файл. Пример.M(А(5,7), m(3, 2)) = 6; m(M(9, 2), m(4, А(5, 2))) = 3. ДОПЪЛНЕНИЕ: Помислете как може да нямаме ограничение до две числа в израз. Тоест да имаме нещо от сорта на <израз> :: = <цифра> | m(<израз>, <израз>, <израз>, ...) | M(<израз>, <израз>, <израз>, ...) | А(<израз>, <израз>, <израз>, ...) < цифра > :: = 0 | 1 | … | 9 | 10 | ... | до колкото голямо число запишете гд ПРИМЕР: M(A(m(4,5,12), 13, m(1, 34)),19,3,m(2,9)) = 19 */ void func(std::istream& in) { //TODO HOMEWORK } int main() { //int number = 5; //int n = 4; //std::ofstream out; //out.open("a.txt"); //if (out) //{ // out << number; // //} //out.close(); //std::cout << number << " " << n << " "; //std::ifstream in; //in.open("a.txt"); //char * buffer = nullptr; //if (in) //{ // in.seekg(0, std::ios::end); // int size = in.tellg(); // buffer = new char[size + 1]; // in.seekg(0, std::ios::beg); // in.read(buffer, size); // buffer[size] = '\0'; //} //in.close(); //std::cout << buffer; //std::cout << number << " " << n; //бинарни файлове //class Person { //private: // char* name; //public: // Person(const char* _name) // { // name = new char[strlen(_name) + 1]; // strcpy_s(name, strlen(_name) + 1, _name); // } // Person() // { // name = nullptr; // } // ~Person() // { // delete[] name; // } // void write(std::ostream& file) const // { // int siz = strlen(name); // file.write((const char*)&siz, sizeof(int)); // file.write((const char*)name, siz); // } // void read(std::istream& file) // { // delete[] name; // int siz = 0; // file.read((char*)&siz, sizeof(siz)); // std::cout << siz; // name = new char[siz + 1]; // file.read((char*)name, siz); // name[siz] = '\0'; // } // void print() const // { // std::cout << name << '\n'; // } //}; //Person dem("if"); //std::ofstream out; //out.open("a.dat", std::ios::binary); //if (out) //{ // dem.write(out); //} //out.close(); //std::ifstream in; //in.open("a.dat", std::ios::binary); //if (in) //{ // Person output; // output.read(in); // output.print(); //} //in.close(); return 0; }