//aqui recebe uma string e são tratados todos os chars para o proposito do programa int calcular(char g_char[], pilha *p){ if( isEnter(g_char[0]) || !isEmpty(p)){ int i = 0; while(g_char[i] != '\0'){ //insere o estado dos calculos if(!isClear(g_char[i]) && !isConsulta(g_char[i])){ if(isEmpty(p)) printf("- "); consulta_inversa(p); printf("\n"); } //se for numero insere na pilha if(isNum(g_char[i])){ insertNum(p, g_char[i] - 48); //se o char anterior tbm for numero faz calculo para fazer dos 2 um numero if(isNum(g_char[i-1] )|| isEnter(g_char[i-1])) faz_calculo(p); else{ clear_calc(p); if(!RUN_CODES){ exibeHeader(); printf("\nErro! Voce deve usar necessariamente \'E\' para informar a entrada de um numero\n"); } } i++; continue; } //se for um E insere 0 na pilha if(isEnter(g_char[i])){ insertNum(p, 0); i++; continue; } //se for '-' faz uma subtração if(g_char[i] == '-'){ faz_sub(p); i++; continue; } //se for '+' faz uma adição if(g_char[i] == '+'){ faz_soma(p); i++; continue; } //se for '/' faz uma divisão if(g_char[i] == '/'){ faz_div(p); i++; continue; } //se for '*' faz uma multiplicação if(g_char[i] == '*'){ faz_mult(p); i++; continue; } //se for '^' faz uma potencia if(g_char[i] == '^'){ faz_pow(p); i++; continue; } //se for '!' faz um fatorial if(g_char[i] == '!'){ faz_fatorial(p); i++; continue; } //se for C limpa a pilha if(isClear(g_char[i])){ clear_calc(p); if(!RUN_CODES){ exibeHeader(); printf("\nPilha Vazia\n"); } i++; continue; } //se for V faz uma consulta na pilha if(isConsulta(g_char[i]) && strlen(g_char) == 1){ if(!RUN_CODES) consulta(p); i++; } } if(!isConsulta(g_char[i-1])) //consulta que exibe a pilha ao contrario consulta_inversa(p); if(!RUN_CODES) printf("\n"); return 0; }else{ //se o char indice 0 for V exibe a consulta if(isConsulta(g_char[0])) if(!RUN_CODES) consulta(p); else{ //se o char indice 0 for C limpa a pilha if(isClear(g_char[0])) clear_calc(p); else return 1; } } }
//メイン処理 void c_o_main() { if(display_mode==1) clear_calc(); else if(display_mode==2) over_calc(); }