Advertisement
VF-

Untitled

VF-
Nov 23rd, 2022 (edited)
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.98 KB | Source Code | 0 0
  1. #!/bin/bash
  2.  
  3. function kiertekel()
  4. {
  5.     local kifejezes="$@" eredeti ertek
  6.  
  7.     while [[ "$kifejezes" =~ \(([^()]+)\) ]]; do
  8.         eredeti="${BASH_REMATCH[0]}"
  9.         ertek="$( kiertekel "${BASH_REMATCH[1]}" )"
  10.         kifejezes="${kifejezes/$eredeti/$ertek}"
  11.     done
  12.  
  13.     while [[ "$kifejezes" =~ ([[:digit:]]+)[[:space:]]*([\\^])[[:space:]]*([[:digit:]]+) ]]; do
  14.         case "${BASH_REMATCH[2]}" in
  15.             '^') (( ertek = ${BASH_REMATCH[1]} ** ${BASH_REMATCH[3]} )) ;;
  16.         esac
  17.         kifejezes="${kifejezes/${BASH_REMATCH[0]}/$ertek}"
  18.     done
  19.  
  20.     while [[ "$kifejezes" =~ ([[:digit:]]+)[[:space:]]*([*/%])[[:space:]]*([[:digit:]]+) ]]; do
  21.         case "${BASH_REMATCH[2]}" in
  22.             '*') (( ertek = ${BASH_REMATCH[1]} * ${BASH_REMATCH[3]} )) ;;
  23.             '/') (( ertek = ${BASH_REMATCH[1]} / ${BASH_REMATCH[3]} )) ;;
  24.             '%') (( ertek = ${BASH_REMATCH[1]} % ${BASH_REMATCH[3]} )) ;;
  25.         esac
  26.         kifejezes="${kifejezes/${BASH_REMATCH[0]}/$ertek}"
  27.     done
  28.  
  29.     while [[ "$kifejezes" =~ ([[:digit:]]+)[[:space:]]*([+-])[[:space:]]*([[:digit:]]+) ]]; do
  30.         case "${BASH_REMATCH[2]}" in
  31.             '+') (( ertek = ${BASH_REMATCH[1]} + ${BASH_REMATCH[3]} )) ;;
  32.             '-') (( ertek = ${BASH_REMATCH[1]} - ${BASH_REMATCH[3]} )) ;;
  33.         esac
  34.         kifejezes="${kifejezes/${BASH_REMATCH[0]}/$ertek}"
  35.     done
  36.  
  37.     echo "${kifejezes// }"
  38. }
  39.  
  40. declare -A teszt=(
  41.     ['1+2']='3'
  42.     ['1+2+3+4+5']='15'
  43.     ['2^3+3^2']='17'
  44.     ['1+2*3^4']='163'
  45.     ['(1+2)+((3+4+5)+6)+((7)+(8+9))']='45'
  46.     ['((1+2)*3)^4']='6561'
  47.     ['1001/7/11']='13'
  48.     ['2022%31']='7'
  49.     ['H + 1 + 13 + A']='H+14+A'
  50. )
  51.  
  52. printf '%-50s | %-10s | %-10s | %-10s\n' 'Bemeno' 'Kimeno' 'Eredmeny' 'Siker'
  53. for bemeno in "${!teszt[@]}"; do
  54.     kimeno="${teszt[$bemeno]}"
  55.     eredmeny="$( kiertekel "$bemeno" )"
  56.     printf '%-50s | %-10s | %-10s | %-10s\n' "$bemeno" "$kimeno" "$eredmeny" "$( [[ "$eredmeny" == "$kimeno" ]] && echo 'Ok' || echo 'HIBA' )"
  57. done
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement