mirror of https://github.com/Aelita4/ONP.git
				
				
				
			Initial commit
This commit is contained in:
		
						commit
						fdb76019cf
					
				| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
# Auto detect text files and perform LF normalization
 | 
			
		||||
* text=auto
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
{
 | 
			
		||||
    "files.associations": {
 | 
			
		||||
        "atomic": "cpp",
 | 
			
		||||
        "cmath": "cpp",
 | 
			
		||||
        "compare": "cpp",
 | 
			
		||||
        "concepts": "cpp",
 | 
			
		||||
        "cstddef": "cpp",
 | 
			
		||||
        "cstdint": "cpp",
 | 
			
		||||
        "cstdio": "cpp",
 | 
			
		||||
        "cstdlib": "cpp",
 | 
			
		||||
        "cstring": "cpp",
 | 
			
		||||
        "cwchar": "cpp",
 | 
			
		||||
        "exception": "cpp",
 | 
			
		||||
        "initializer_list": "cpp",
 | 
			
		||||
        "ios": "cpp",
 | 
			
		||||
        "iosfwd": "cpp",
 | 
			
		||||
        "iostream": "cpp",
 | 
			
		||||
        "istream": "cpp",
 | 
			
		||||
        "iterator": "cpp",
 | 
			
		||||
        "limits": "cpp",
 | 
			
		||||
        "memory": "cpp",
 | 
			
		||||
        "new": "cpp",
 | 
			
		||||
        "ostream": "cpp",
 | 
			
		||||
        "stdexcept": "cpp",
 | 
			
		||||
        "streambuf": "cpp",
 | 
			
		||||
        "system_error": "cpp",
 | 
			
		||||
        "tuple": "cpp",
 | 
			
		||||
        "type_traits": "cpp",
 | 
			
		||||
        "typeinfo": "cpp",
 | 
			
		||||
        "utility": "cpp",
 | 
			
		||||
        "xfacet": "cpp",
 | 
			
		||||
        "xiosbase": "cpp",
 | 
			
		||||
        "xlocale": "cpp",
 | 
			
		||||
        "xlocinfo": "cpp",
 | 
			
		||||
        "xlocnum": "cpp",
 | 
			
		||||
        "xmemory": "cpp",
 | 
			
		||||
        "xstddef": "cpp",
 | 
			
		||||
        "xstring": "cpp",
 | 
			
		||||
        "xtr1common": "cpp",
 | 
			
		||||
        "xutility": "cpp"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,770 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
//COLORS
 | 
			
		||||
#define BLACK 0
 | 
			
		||||
#define BLUE 1
 | 
			
		||||
#define GREEN 2
 | 
			
		||||
#define AQUA 3
 | 
			
		||||
#define RED 4
 | 
			
		||||
#define PURPLE 5
 | 
			
		||||
#define YELLOW 6
 | 
			
		||||
#define WHITE 7
 | 
			
		||||
#define GRAY 8
 | 
			
		||||
#define LIGHT_BLUE 9
 | 
			
		||||
#define LIGHT_GREEN 10
 | 
			
		||||
#define LIGHT_AQUA 11
 | 
			
		||||
#define LIGHT_RED 12
 | 
			
		||||
#define LIGHT_PURPLE 13
 | 
			
		||||
#define LIGHT_YELLOW 14
 | 
			
		||||
#define BRIGHT_WHITE 15
 | 
			
		||||
 | 
			
		||||
//FIND TYPES
 | 
			
		||||
#define ALL 0
 | 
			
		||||
#define NUMS 1
 | 
			
		||||
#define CHARS 2
 | 
			
		||||
#define EMPTY 3
 | 
			
		||||
 | 
			
		||||
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
 | 
			
		||||
 | 
			
		||||
void color(int foreground, int background)
 | 
			
		||||
{
 | 
			
		||||
    int color = (background * 16) + foreground;
 | 
			
		||||
    SetConsoleTextAttribute(hConsole, color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gotoxy(int x, int y)
 | 
			
		||||
{
 | 
			
		||||
	COORD c;
 | 
			
		||||
	c.X = x;
 | 
			
		||||
	c.Y = y;
 | 
			
		||||
	SetConsoleCursorPosition(hConsole, c);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char getCursorChar()
 | 
			
		||||
{
 | 
			
		||||
    char c = '\0';
 | 
			
		||||
    CONSOLE_SCREEN_BUFFER_INFO con;
 | 
			
		||||
    if (hConsole != INVALID_HANDLE_VALUE &&
 | 
			
		||||
        GetConsoleScreenBufferInfo(hConsole, &con))
 | 
			
		||||
    {
 | 
			
		||||
        DWORD read = 0;
 | 
			
		||||
        if (!ReadConsoleOutputCharacterA(hConsole, &c, 1,
 | 
			
		||||
            con.dwCursorPosition, &read) || read != 1
 | 
			
		||||
            )
 | 
			
		||||
            c = '\0';
 | 
			
		||||
    }
 | 
			
		||||
    return c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char readChar(int x, int y)
 | 
			
		||||
{
 | 
			
		||||
    gotoxy(x, y);
 | 
			
		||||
    char c = getCursorChar();
 | 
			
		||||
    return c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void vanishCursor()
 | 
			
		||||
{
 | 
			
		||||
    CONSOLE_CURSOR_INFO info;
 | 
			
		||||
    info.dwSize = 100;
 | 
			
		||||
    info.bVisible = FALSE;
 | 
			
		||||
    SetConsoleCursorInfo(hConsole, &info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int priority(char c)
 | 
			
		||||
{
 | 
			
		||||
	switch (c)
 | 
			
		||||
	{
 | 
			
		||||
	case '+':
 | 
			
		||||
	case '-':
 | 
			
		||||
		return 1;
 | 
			
		||||
	case '*':
 | 
			
		||||
	case '/':
 | 
			
		||||
		return 2;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool checkChar(char c, int type)
 | 
			
		||||
{
 | 
			
		||||
    char chars[] = {'+', '-', '*', '/', '(', ')', '='};
 | 
			
		||||
    int nums[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
 | 
			
		||||
 | 
			
		||||
    switch(type)
 | 
			
		||||
    {
 | 
			
		||||
    case ALL:
 | 
			
		||||
        for(int i = 0; i < 7; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if(c == chars[i]) return true;
 | 
			
		||||
        }
 | 
			
		||||
        for(int i = 0; i < 10; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if(c - '0' == nums[i]) return true;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case NUMS:
 | 
			
		||||
        for(int i = 0; i < 7; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if(c == chars[i]) return true;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case CHARS:
 | 
			
		||||
        for(int i = 0; i < 10; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if(c - '0' == nums[i]) return true;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case EMPTY:
 | 
			
		||||
        if(c == ' ' || c == '\0') return true;
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        return false;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void heapPointer(int y)
 | 
			
		||||
{
 | 
			
		||||
    gotoxy(0, 0);
 | 
			
		||||
    std::cout << y;
 | 
			
		||||
    char t = '\0';
 | 
			
		||||
    
 | 
			
		||||
    if(y > 0)
 | 
			
		||||
    {
 | 
			
		||||
        color(GREEN, GREEN);
 | 
			
		||||
        gotoxy(1, 3 + y);
 | 
			
		||||
        std::cout << " ";
 | 
			
		||||
        gotoxy(13, 3 + y);
 | 
			
		||||
        std::cout << " ";
 | 
			
		||||
        color(RED, BLACK);
 | 
			
		||||
        gotoxy(2, 3 + y);
 | 
			
		||||
        for(int i = 0; i <= 10; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if(checkChar(readChar(2 + i, 3 + y), EMPTY))
 | 
			
		||||
            {
 | 
			
		||||
                t = readChar(2 + i, 3 + y);
 | 
			
		||||
                std::cout << t;
 | 
			
		||||
            }
 | 
			
		||||
            else std::cout << " ";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(y < 27)
 | 
			
		||||
    {
 | 
			
		||||
        color(GREEN, GREEN);
 | 
			
		||||
        gotoxy(1, 5 + y);
 | 
			
		||||
        std::cout << " ";
 | 
			
		||||
        gotoxy(13, 5 + y);
 | 
			
		||||
        std::cout << " ";
 | 
			
		||||
        color(RED, BLACK);
 | 
			
		||||
        gotoxy(2, 5 + y);
 | 
			
		||||
        for(int i = 0; i <= 10; i++)
 | 
			
		||||
        {
 | 
			
		||||
            if(checkChar(readChar(2 + i, 5 + y), EMPTY))
 | 
			
		||||
            {
 | 
			
		||||
                t = readChar(2 + i, 5 + y);
 | 
			
		||||
                std::cout << t;
 | 
			
		||||
            }
 | 
			
		||||
            else std::cout << " ";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    color(RED, PURPLE);
 | 
			
		||||
    gotoxy(1, 4 + y);
 | 
			
		||||
    std::cout << ">";
 | 
			
		||||
    gotoxy(13, 4 + y);
 | 
			
		||||
    std::cout << "<";
 | 
			
		||||
 | 
			
		||||
    color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
    gotoxy(2, 4 + y);
 | 
			
		||||
    for(int i = 0; i <= 10; i++) std::cout << " ";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string stringToONP(std::string s, int speed = 500)
 | 
			
		||||
{
 | 
			
		||||
    heapPointer(0);
 | 
			
		||||
	std::string out = "";
 | 
			
		||||
	int len = s.length();
 | 
			
		||||
	char tmp;
 | 
			
		||||
 | 
			
		||||
	char heap[100] {};
 | 
			
		||||
	for (int i = 0; i < 100; i++) heap[i] = '\0';
 | 
			
		||||
	int counter = 0;
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < len; i++)
 | 
			
		||||
	{
 | 
			
		||||
        color(WHITE, BLACK);
 | 
			
		||||
		gotoxy(50 + i, 2);
 | 
			
		||||
        std::cout << " ^";
 | 
			
		||||
		tmp = s.c_str()[i];
 | 
			
		||||
		switch (tmp)
 | 
			
		||||
		{
 | 
			
		||||
		case '=':
 | 
			
		||||
			for (; counter > 0; counter--)
 | 
			
		||||
			{
 | 
			
		||||
				out += heap[counter - 1];
 | 
			
		||||
				/*gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
				color(RED, BLACK);
 | 
			
		||||
				std::cout << " ";*/
 | 
			
		||||
                gotoxy(2, 3 + counter);
 | 
			
		||||
                color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
                std::cout << " ";
 | 
			
		||||
                heapPointer(counter);
 | 
			
		||||
			}
 | 
			
		||||
            Sleep(500);
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            gotoxy(50 + len, 2);
 | 
			
		||||
            std::cout << " ";
 | 
			
		||||
			color(WHITE, BLACK);
 | 
			
		||||
			gotoxy(42, 3);
 | 
			
		||||
			std::cout << out;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
            Sleep(1000);
 | 
			
		||||
			return out;
 | 
			
		||||
		case '0':
 | 
			
		||||
		case '1':
 | 
			
		||||
		case '2':
 | 
			
		||||
		case '3':
 | 
			
		||||
		case '4':
 | 
			
		||||
		case '5':
 | 
			
		||||
		case '6':
 | 
			
		||||
		case '7':
 | 
			
		||||
		case '8':
 | 
			
		||||
		case '9':
 | 
			
		||||
			out += tmp;
 | 
			
		||||
			break;
 | 
			
		||||
		case '+':
 | 
			
		||||
		case '-':
 | 
			
		||||
		case '*':
 | 
			
		||||
		case '/':
 | 
			
		||||
			while (counter)
 | 
			
		||||
			{
 | 
			
		||||
				if (priority(tmp) > priority(heap[counter - 1])) break;
 | 
			
		||||
				out += heap[--counter];
 | 
			
		||||
                heapPointer(counter);
 | 
			
		||||
				heap[counter] = '\0';
 | 
			
		||||
				/*gotoxy(3 + (2 * counter), 2);
 | 
			
		||||
				color(RED, BLACK);
 | 
			
		||||
				std::cout << " ";
 | 
			
		||||
				color(WHITE, BLACK);*/
 | 
			
		||||
                gotoxy(2, 3 + counter);
 | 
			
		||||
                color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
                if(counter != 0) std::cout << " ";
 | 
			
		||||
                color(WHITE, BLACK);
 | 
			
		||||
			}
 | 
			
		||||
			heap[counter] = tmp;
 | 
			
		||||
			/*gotoxy(3 + (2 * counter), 2);
 | 
			
		||||
			color(RED, BLACK);
 | 
			
		||||
			std::cout << tmp;
 | 
			
		||||
			color(WHITE, BLACK);*/
 | 
			
		||||
            heapPointer(counter + 1);
 | 
			
		||||
            gotoxy(2, 4 + counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
			counter++;
 | 
			
		||||
            color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		case '(':
 | 
			
		||||
			heap[counter] = tmp;
 | 
			
		||||
			/*gotoxy(3 + (2 * counter), 2);
 | 
			
		||||
			color(RED, BLACK);
 | 
			
		||||
			std::cout << tmp;
 | 
			
		||||
			color(WHITE, BLACK);*/
 | 
			
		||||
            heapPointer(counter + 1);
 | 
			
		||||
            gotoxy(2, 4 + counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
			counter++;
 | 
			
		||||
            color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		case ')':
 | 
			
		||||
			
 | 
			
		||||
			for (; heap[counter] != '('; counter--)
 | 
			
		||||
			{
 | 
			
		||||
                heapPointer(counter);
 | 
			
		||||
				if (priority(heap[counter]) > priority(heap[counter - 1]))
 | 
			
		||||
				{
 | 
			
		||||
					out += heap[counter];
 | 
			
		||||
					heap[counter] = '\0';
 | 
			
		||||
					//gotoxy(3 + (2 * counter), 2);
 | 
			
		||||
                    gotoxy(2, 4 + counter);
 | 
			
		||||
                    color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
					std::cout << " ";
 | 
			
		||||
				}
 | 
			
		||||
                color(WHITE, BLACK);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			heap[counter] = '\0';
 | 
			
		||||
			/*gotoxy(3 + (2 * counter), 2);
 | 
			
		||||
			color(RED, BLACK);
 | 
			
		||||
			std::cout << " ";
 | 
			
		||||
			color(WHITE, BLACK);*/
 | 
			
		||||
            heapPointer(counter + 1);
 | 
			
		||||
            gotoxy(2, 4 + counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
            std::cout << " ";
 | 
			
		||||
            color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		case ' ':
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		gotoxy(42, 3);
 | 
			
		||||
		std::cout << out;
 | 
			
		||||
		Sleep(speed);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int calculateONP(std::string s, int speed = 500)
 | 
			
		||||
{
 | 
			
		||||
    heapPointer(0);
 | 
			
		||||
	int out = 0;
 | 
			
		||||
	int len = s.length();
 | 
			
		||||
	char tmp;
 | 
			
		||||
	int counter = 0;
 | 
			
		||||
	int calculate = 0;
 | 
			
		||||
 | 
			
		||||
	int heap[100]{};
 | 
			
		||||
	for (int i = 0; i < 100; i++) heap[i] = 0;
 | 
			
		||||
 | 
			
		||||
	for (int i = 0; i < len; i++)
 | 
			
		||||
	{
 | 
			
		||||
		//gotoxy(1 + i, 8);
 | 
			
		||||
		gotoxy(41 + i, 4);
 | 
			
		||||
        std::cout << " ^";
 | 
			
		||||
		tmp = s.c_str()[i];
 | 
			
		||||
		switch (tmp)
 | 
			
		||||
		{
 | 
			
		||||
		case '0':
 | 
			
		||||
		case '1':
 | 
			
		||||
		case '2':
 | 
			
		||||
		case '3':
 | 
			
		||||
		case '4':
 | 
			
		||||
		case '5':
 | 
			
		||||
		case '6':
 | 
			
		||||
		case '7':
 | 
			
		||||
		case '8':
 | 
			
		||||
		case '9':
 | 
			
		||||
			heap[counter] = tmp - '0';
 | 
			
		||||
			//gotoxy(3 + (2 * counter), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			std::cout << tmp;
 | 
			
		||||
            gotoxy(42 + i, 3);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(41 + i, 4);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
			color(WHITE, BLACK);
 | 
			
		||||
			counter++;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
			break;
 | 
			
		||||
		case '+':
 | 
			
		||||
			calculate = heap[counter - 2] + heap[counter - 1];
 | 
			
		||||
			heap[counter - 2] = 0;
 | 
			
		||||
			heap[counter - 1] = 0;
 | 
			
		||||
            //(((2+2)+2)+2)+2=
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 2)), 2);
 | 
			
		||||
			gotoxy(2, 4 + counter - 2);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
			gotoxy(2, 4 + counter - 1);
 | 
			
		||||
            std::cout << "  ";
 | 
			
		||||
			counter -= 2;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
			heap[counter++] = calculate;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
			gotoxy(2, 4 + counter - 1);
 | 
			
		||||
            std::cout << calculate;
 | 
			
		||||
            gotoxy(42 + i, 3);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(41 + i, 4);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
			color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		case '-':
 | 
			
		||||
			calculate = heap[counter - 2] - heap[counter - 1];
 | 
			
		||||
			heap[counter - 2] = 0;
 | 
			
		||||
			heap[counter - 1] = 0;
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 2)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 2);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 1);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			counter -= 2;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
			heap[counter++] = calculate;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 1);
 | 
			
		||||
			std::cout << calculate;
 | 
			
		||||
            gotoxy(42 + i, 3);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(41 + i, 4);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
			color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		case '*':
 | 
			
		||||
			calculate = heap[counter - 2] * heap[counter - 1];
 | 
			
		||||
			heap[counter - 2] = 0;
 | 
			
		||||
			heap[counter - 1] = 0;
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 2)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 2);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 1);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			counter -= 2;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
			heap[counter++] = calculate;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 1);
 | 
			
		||||
			std::cout << calculate;
 | 
			
		||||
            gotoxy(42 + i, 3);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(41 + i, 4);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
			color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		case '/':
 | 
			
		||||
			if (heap[counter - 1] == 0)
 | 
			
		||||
			{
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                gotoxy(43 + len, 3);
 | 
			
		||||
                std::cout << "(failure)";
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                gotoxy(42 + i, 3);
 | 
			
		||||
                std::cout << tmp;
 | 
			
		||||
                gotoxy(41 + i, 4);
 | 
			
		||||
                std::cout << " ^";
 | 
			
		||||
                gotoxy(15, 5);
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "Invalid operation at position ";
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << i + 1;
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << " (division by zero)";   
 | 
			
		||||
				/*gotoxy(2, 11);
 | 
			
		||||
				std::cout << "DIV_ZERO_ERROR";*/
 | 
			
		||||
				color(WHITE, BLACK);
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
			calculate = heap[counter - 2] / heap[counter - 1];
 | 
			
		||||
			heap[counter - 2] = 0;
 | 
			
		||||
			heap[counter - 1] = 0;
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 2)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 2);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 1);
 | 
			
		||||
			std::cout << "  ";
 | 
			
		||||
			counter -= 2;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
			heap[counter++] = calculate;
 | 
			
		||||
            heapPointer(counter);
 | 
			
		||||
            color(YELLOW, LIGHT_PURPLE);
 | 
			
		||||
			//gotoxy(3 + (2 * (counter - 1)), 2);
 | 
			
		||||
            gotoxy(2, 4 + counter - 1);
 | 
			
		||||
			std::cout << calculate;
 | 
			
		||||
            gotoxy(42 + i, 3);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(41 + i, 4);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
			color(WHITE, BLACK);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Sleep(speed);
 | 
			
		||||
	}
 | 
			
		||||
	gotoxy(15, 5);
 | 
			
		||||
	std::cout << "RESULT: " << heap[counter - 1];
 | 
			
		||||
	return heap[counter - 1];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool validate(std::string s, int speed = 250)
 | 
			
		||||
{
 | 
			
		||||
    int len = s.length();
 | 
			
		||||
 | 
			
		||||
    if(len < 2)
 | 
			
		||||
    {
 | 
			
		||||
        gotoxy(51, 1);
 | 
			
		||||
        color(LIGHT_RED, BLACK);
 | 
			
		||||
        std::cout << s;
 | 
			
		||||
        gotoxy(52 + len, 1);
 | 
			
		||||
        color(RED, BLACK);
 | 
			
		||||
        std::cout << "(failure)    ";
 | 
			
		||||
        gotoxy(15, 3);
 | 
			
		||||
        color(RED, BLACK);
 | 
			
		||||
        std::cout << "Invalid formula (too short)";     
 | 
			
		||||
        color(WHITE, BLACK);
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    char tmp;
 | 
			
		||||
    int brackets = 0;
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < len; i++)
 | 
			
		||||
	{
 | 
			
		||||
		tmp = s.c_str()[i];
 | 
			
		||||
		switch (tmp)
 | 
			
		||||
        {
 | 
			
		||||
		case '0':
 | 
			
		||||
		case '1':
 | 
			
		||||
		case '2':
 | 
			
		||||
		case '3':
 | 
			
		||||
		case '4':
 | 
			
		||||
		case '5':
 | 
			
		||||
		case '6':
 | 
			
		||||
		case '7':
 | 
			
		||||
		case '8':
 | 
			
		||||
		case '9':
 | 
			
		||||
        case '=':
 | 
			
		||||
            gotoxy(51 + i, 1);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(50 + i, 2);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
            break;
 | 
			
		||||
		case '+':
 | 
			
		||||
		case '-':
 | 
			
		||||
		case '*':
 | 
			
		||||
		case '/':
 | 
			
		||||
            if(s.c_str()[i - 1] == '+' ||
 | 
			
		||||
                s.c_str()[i - 1] == '-' ||
 | 
			
		||||
                s.c_str()[i - 1] == '*' ||
 | 
			
		||||
                s.c_str()[i - 1] == '/')
 | 
			
		||||
            {
 | 
			
		||||
                gotoxy(52 + len, 1);
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "(failure)    ";
 | 
			
		||||
                gotoxy(50 + i, 2);
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << " ^";
 | 
			
		||||
                gotoxy(51 + i, 1);
 | 
			
		||||
                std::cout << tmp;
 | 
			
		||||
                gotoxy(15, 3);
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "Invalid character '";
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << tmp;
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "' at position ";
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << i + 1;
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << " (cannot use operator as element)";     
 | 
			
		||||
                color(WHITE, BLACK);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            gotoxy(51 + i, 1);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(50 + i, 2);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
            break;
 | 
			
		||||
        case '(':
 | 
			
		||||
            gotoxy(51 + i, 1);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(50 + i, 2);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
            brackets++;
 | 
			
		||||
            break;
 | 
			
		||||
        case ')':
 | 
			
		||||
            gotoxy(51 + i, 1);
 | 
			
		||||
            color(LIGHT_GREEN, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(50 + i, 2);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
            brackets--;
 | 
			
		||||
            if(brackets < 0)
 | 
			
		||||
            {
 | 
			
		||||
                gotoxy(52 + len, 1);
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "(failure)    ";
 | 
			
		||||
                gotoxy(50 + i, 2);
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << " ^";
 | 
			
		||||
                gotoxy(51 + i, 1);
 | 
			
		||||
                std::cout << tmp;
 | 
			
		||||
                gotoxy(15, 3);
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "Invalid character '";
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << tmp;
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << "' at position ";
 | 
			
		||||
                color(LIGHT_RED, BLACK);
 | 
			
		||||
                std::cout << i + 1;
 | 
			
		||||
                color(RED, BLACK);
 | 
			
		||||
                std::cout << " (brackets do not match)";     
 | 
			
		||||
                color(WHITE, BLACK);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            gotoxy(52 + len, 1);
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << "(failure)    ";
 | 
			
		||||
            gotoxy(50 + i, 2);
 | 
			
		||||
            color(LIGHT_RED, BLACK);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
            gotoxy(51 + i, 1);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            gotoxy(15, 3);
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << "Invalid character '";
 | 
			
		||||
            color(LIGHT_RED, BLACK);
 | 
			
		||||
            std::cout << tmp;
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << "' at position ";
 | 
			
		||||
            color(LIGHT_RED, BLACK);
 | 
			
		||||
            std::cout << i + 1;
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << " (not present in charset)";            
 | 
			
		||||
            color(WHITE, BLACK);
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        Sleep(speed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(s.c_str()[len - 1] != '=')
 | 
			
		||||
    {
 | 
			
		||||
            gotoxy(52 + len, 1);
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << "(failure)    ";
 | 
			
		||||
            gotoxy(49 + len, 2);
 | 
			
		||||
            color(LIGHT_RED, BLACK);
 | 
			
		||||
            std::cout << " ^";
 | 
			
		||||
            gotoxy(50 + len, 1);
 | 
			
		||||
            std::cout << s.c_str()[len - 1];
 | 
			
		||||
            gotoxy(15, 3);
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << "Invalid character '";
 | 
			
		||||
            color(LIGHT_RED, BLACK);
 | 
			
		||||
            std::cout << s.c_str()[len - 1];
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << "' at position ";
 | 
			
		||||
            color(LIGHT_RED, BLACK);
 | 
			
		||||
            std::cout << len;
 | 
			
		||||
            color(RED, BLACK);
 | 
			
		||||
            std::cout << " (missing equation mark '=')";            
 | 
			
		||||
            color(WHITE, BLACK);
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * @param argv[1] equation
 | 
			
		||||
 * @param argv[2] check speed in ms
 | 
			
		||||
 * @param argv[3] convert speed in ms
 | 
			
		||||
 * @param argv[4] calculation speed in ms
 | 
			
		||||
 */
 | 
			
		||||
int main(int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
    /*std::cout << argc << std::endl;
 | 
			
		||||
    for(int i = 0; i < argc; i++) std::cout << argv[i] << std::endl;
 | 
			
		||||
    system("pause");
 | 
			
		||||
    return 0;*/
 | 
			
		||||
	//std::string equation = "((7+3)/5*4*(4-2))/2=";
 | 
			
		||||
    //std::string equation = "4;/0=";
 | 
			
		||||
 | 
			
		||||
    std::stringstream tmp1, tmp2, tmp3;
 | 
			
		||||
    int sp1, sp2, sp3;
 | 
			
		||||
    tmp1 << argv[2];
 | 
			
		||||
    tmp2 << argv[3];
 | 
			
		||||
    tmp3 << argv[4];
 | 
			
		||||
    tmp1 >> sp1;
 | 
			
		||||
    tmp2 >> sp2;
 | 
			
		||||
    tmp3 >> sp3;
 | 
			
		||||
 | 
			
		||||
	system("cls");
 | 
			
		||||
    system("pause > NUL");
 | 
			
		||||
 | 
			
		||||
    color(GREEN, GREEN);
 | 
			
		||||
    for(int i = 1; i <= 28; i++)
 | 
			
		||||
    {
 | 
			
		||||
        gotoxy(1, i);
 | 
			
		||||
        std::cout << "#";
 | 
			
		||||
        gotoxy(13, i);
 | 
			
		||||
        std::cout << "#";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for(int i = 2; i <= 12; i++)
 | 
			
		||||
    {
 | 
			
		||||
        gotoxy(i, 1);
 | 
			
		||||
        std::cout << "#";
 | 
			
		||||
        gotoxy(i, 3);
 | 
			
		||||
        std::cout << "#";
 | 
			
		||||
        gotoxy(i, 28);
 | 
			
		||||
        std::cout << "#";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    color(RED, GREEN);
 | 
			
		||||
    gotoxy(2, 3);
 | 
			
		||||
    std::cout << "MEMORY HEAP";
 | 
			
		||||
    gotoxy(2, 1);
 | 
			
		||||
    std::cout << "NUM BUILDER";
 | 
			
		||||
 | 
			
		||||
    color(WHITE, BLACK);
 | 
			
		||||
 | 
			
		||||
	gotoxy(15, 1);
 | 
			
		||||
	std::cout << "EQUATION PROVIDED IN STANDARD FORM: ";
 | 
			
		||||
    
 | 
			
		||||
    std::string equation = "";
 | 
			
		||||
    if(argv[1])
 | 
			
		||||
    {
 | 
			
		||||
        equation = argv[1];
 | 
			
		||||
        std::cout << equation;
 | 
			
		||||
    } 
 | 
			
		||||
    else std::cin >> equation;
 | 
			
		||||
    vanishCursor();
 | 
			
		||||
    int len = equation.length();
 | 
			
		||||
 | 
			
		||||
    gotoxy(52 + len, 1);
 | 
			
		||||
    std::cout << "(checking...)";
 | 
			
		||||
 | 
			
		||||
    if(!validate(equation, sp1))
 | 
			
		||||
    {
 | 
			
		||||
        system("pause > NUL");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    gotoxy(50 + len, 2);
 | 
			
		||||
    std::cout << " ";
 | 
			
		||||
    gotoxy(52 + len, 1);
 | 
			
		||||
    color(GREEN, BLACK);
 | 
			
		||||
    std::cout << "(success)    ";
 | 
			
		||||
    Sleep(1000);
 | 
			
		||||
 | 
			
		||||
    color(WHITE, BLACK);
 | 
			
		||||
    gotoxy(15, 3);
 | 
			
		||||
    std::cout << "EQUATION CONVERTED TO ONP: ";
 | 
			
		||||
 | 
			
		||||
	std::string a = stringToONP(equation, sp2);
 | 
			
		||||
	int b = calculateONP(a, sp3);
 | 
			
		||||
 | 
			
		||||
    system("pause > NUL");
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
"((7+3)/5*4*(4-2))/2="
 | 
			
		||||
		Loading…
	
		Reference in New Issue