Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Pequeno script para calcular a nota de vários somatórios utilizando parciais. A equação utilizada será a da UFSC:
- # NPC - NTPC - NPI
- # P = 1 + ------------------
- # NP
- # Onde:
- # P - Pontuação Final.
- # NP - Número de Preposições Total.
- # NTPC - Número de Preposições Corretas na Questão.
- # NPC - Número de Preposições Corretas Marcadas (Acertos).
- # NPI - Número de Preposições Incorretas Marcadas (Erros).
- # To do: Corrigir as POGs/Optimizar.
- # Adicionar "breakpoints" para separar as diferentes partes (matérias).
- # Comentar o código p/ futuras modificações.
- # Deve-se completar as três sequências a seguir com os dados:
- arrmarcadas=( 09 11 18 44 05 33 04 11 01 19 28 22 11 21 06 50 25 60 06 05 55 20 24 63 10 02 04 01 08 60 28 18 49 85 73 23 26 12 24 28 ) # GABARITO MARCADO, SEPARADO POR ESPAÇOS E EM ORDEM CRESCENTE DE QUESTÃO
- arrgabarito=( 43 11 15 40 12 55 15 43 17 23 28 21 11 12 22 51 57 18 06 07 39 20 24 63 10 18 05 01 08 60 28 03 48 85 77 38 24 44 24 29 ) # GABARITO CORRETO, SEPARADO POR ESPAÇOS E EM ORDEM CRESCENTE DE QUESTÃO
- arrpreposic=( 7 6 5 6 6 6 5 6 5 5 5 5 5 5 6 6 6 6 6 6 6 5 5 6 ABERTA 5 5 ABERTA 5 ABERTA 7 7 7 7 7 6 6 6 5 6 ) # QUANTIDADE DE PREPOSIÇÕES POR QUESTÃO, SEPARADO POR ESPAÇOS E EM ORDEM CRESCENTE DE QUESTÃO
- echo "Numero da Questao - Gabarito Marcado / Gabarito Correto / Numero de Preposicoes ou Tipo"
- for ((i=0; i<${#arrgabarito[@]}; i++)); do printf %02d $(echo -n "$(( $i + 1 ))"); echo "- ${arrmarcadas[${i}]} / ${arrgabarito[${i}]} / ${arrpreposic[${i}]}"; done
- echo
- function bintodec {
- binary=$(echo $1 | rev)
- finnumb=()
- for ((i=0; i<${#binary}; i++)); do
- if [ $(eval echo ${binary:${i}:1}) -eq 1 ]; then
- prepnumb=$(echo "2^$i" | bc)
- finnumb=$(echo $finnumb $prepnumb)
- fi
- done
- echo $finnumb; }
- function getstats {
- if [ $# != 3 ]; then exit 1; fi
- if ! [ "$1" -eq "$1" ] 2>/dev/null; then exit 4; fi
- if ! [ "$2" -eq "$2" ] 2>/dev/null; then exit 5; fi
- numNPC=0; numNPI=0; numNTPC=0; preptype=${3}; numP=0; pontfinal=0; pifinal=0; pcfinal=0; tcfinal=0; ifinal=0; ntcfinal=0
- if [ $preptype == ABERTA ]; then #POG maldita
- valA=$(echo "obase=2; ${1}" | bc)
- valB=$(echo "obase=2; ${2}" | bc)
- if [ ${#valA} -gt ${#valB} ]; then
- numNP=$(echo ${#valA})
- else
- numNP=$(echo ${#valB})
- fi
- else
- numNP=$3
- fi
- eval 'binA=$(printf %0'${numNP}'d '$(echo "obase=2;$1" | bc)')'
- eval 'binB=$(printf %0'${numNP}'d '$(echo "obase=2;$2" | bc)')'
- if [ ${#binA} != ${#binB} ]; then exit 2; fi
- if [ ${#binA} != ${numNP} ]; then exit 3; fi
- for ((i=0; i<$(( ${#binB} )); i++)); do
- prepA=$(eval echo ${binA:${i}:1})
- prepB=$(eval echo ${binB:${i}:1})
- if [ $prepB = 1 ]; then
- numNTPC=$(( $numNTPC + 1 ))
- if [ $prepA = 1 ]; then
- numNPC=$(( $numNPC + 1 ))
- fi; fi
- if [ $prepB = 0 ] && [ $prepA = 1 ]; then
- numNPI=$(( $numNPI + 1 ))
- fi
- done
- if [ $preptype != ABERTA ]; then
- if [ $numNPC -gt $numNPI ]; then
- numP=$(echo -n "$(( ${numNP} + ${numNPC} - ${numNTPC} - ${numNPI} ))/${numNP}")
- else
- numP=0
- fi
- else
- if [ $numNPC = $numNTPC ]; then
- numP=1
- else
- numP=0
- fi; fi
- echo $numP $numNTPC $numNPC $numNPI $binA $binB ;}
- arrpont=(); pontfinal=0; pcfinal=0; pifinal=0; qntyprep=0; pnmfinal=0; gabval=0; marcval=0
- if [ ${#arrgabarito[@]} -ne ${#arrmarcadas[@]} ] || [ ${#arrgabarito[@]} -ne ${#arrpreposic[@]} ]; then echo "ERRO 1: TAMANHO DE ARRAYS DIFERENTES. CHECAR CONCOMITANCIA ENTRE ARRAYS."; exit 1; fi
- for ((i=0; i<=$(( ${#arrgabarito[@]} - 1 )); i++)); do
- echo "QUESTAO $(( $i + 1 )): "
- statsarr=( $(getstats ${arrmarcadas[${i}]} ${arrgabarito[${i}]} ${arrpreposic[${i}]}) )
- case $? in
- 1) echo "ERRO 2: QUANTIDADE DE ARGUMENTOS INCORRETA. CHECAR CONCOMITANCIA ENTRE ARRAYS."; exit 1 ;;
- 2) echo "ERRO 3: TAMANHO DO BINARIO INCORRETO. QUANTIDADE DE PREPOSICOES INVALIDAS. CHECAR ARRAY ARRPREPOSIC."; exit 1 ;;
- 3) echo "ERRO 4: TAMANHO DO BINARIO INCORRETO. QUANTIDADE DE PREPOSICOES INVALIDAS. CHECAR ARRAY ARRPREPOSIC."; exit 1 ;;
- 4) echo "ERRO 5: ARGUMENTO NAO NUMERICO. GABARITO INVALIDO. CHECAR ARRAY ARRMARCADAS."; exit 1 ;;
- 5) echo "ERRO 6: ARGUMENTO NAO NUMERICO. GABARITO INVALIDO. CHECAR ARRAY ARRGABARITO."; exit 1 ;;
- esac
- pontp=${statsarr[0]}
- prepcortot=${statsarr[1]}
- prepcor=${statsarr[2]}
- prepinc=${statsarr[3]}
- binmarc=${statsarr[4]}
- bingab=${statsarr[5]}
- if [ $(echo "$pontp" | bc) == 1 ]; then pontp=1; tcfinal=$(( $tcfinal + 1 )); fi
- if [ "$pontp" == 0 ]; then tifinal=$(( $tifinal + 1 )); fi
- if [ "$pontp" != 0 ] && [ $(echo "$pontp" | bc) != 1 ]; then ntcfinal=$(( $ntcfinal + 1 )); fi
- pontfinal=$(echo "scale=5;${pontp}+${pontfinal}" | bc)
- if [ ${arrpreposic[${i}]} != ABERTA ]; then
- pcfinal=$(echo "scale=5;${prepcor}+${pcfinal}" | bc)
- pifinal=$(echo "scale=5;${prepinc}+${pifinal}" | bc)
- pnmfinal=$(( ( $prepcortot - $prepcor ) + $pnmfinal ))
- fi
- pontoquest=$(echo "scale=4;$pontp" | bc)
- if [ ${arrpreposic[${i}]} == ABERTA ]; then
- gabval=${arrgabarito[${i}]}
- else
- gabval=$(bintodec ${bingab})
- fi
- if [ ${arrpreposic[${i}]} == ABERTA ]; then
- marcval=${arrmarcadas[${i}]}
- else
- marcval=$(bintodec ${binmarc})
- fi
- echo "Quantidade de Preposicoes Totais / Tipo: ${arrpreposic[${i}]}"
- echo "Quantidade de Preposicoes Corretas Totais: $( if [ ${arrpreposic[${i}]} == ABERTA ]; then echo "--"; else echo "$prepcortot"; fi; )"
- echo "Preposicoes/Valor Marcado (s): $marcval"
- echo "Gabarito: ${gabval}"
- echo "Marcadas e Corretas: $( if [ ${arrpreposic[${i}]} == ABERTA ]; then echo "--"; else echo "$prepcor"; fi; )"
- echo "Marcadas mas Incorretas: $( if [ ${arrpreposic[${i}]} == ABERTA ]; then echo "--"; else echo "$prepinc"; fi; )"
- echo "Nao Marcadas mas Corretas: $( if [ ${arrpreposic[${i}]} == ABERTA ]; then echo "--"; else echo "$(( $prepcortot - $prepcor ))"; fi; )"
- echo "PONTUACAO: $pontoquest"
- echo
- done
- for ((i=0; i<${#arrpreposic[@]}; i++)); do
- qntyprep=$(( ${qntyprep} + ${arrpreposic[$i]} ))
- done
- if [[ ${tifinal} == "" ]]; then tifinal=0; fi
- if [[ ${ntcfinal} == "" ]]; then ntcfinal=0; fi
- if [[ ${tcfinal} == "" ]]; then tcfinal=0; fi
- prefix="@h@----- "
- echo "${prefix}PONTUACAO FINAL: $pontfinal / ${#arrgabarito[@]}"
- echo "${prefix}QUANTIDADE DE ACERTOS COMPLETOS: $tcfinal"
- echo "${prefix}QUANTIDADE DE ACERTOS PARCIAIS: $ntcfinal"
- echo "${prefix}QUANTIDADE DE TOTALMENTE INCORRETAS: $tifinal"
- echo "${prefix}QUANTIDADE DE PREPOSICOES CORRETAS E MARCADAS (CERTAS): $pcfinal"
- echo "${prefix}QUANTIDADE DE PREPOSICOES INCORRETAS E MARCADAS (ERRADAS): $pifinal"
- echo "${prefix}QUANTIDADE DE PREPOSICOES CORRETAS NAO MARCADAS: $pnmfinal"
- echo "${prefix}QUANTIDADE DE PREPOSICOES TOTAL: $qntyprep"
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement