Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- function kiertekel()
- {
- local kifejezes="$@" eredeti ertek
- while [[ "$kifejezes" =~ \(([^()]+)\) ]]; do
- eredeti="${BASH_REMATCH[0]}"
- ertek="$( kiertekel "${BASH_REMATCH[1]}" )"
- kifejezes="${kifejezes/$eredeti/$ertek}"
- done
- while [[ "$kifejezes" =~ ([[:digit:]]+)[[:space:]]*([\\^])[[:space:]]*([[:digit:]]+) ]]; do
- case "${BASH_REMATCH[2]}" in
- '^') (( ertek = ${BASH_REMATCH[1]} ** ${BASH_REMATCH[3]} )) ;;
- esac
- kifejezes="${kifejezes/${BASH_REMATCH[0]}/$ertek}"
- done
- while [[ "$kifejezes" =~ ([[:digit:]]+)[[:space:]]*([*/%])[[:space:]]*([[:digit:]]+) ]]; do
- case "${BASH_REMATCH[2]}" in
- '*') (( ertek = ${BASH_REMATCH[1]} * ${BASH_REMATCH[3]} )) ;;
- '/') (( ertek = ${BASH_REMATCH[1]} / ${BASH_REMATCH[3]} )) ;;
- '%') (( ertek = ${BASH_REMATCH[1]} % ${BASH_REMATCH[3]} )) ;;
- esac
- kifejezes="${kifejezes/${BASH_REMATCH[0]}/$ertek}"
- done
- while [[ "$kifejezes" =~ ([[:digit:]]+)[[:space:]]*([+-])[[:space:]]*([[:digit:]]+) ]]; do
- case "${BASH_REMATCH[2]}" in
- '+') (( ertek = ${BASH_REMATCH[1]} + ${BASH_REMATCH[3]} )) ;;
- '-') (( ertek = ${BASH_REMATCH[1]} - ${BASH_REMATCH[3]} )) ;;
- esac
- kifejezes="${kifejezes/${BASH_REMATCH[0]}/$ertek}"
- done
- echo "${kifejezes// }"
- }
- declare -A teszt=(
- ['1+2']='3'
- ['1+2+3+4+5']='15'
- ['2^3+3^2']='17'
- ['1+2*3^4']='163'
- ['(1+2)+((3+4+5)+6)+((7)+(8+9))']='45'
- ['((1+2)*3)^4']='6561'
- ['1001/7/11']='13'
- ['2022%31']='7'
- ['H + 1 + 13 + A']='H+14+A'
- )
- printf '%-50s | %-10s | %-10s | %-10s\n' 'Bemeno' 'Kimeno' 'Eredmeny' 'Siker'
- for bemeno in "${!teszt[@]}"; do
- kimeno="${teszt[$bemeno]}"
- eredmeny="$( kiertekel "$bemeno" )"
- printf '%-50s | %-10s | %-10s | %-10s\n' "$bemeno" "$kimeno" "$eredmeny" "$( [[ "$eredmeny" == "$kimeno" ]] && echo 'Ok' || echo 'HIBA' )"
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement