#include #include #include // 2013.12.07 Hwangho's Calculator. // input : °ýÈ£¸¦ Æ÷ÇÔÇÏ ¼ö½Ä // output : ÈÄÀ§¼ö½Ä , °è»ê °á°ú int priority (char str[]); // ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§ void main() { // ÀÏ´Ü, ÀÔ·ÂÀ» ¹Þ°í ¹®ÀÚ¿­À» ºÐ¸®Çغ¾½Ã´Ù. char input[50], test[50][50]; // ÀÔ·Â ¹®ÀÚ¿­, ºÐ¸®µÈ ¹®ÀÚ¿­ char temp[50][50], postfix[50][50]; // ÈÄÀ§¼ö½Ä º¯È¯À» À§ÇÑ Àӽà ¹®ÀÚ¿­, ÈÄÀ§¼ö½ÄÀ¸·Î º¯È¯µÈ ¹®ÀÚ¿­ int i, j = 0, k = 0; int top = -1, post_top = -1; int select; float calculate[50], num1, num2, result; printf("> > > > > > > > > > > > > > > > > > > > > > > > > > > > \n"); printf(" H W A N G H O ' S C A L C U L A T O R\n"); printf("> > > > > > > > > > > > > > > > > > > > > > > > > > > > \n\n"); while(1) { printf(" MENU >> 1. ¼ö½Ä ÀÔ·Â 2. ÈÄÀ§ ¼ö½Ä º¯È¯ 3. °è»ê °á°ú 4. Á¾·á\n"); printf(" ¼±Åà >> "); scanf("%d", &select); fflush(stdin); switch(select) { case 1: { system("cls"); printf("\n ¼ö½ÄÀ» ÀÔ·ÂÇϼ¼¿ä : "); gets(input); for(i=0;i<=strlen(input);i++) { if ( (48 <= input[i] && input[i] <= 57) || input[i] == '.') // ¼ýÀÚÀ̰ųª, ¼Ò¼ýÁ¡ÀÏ °æ¿ì -> ³Ê´Â ÇÇ¿¬»êÀÚ. { // ÀúÀåÇÑ´Ù. ¿¬»êÀÚ°¡ ³ª¿Ã ¶§±îÁö test[j][k] = input[i]; k++; } else // ¿¬»êÀÚÀÎ °æ¿ì. { if(input[i] == ')' || input[i] == '(') // °ýÈ£ ¿¬»êÀÚÀÎ °æ¿ì { if(test[j-1][k] == '+' || test[j-1][k] == '-' || test[j-1][k] == '*' || test[j-1][k] == '/') // ¾Õ¼­ ÀúÀåµÆ´ø °ÍÀÌ ¿¬»êÀÚÀÏ °æ¿ì { test[j][k] = input[i]; test[j][++k] = '\0'; j++; k = 0; } else { test[j][k] = '\0'; // ¾Õ¿¡ ÀÖ´ø °ÍÀ» ³Î¹®ÀÚ ³Ö¾îÁָ鼭 ¸¶¹«¸®. k = 0; // k´Â ¿ø»óº¹±Í. index´Â 0ºÎÅʹϱñ test[++j][k] = input[i]; test[j][++k] = '\0'; // ¿¬»êÀÚ´Â ÇÑ Çà¿¡¸¸ ÀúÀåÇҰŴϱñ ¸¶¹«¸® j++; k = 0; } } else // »çÄ¢¿¬»êÀÚÀÎ °æ¿ì. { if (test[j-1][k] == ')') // ¾Õ¼­ ÀúÀåµÈ °ÍÀÌ °ýÈ£ÀÏ °æ¿ì. { test[j][k] = input[i]; test[j][++k] = '\0'; j++; k = 0; } else { test[j][k] = '\0'; // ¾Õ¿¡ ÀÖ´ø °ÍÀ» ³Î¹®ÀÚ ³Ö¾îÁָ鼭 ¸¶¹«¸®. k = 0; // k´Â ¿ø»óº¹±Í. index´Â 0ºÎÅʹϱñ test[++j][k] = input[i]; test[j][++k] = '\0'; // ¿¬»êÀÚ´Â ÇÑ Çà¿¡¸¸ ÀúÀåÇҰŴϱñ ¸¶¹«¸® j++; k = 0; } } } } test[j][k] = '\0'; break; } case 2: { system("cls"); printf("\n %s¸¦ ÈÄÀ§ ¼ö½ÄÀ¸·Î º¯È¯Çϸé [", input); for(i=0;i priority(test[i]) ) // ¾Õ¼­ ÀúÀåµÈ ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§°¡ Áö±Ý µé¾î¿À·Á´Â ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§º¸´Ù ³ôÀ¸¸é { strcpy(postfix[++post_top], temp[top--]); //printf("%s ", temp[top--]); strcpy(temp[++top], test[i]); } else { strcpy(temp[++top], test[i]); } break; } } } } while(top != -1) { strcpy(postfix[post_top++], temp[top--]); } strcpy(postfix[post_top], "\0"); for(i=0;i> %.2f\n\n", result); break; } case 4: { printf(" G O O D B Y E !!! \n\n"); exit(0); break; } default: { printf(" Insert E R R O R! Program exit ¤Ñ! \n\n"); exit(1); break; } } } } } int priority (char str[]) // ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§. { switch(*str) { case '(': case ')': { return 1; break; } case '+': case '-': { return 2; break; } case '*': case '/': { return 3; break; } default: { return -1; break; } } }