visoft

expr_postfix

Dec 20th, 2019
196
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * 52+   -> 7
  3.  *
  4.  * (2+3)*(5+3) == 23+53+*   == 40
  5.  *
  6.  * 234 4435 +
  7.  *  */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. typedef struct{
  14.     int valoare_expr;
  15.     int caractere_mancate;
  16. } Ret_val;
  17.  
  18.  
  19. Ret_val recursiv(char*expr, int lim_stg, int lim_dr){
  20.     char operator;
  21.     Ret_val r;
  22.     r.caractere_mancate = -1;
  23.     if (lim_stg > lim_dr)
  24.         return r;
  25.     operator = expr[lim_dr];
  26.     if (('0' <= operator) && (operator  <= '9')){
  27.         r.valoare_expr = operator - '0';
  28.         r.caractere_mancate = 1;
  29.     }
  30.     if ((operator == '+') || (operator == '*')){
  31.         Ret_val rezultat_dr, rezultat_stg;
  32.  
  33.         rezultat_dr = recursiv(expr, lim_stg, lim_dr - 1);
  34.         if(rezultat_dr.caractere_mancate == -1)
  35.             return r;
  36.         rezultat_stg = recursiv(expr, lim_stg,
  37.                 lim_dr - 1 - rezultat_dr.caractere_mancate);
  38.         if(rezultat_stg.caractere_mancate == -1)
  39.             return r;
  40.  
  41.         int val_num, nr_caract;
  42.         if (operator == '+')
  43.             val_num = rezultat_stg.valoare_expr + rezultat_dr.valoare_expr;
  44.         if (operator == '*')
  45.             val_num = rezultat_stg.valoare_expr * rezultat_dr.valoare_expr;
  46.         nr_caract = 1 + rezultat_dr.caractere_mancate
  47.                 + rezultat_stg.caractere_mancate;
  48.         r.caractere_mancate = nr_caract;
  49.         r.valoare_expr = val_num;
  50.     }
  51.     if (r.caractere_mancate == -1){
  52.         printf("Erorare, operator/operand necunoscut");
  53.     }
  54.     return r;
  55. }
  56.  
  57. int main(void) {
  58.  
  59.     char * expr = "44+";
  60. //  char * expr = "52+43++";
  61.  
  62.     Ret_val r = recursiv(expr, 0, strlen(expr) - 1);
  63.     printf("valoare %d caracter mancate %d",
  64.             r.valoare_expr, r.caractere_mancate);
  65.  
  66.     return EXIT_SUCCESS;
  67. }
RAW Paste Data