Programação para Redes de Computadores (técnico) (diário 2012-2) - prova 3

De MediaWiki do Campus São José
Ir para: navegação, pesquisa
  1. 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).
    1. 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).
  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).
    1. 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

Voltar para diário de bordo de 2012-2