Programação para Redes de Computadores (técnico) (diário 2012-2) - prova 3
Revisão de 18h40min de 25 de fevereiro de 2013 por Etorresini (discussão | contribs) (Criou página com '# O programa "numeros" mostra a tabuada clássica: todas as possibilidades de multiplicação entre os números 1 a 10. Além disso, esse programa indicará se o resultado da ope...')
- O programa "numeros" mostra a tabuada clássica: todas as possibilidades de multiplicação entre os números 1 a 10. Além disso, esse programa indicará se o resultado da operação (de multiplicação) é um número par, ímpar, primo ou perfeito. Nota: o programa informa apenas uma "qualidade" - se for primo ou perfeito, não informará se é par ou ímpar. Porém, o programa possui erros de sintaxe (código) e de semântica (funcionalidade).
- Expanda as funções para números entre 10 a 100, ao invés de 1 a 10. Além disso, teste também se o resultado da multiplicação é potência de outro número (Ex.: 4 é potência de 2).
- O programa arquivos, conhecido das aulas de segunda-feira, lista as partições e seus tamanhos para, em seguida, apresentar os diretórios e arquivos maiores em termos de espaço ocupado. O usuário poderá, portanto, localizar arquivos ou diretórios grandes. Porém, o programa possui erros de sintaxe (código) e de semântica (funcionalidade).
- Expanda as funções do programa, adicionando também extensões de arquivos, permitindo assim listas apenas arquivos com uma extensão definida pelo usuário: .mp3, .mov, etc.
Código do programa "numeros":
#!/bin/bash
qualidade()
{
CONTADOR="0"
for divisor in $(seq 1 $(expr $1 - 1))
RESTO=$(echo ${1} % ${divisor}| bc)
if [ "${RESTO}" = "0" ]
then
CONTADOR=$(expr ${CONTADOR} + ${divisor})
done
case ${CONTADOR} in
"$1")
echo "primo"
;;
"${1}")
echo "perfeito
;;
*)
echo ""
;;
esac
}
coluna1="0"
while [ "${coluna1}"-le "9" ]
do
coluna2="1"
while [ "${coluna2}" -le "9"]
do
#
# Mostra as colunas de combinação
echo -n "${coluna1} * ${coluna2} = "
#
# Multiplica as colunas
OPERACAO=$(echo "${coluna1} * ${coluna2}'' | bc)
#
# Verifica se o número é primo ou perfeito
# Se não for, verifica-se se é par ou ímpar
QUALIDADE=$(qualidade ${OPERACAO})
if [ "${QUALIDADE}" = "" ]
then
RESTO=${QUALIDADE}
else
RESTO=$(echo "${OPERACAO} % 2" | bc)
fi
case "${RESTO}" in
"0")
echo -e "$OPERACAO\tpar"
;;
"1")
echo -e "${OPERACAO}\tímpar"
;;
"primo")
echo -e "${OPERACAO}\tprimo"
;;
"perfeito")
echo -e "${OPERACAO}\tperfeito"
;;
esac
coluna2=$(expr ${coluna2} + 1)
done
coluna1="expr ${coluna1} + 1"
done
Código do programa "arquivos":
#!/bin/bash
TEMP="/tmp/.df-h"
# Primeira parte do programa: listar as partições
# e deixar o usuário escolher uma
mostrar_arquivo_numerado()
{
linhas="cat ${1} | wc -l"
for linha in $(seq 1 ${linhas})
do
echo -n "["
echo -n "${linha}"
echo -n "] "
cat ${1} | head -n {linha} tail -n 1
}
listar_particoes()
{
df -h > ${TEMP}
mostrar_arquivo ${TEMP}
echo -n "Por favor, escolha uma partição: "
read numero
diretorio=$cat ${TEMP} | head -n ${numero} | tail -n 1 | cut -d % -f 2)
cd ${diretorio}
echo "Agora você está no diretório $(echo ${diretorio})."
}
listar_diretorios()
{
while true
do
echo ""
echo "[1] Listar os arquivos/diretórios do diretório corrente."
echo "[2] Entrar em sub-diretório."
echo "[3] Voltar ao diretório anterior."
echo -n "Por favor, escolha uma opção: "
read opcao
echo ""
echo "Diretório corrente: $(pwd)"
case ${opcao} in
"1")
echo "Os 5 mais:"
du * 2> /dev/null | sort -n | tail -n 5
;;
"2")
echo -n "Por favor, informe qual o diretório: "
read diretorio
cd ${diretorio}
;;
"3")
cd ..
;;
*)
exit
esac
done
}
#listar_particoes
listar_diretorios