рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рд╕реЗ рд▓реЗрдХрд░ рдЗрдВрдлрд╝рд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди рддрдХ

Habr├й рдкрд░ рд░рд┐рд╡рд░реНрд╕ рдкреЛрд▓рд┐рд╢ рдиреЛрдЯреЗрд╢рди (рд░рд┐рдХреЙрд░реНрдб) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдмрддрд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЙрдкрд╕рд░реНрдЧ рд╕рдВрдХреЗрддрди рдореЗрдВ рдмрдиреНрджреА рдХреА рд╕рд╛рд░реА рд╢рдХреНрддрд┐ред рдЙрдкрдирд┐рд╖рдж рд╕реЗ рд╣рдореЗрдВ рдЕрд╡рдЧрдд рдХрд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЗрдиреНрдлрд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди рдХреЛ рдКрдкрд░ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рд░рд┐рд╡рд░реНрд╕ рдПрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХреНрд░реИрдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред



рд╢рд╛рдпрдж рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬреЛ рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ: "рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?" рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдПрдХ рдЗрдирдлрд╝рд┐рдХреНрд╕ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрдиреНрджреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВрдЧреЗред

рдЦреИрд░, рдЕрдм рдмрд┐рдВрджреБ рдХреЗ рдХрд░реАрдм:

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдореМрдЦрд┐рдХ рд╡рд┐рд╡рд░рдг:


  1. рдпрджрд┐ рд╣рдо рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджреЗрддреЗ рд╣реИрдВ
  2. рдпрджрд┐ рд╣рдо рдСрдкрд░реЗрд╢рди рд╕рдВрдХреЗрдд рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ:
    • рд╣рдо 2 рд╢реАрд░реНрд╖ рд╕реНрдЯреИрдХ рддрддреНрд╡ рд▓реЗрддреЗ рд╣реИрдВ
    • рдпрджрд┐ рдкрд╣рд▓реЗ рддрддреНрд╡ рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрдо рд╣реИ (рдФрд░ 0 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ) рддреЛ рд╕рд╡рд╛рд▓ рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ
    • рдЗрд╕реА рддрд░рд╣ рд╕реЗ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП
    • рд╣рдо рд╕реНрдЯреИрдХ рдкрд░ рдлрд╝реЙрд░реНрдо рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ: 2 рддрддреНрд╡ + рдСрдкрд░реЗрд╢рди рд╕рд╛рдЗрди + 1 рддрддреНрд╡

  3. рдпрджрд┐ рд░реЗрдЦрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрдВрд╕ рдЧрдИ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХрд╛ рдореВрд▓реНрдп рд╣реИ


C ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


#include <string.h> #include <stdio.h> #include <stdlib.h> // <-- --> enum optype {power = 3, devide = 2, multiply = 2, minus = 1, plus = 1, null=0}; //   struct stack { char val[100]; //    optype type; //  ,      stack * next; } *head; // <--   --> void push(char[], optype); void push(stack *); stack * pop(); // <--   --> void fromRPN(char *, char *); // (RPN) Reverse polish notation int main() { char infix[100], postfix[100]; //     gets(infix); fromRPN(infix, postfix); printf("%s\n", postfix); system("PAUSE"); return 0; } void push(stack *t) { t->next = head; head = t; } void push(char str[], optype type) { stack *t; t = new stack; strcpy(t->val, str); t->type = type; t->next = head; head = t; } stack * pop() { stack *t; if(head == NULL) return NULL; t = head; head = t->next; return t; } void fromRPN(char * input, char * output) { char c, temp[100]; int p_temp=0; stack *h1, *h2; //        optype type; head = NULL; while(*input) { //     c = (*input); if(c>='0' && c<='9' || c=='.') { //     temp[p_temp++] = c; //      temp[p_temp] = '\0'; } else if(c==' ') { if(p_temp!=0) { push(temp, null); //     p_temp=0; } temp[0] = '\0'; //    } else if(c=='+' || c=='-'|| c=='*' || c=='/' || c=='^') { //    h1 = pop(); //    h2 = pop(); //    //    if(c=='+') type = plus; else if(c=='-') type = minus; else if(c=='*') type = multiply; else if(c=='/') type = devide; else if(c=='^') type = power; if(h2->type!=null && h2->type<type) { //    1-   temp[0]='('; temp[1] = '\0'; //     h2->val[strlen(h2->val)+2] = '\0'; h2->val[strlen(h2->val)+1] = c; //    h2->val[strlen(h2->val)] = ')'; } else { h2->val[strlen(h2->val)+1] = '\0'; h2->val[strlen(h2->val)] = c; } strcat(temp, h2->val); if(h1->type!=null && h1->type<type) { //    2-   strcat(temp, "("); h1->val[strlen(h1->val)+1] = '\0'; h1->val[strlen(h1->val)] = ')'; //     } strcat(temp, h1->val); strcpy(h2->val, temp); //        ,       delete h1; //    h2->type = type; //     push(h2); //      } input++; } strcpy(output, (pop())->val); //         } 


рдХрд╛рдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рд╣рдмреНрд░ рдХреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓реЗрдВрдЧреЗ:
 : (8+2*5)/(1+3*2-4) : 8 2 5 * + 1 3 2 * + 4 - /  "8" : {"8", null=0}  "8" --: {"8", null=0}  "2" --: {"2", null=0}, {"8", null=0}  "5" --: {5, null=0}, {"2", null=0}, {"8", null=0}  "*" --: {"2*5", multiply=2}, {"8", null=0}  "+" --: {"8+2*5", plus=1}  "1" --: {"1", null=0}, {"8+2*5", plus=1}  "3" --: {"3", null=0}, {"1", null=0}, {"8+2*5", plus=1}  "2" --: {"2", null=0}, {"3", null=0}, {"1", null=0}, {"8+2*5", plus=1}  "*" --: {"3*2", multiply=2}, {"1", null=0}, {"8+2*5", plus=1}  "+" --: {"1+3*2", plus=1}, {"8+2*5", plus=1}  "4" --: {"4", null=0}, {"1+3*2", plus=1}, {"8+2*5", plus=1}  "-" --: {"1+3*2-4", minus=1}, {"8+2*5", plus=1}  "/" //    ,      --: {"(8+2*5)/(1+3*2-4)", devide=2} : (8+2*5)/(1+3*2-4) 

Source: https://habr.com/ru/post/In147104/


All Articles