Convertendo uma instrução if-else em uma instrução switch [closed]

2

Estou tendo problemas para transformar este programa de uma instrução if-else em uma instrução switch. Qualquer ajuda seria apreciada.

#!/bin/bash

for x in $@
do
 array[$i]=$x
 i=$((i+1))
done


# initial state
state=S0

for((i=0;i<${#array[@]};i++))
do

if [ $state == S0 ] 
  then
   if [ ${array[$i]} == I0 ]
   then
     state=S1
     output[$i]=O1
   elif [ ${array[$i]} ==  I1 ]
   then
     state=S0
     output[$i]=O0
   fi

elif [ $state == S1 ]
  then
  if [ ${array[$i]} == I0 ]
   then
    state=S1
    output[$i]=O1
  elif [ ${array[$i]} == I1 ]
   then
    state=S0
    output[$i]=O0
  fi

fi

done
echo "final state="$state
echo "output="${output[@]}
    
por goldilocks 04.05.2014 / 13:16

2 respostas

1

Estou curioso, o que este script está fazendo?

#!/bin/bash

for x in $@
do
  array[$i]=$x
  i=$((i+1))
done


# initial state
state=S0


for((i=0;i<${#array[@]};i++))
do

    case $state in
        "S0")
            if [ ${array[$i]} == I0 ]
            then
                state=S1
                output[$i]=O1
            elif [ ${array[$i]} ==  I1 ]
            then
                state=S0
                output[$i]=O0
            fi
            ;;

        "S1")
            if [ ${array[$i]} == I0 ]
            then
                state=S1
                output[$i]=O1
            elif [ ${array[$i]} == I1 ]
            then
                state=S0
                output[$i]=O0
            fi
            ;;
    esac
done
echo "final state="$state
echo "output="${output[@]}
    
por 04.05.2014 / 13:25
1

Corresponde ao par state.input no caso:

#!/bin/bash

for x in $@
do
     array[$i]=$x
     ((i=i+1))
done

# initial state
state=S0

for((i=0;i<${#array[@]};i++))
do
    case $state.$array[$i] in 
    S0.I0) 
         state=S1
         output[$i]=O1 ;;
    S0.I1)
         state=S0
         output[$i]=O0 ;;
    S1.I0)
        state=S1
        output[$i]=O1  ;;
    S1.I1)
        state=S0
        output[$i]=O0  ;;
    esac 
done

echo "final state="$state
echo "output="${output[@]}
    
por 04.05.2014 / 14:31

Tags