Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Стеки, очереди и деки

Автор:   •  Февраль 26, 2018  •  Лабораторная работа  •  4,129 Слов (17 Страниц)  •  375 Просмотры

Страница 1 из 17

Министерство науки и образования Республики Казахстан

Карагандинский государственный технический университет.

Лабораторная работа №2

Дисциплина: Алгоритмы и структуры данных

Тема: Стеки, очереди и деки

                                                                             

.

Выполнил:

      Студент гр. ИНФ-17-2

                                                                             Алиев С.С.

Караганда 2018

Цель данной работы: Написать программу – калькулятор, вычисляющую значение арифметического выражения. Выражение может содержать операнды, скобки и знаки операций. Операнды – целые числа. В выражении могут быть использованы бинарные операции: сложение, вычитание, умножение, деление и возведение в степень, – и унарные: унарный минус и квадратный корень.

Указания. Унарный минус встречается только в начале выражения или после открывающей скобки. Унарный минус при преобразовании в польскую запись лучше заменить другим символическим обозначением (например, ‘$’). Также не стоит забывать, что возведение в степень и извлечение корня обладают большим приоритетом, чем приоритет арифметических операций.

Листинг программы:

#include "stdafx.h"

#include

#include

#include

#include

#include

using namespace std;

template

class Stack_calc

{

private:

        T *data_;

        int last_;

        int dataSize_;

public:

        Stack_calc(int size = 0)

        {

                data_ = nullptr;

                if (size <= 0) this->dataSize_ = 50;

                last_ = -1;

                data_ = new T(this->dataSize_);

        }

        

        //~Stack_calc()

        //{

        //        delete [] data_;

        //        data_ = nullptr;

        //}

        void push(T ch)

        {

                if (last_ == dataSize_)

                        {

                        dataSize_ = (dataSize_ * 3) / 2;

                        data_ = (T*)realloc(data_, dataSize_ * sizeof(T));

                }

                data_[++last_] = ch;

        }

        T pop()

        {

                T ch;

                if (last_ >= 0)

                {

                        ch = data_[last_];

                        last_--;

                        return ch;

                }

                else

                {

                        cout << "Stack is empty!" << endl;

                        return 0;

                }

        }

        T show_top(){

                return data_[last_];

        }

        bool check()

        {

                if(last_< 0)

                {

                return 0;

                }

                return true;

        }

};

class RPN

{

        Stack_calc stack1;

        Stack_calc stack2;

        string output;

        string temp;

public:

        double calculate(string s)

        {

                string output = getexp(s);

                double result = counting(output);

                return result;

        }

        

        

        double counting(string exp)

        {

                double result;

                for(size_t i = 0; i < exp.size(); i++)

                {

                        if(is_num(exp[i]))

                        {

                                while(!is_delimiter(exp[i]))

                                {

                                        temp += exp[i++];

                                        if (i == exp.size()) break;

                                }

...

Скачать:   txt (8.7 Kb)   pdf (151.5 Kb)   docx (19.2 Kb)  
Продолжить читать еще 16 страниц(ы) »
Доступно только на Essays.club