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