Merge pull request #3 from Aelita4/fix_bugs

Fix bugs
This commit is contained in:
Aelita4 2021-01-19 21:18:04 +01:00 committed by GitHub
commit 982b44c666
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 204 additions and 12 deletions

214
main.cpp
View File

@ -130,8 +130,8 @@ bool checkChar(char c, int type)
void heapPointer(int y) void heapPointer(int y)
{ {
gotoxy(0, 0); /*gotoxy(0, 0);
std::cout << y; std::cout << y;*/
char t = '\0'; char t = '\0';
if(y > 0) if(y > 0)
@ -185,16 +185,41 @@ void heapPointer(int y)
for(int i = 0; i <= 10; i++) std::cout << " "; for(int i = 0; i <= 10; i++) std::cout << " ";
} }
void displayNumBuilder(int n)
{
int len;
int i = n;
for(len = 0; i > 0; len++)
{
i /= 10;
}
//std::cout << 10 - len;
gotoxy(2, 2);
color(RED, BLACK);
std::cout << n;
for(int j = 0; j < (10 - len); j++)
{
std::cout << " ";
}
color(WHITE, BLACK);
}
std::string stringToONP(std::string s, int speed = 500) std::string stringToONP(std::string s, int speed = 500)
{ {
heapPointer(0); heapPointer(0);
std::string out = ""; std::string out = "";
int len = s.length(); int len = s.length();
int numBuild = 0;
int numBuildCount = 1;
char tmp; char tmp;
char heap[100] {}; char heap[100] {};
for (int i = 0; i < 100; i++) heap[i] = '\0'; for (int i = 0; i < 100; i++) heap[i] = '\0';
int counter = 0; int counter = 0;
char prev = '\0';
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
@ -205,6 +230,11 @@ std::string stringToONP(std::string s, int speed = 500)
switch (tmp) switch (tmp)
{ {
case '=': case '=':
numBuildCount = 1;
out += std::to_string(numBuild);
numBuild = 0;
out += ";";
displayNumBuilder(0);
for (; counter > 0; counter--) for (; counter > 0; counter--)
{ {
out += heap[counter - 1]; out += heap[counter - 1];
@ -236,12 +266,25 @@ std::string stringToONP(std::string s, int speed = 500)
case '7': case '7':
case '8': case '8':
case '9': case '9':
out += tmp; numBuild += (numBuildCount * (tmp - '0'));
numBuildCount *= 10;
displayNumBuilder(numBuild);
//out += tmp;
break; break;
case '+': case '+':
case '-': case '-':
case '*': case '*':
case '/': case '/':
numBuildCount = 1;
if(prev == ')') prev = '\0';
else {
out += std::to_string(numBuild);
numBuild = 0;
out += ";";
displayNumBuilder(0);
}
while (counter) while (counter)
{ {
if (priority(tmp) > priority(heap[counter - 1])) break; if (priority(tmp) > priority(heap[counter - 1])) break;
@ -283,7 +326,40 @@ std::string stringToONP(std::string s, int speed = 500)
color(WHITE, BLACK); color(WHITE, BLACK);
break; break;
case ')': case ')':
prev = ')';
numBuildCount = 1;
out += std::to_string(numBuild);
numBuild = 0;
out += ";";
displayNumBuilder(0);
while (counter)
{
if(heap[counter - 1] == '(') break;
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);
for (; heap[counter] != '('; counter--) for (; heap[counter] != '('; counter--)
{ {
heapPointer(counter); heapPointer(counter);
@ -325,10 +401,14 @@ int calculateONP(std::string s, int speed = 500)
{ {
heapPointer(0); heapPointer(0);
int out = 0; int out = 0;
int numBuild = 0;
int numBuildCount = 1;
int len = s.length(); int len = s.length();
char tmp; char tmp;
int counter = 0; int counter = 0;
int calculate = 0; int calculate = 0;
int digit = 0;
char prev = '\0';
int heap[100]{}; int heap[100]{};
for (int i = 0; i < 100; i++) heap[i] = 0; for (int i = 0; i < 100; i++) heap[i] = 0;
@ -336,11 +416,39 @@ int calculateONP(std::string s, int speed = 500)
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
//gotoxy(1 + i, 8); //gotoxy(1 + i, 8);
color(LIGHT_GREEN, BLACK);
gotoxy(41 + i, 4); gotoxy(41 + i, 4);
std::cout << " ^"; std::cout << " ^";
tmp = s.c_str()[i]; tmp = s.c_str()[i];
switch (tmp) switch (tmp)
{ {
case ';':
heap[counter] = numBuild;
//gotoxy(3 + (2 * counter), 2);
gotoxy(42 + i, 3);
color(LIGHT_GREEN, BLACK);
//std::cout << numBuild;
gotoxy(41 + i, 4);
std::cout << " ^";
color(WHITE, BLACK);
counter++;
heapPointer(counter);
gotoxy(2, 3 + counter);
color(YELLOW, BLACK);
std::cout << numBuild;
numBuildCount = 1;
numBuild = 0;
displayNumBuilder(0);
gotoxy(42 + i, 3);
color(LIGHT_GREEN, BLACK);
std::cout << tmp;
gotoxy(41 + i, 4);
std::cout << " ^";
color(WHITE, BLACK);
break;
case '0': case '0':
case '1': case '1':
case '2': case '2':
@ -351,7 +459,16 @@ int calculateONP(std::string s, int speed = 500)
case '7': case '7':
case '8': case '8':
case '9': case '9':
heap[counter] = tmp - '0'; numBuild += (numBuildCount * (tmp - '0'));
numBuildCount *= 10;
displayNumBuilder(numBuild);
gotoxy(42 + i, 3);
color(LIGHT_GREEN, BLACK);
std::cout << tmp;
gotoxy(41 + i, 4);
std::cout << " ^";
color(WHITE, BLACK);
/*heap[counter] = tmp - '0';
//gotoxy(3 + (2 * counter), 2); //gotoxy(3 + (2 * counter), 2);
gotoxy(2, 4 + counter); gotoxy(2, 4 + counter);
color(YELLOW, LIGHT_PURPLE); color(YELLOW, LIGHT_PURPLE);
@ -363,7 +480,7 @@ int calculateONP(std::string s, int speed = 500)
std::cout << " ^"; std::cout << " ^";
color(WHITE, BLACK); color(WHITE, BLACK);
counter++; counter++;
heapPointer(counter); heapPointer(counter);*/
break; break;
case '+': case '+':
calculate = heap[counter - 2] + heap[counter - 1]; calculate = heap[counter - 2] + heap[counter - 1];
@ -372,7 +489,7 @@ int calculateONP(std::string s, int speed = 500)
//(((2+2)+2)+2)+2= //(((2+2)+2)+2)+2=
//gotoxy(3 + (2 * (counter - 2)), 2); //gotoxy(3 + (2 * (counter - 2)), 2);
gotoxy(2, 4 + counter - 2); gotoxy(2, 4 + counter - 2);
color(YELLOW, LIGHT_PURPLE); color(YELLOW, BLACK);
std::cout << " "; std::cout << " ";
//gotoxy(3 + (2 * (counter - 1)), 2); //gotoxy(3 + (2 * (counter - 1)), 2);
gotoxy(2, 4 + counter - 1); gotoxy(2, 4 + counter - 1);
@ -381,7 +498,7 @@ int calculateONP(std::string s, int speed = 500)
heapPointer(counter); heapPointer(counter);
heap[counter++] = calculate; heap[counter++] = calculate;
heapPointer(counter); heapPointer(counter);
color(YELLOW, LIGHT_PURPLE); color(YELLOW, BLACK);
//gotoxy(3 + (2 * (counter - 1)), 2); //gotoxy(3 + (2 * (counter - 1)), 2);
gotoxy(2, 4 + counter - 1); gotoxy(2, 4 + counter - 1);
std::cout << calculate; std::cout << calculate;
@ -393,7 +510,7 @@ int calculateONP(std::string s, int speed = 500)
color(WHITE, BLACK); color(WHITE, BLACK);
break; break;
case '-': case '-':
calculate = heap[counter - 2] - heap[counter - 1]; /*calculate = heap[counter - 2] - heap[counter - 1];
heap[counter - 2] = 0; heap[counter - 2] = 0;
heap[counter - 1] = 0; heap[counter - 1] = 0;
//gotoxy(3 + (2 * (counter - 2)), 2); //gotoxy(3 + (2 * (counter - 2)), 2);
@ -415,11 +532,36 @@ int calculateONP(std::string s, int speed = 500)
color(LIGHT_GREEN, BLACK); color(LIGHT_GREEN, BLACK);
std::cout << tmp; std::cout << tmp;
gotoxy(41 + i, 4); gotoxy(41 + i, 4);
std::cout << " ^";
color(WHITE, BLACK);*/
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, BLACK);
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, BLACK);
//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 << " ^"; std::cout << " ^";
color(WHITE, BLACK); color(WHITE, BLACK);
break; break;
case '*': case '*':
calculate = heap[counter - 2] * heap[counter - 1]; /*calculate = heap[counter - 2] * heap[counter - 1];
heap[counter - 2] = 0; heap[counter - 2] = 0;
heap[counter - 1] = 0; heap[counter - 1] = 0;
//gotoxy(3 + (2 * (counter - 2)), 2); //gotoxy(3 + (2 * (counter - 2)), 2);
@ -441,6 +583,31 @@ int calculateONP(std::string s, int speed = 500)
color(LIGHT_GREEN, BLACK); color(LIGHT_GREEN, BLACK);
std::cout << tmp; std::cout << tmp;
gotoxy(41 + i, 4); gotoxy(41 + i, 4);
std::cout << " ^";
color(WHITE, BLACK);*/
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, BLACK);
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, BLACK);
//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 << " ^"; std::cout << " ^";
color(WHITE, BLACK); color(WHITE, BLACK);
break; break;
@ -467,7 +634,7 @@ int calculateONP(std::string s, int speed = 500)
color(WHITE, BLACK); color(WHITE, BLACK);
return 0; return 0;
} }
calculate = heap[counter - 2] / heap[counter - 1]; /*calculate = heap[counter - 2] / heap[counter - 1];
heap[counter - 2] = 0; heap[counter - 2] = 0;
heap[counter - 1] = 0; heap[counter - 1] = 0;
//gotoxy(3 + (2 * (counter - 2)), 2); //gotoxy(3 + (2 * (counter - 2)), 2);
@ -489,6 +656,31 @@ int calculateONP(std::string s, int speed = 500)
color(LIGHT_GREEN, BLACK); color(LIGHT_GREEN, BLACK);
std::cout << tmp; std::cout << tmp;
gotoxy(41 + i, 4); gotoxy(41 + i, 4);
std::cout << " ^";
color(WHITE, BLACK);*/
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, BLACK);
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, BLACK);
//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 << " ^"; std::cout << " ^";
color(WHITE, BLACK); color(WHITE, BLACK);
break; break;
@ -700,7 +892,7 @@ int main(int argc, char *argv[])
tmp3 >> sp3; tmp3 >> sp3;
system("cls"); system("cls");
system("pause > NUL"); //system("pause > NUL");
color(GREEN, GREEN); color(GREEN, GREEN);
for(int i = 1; i <= 28; i++) for(int i = 1; i <= 28; i++)