Mudanças entre as edições de "Programação para Redes de Computadores (técnico) (diário 2012-1)"
Ir para navegação
Ir para pesquisar
(→26/03) |
|||
Linha 428: | Linha 428: | ||
=Projeto da disciplina= | =Projeto da disciplina= | ||
+ | Neste semestre será desenvolvido um instalador assistente de servidor baseado em Debian/Ubuntu. Serão utilizados os seguintes arquivos: | ||
+ | * <tt>/etc/assistente.conf</tt>: definição das variáveis. De livre modificação. | ||
+ | * <tt>/usr/local/sbin/assitente</tt>: ''script''. Imutável. | ||
+ | Para descarregar os arquivos: | ||
+ | <syntaxhighlight lang=bash> | ||
+ | wget -P /etc http://tele.sj.ifsc.edu.br/prc2012/assistente.conf | ||
+ | wget -P /usr/local/sbin http://tele.sj.ifsc.edu.br/prc2012/assistente | ||
+ | </syntaxhighlight> | ||
+ | |||
=Projeto Integrador= | =Projeto Integrador= | ||
Edição das 22h18min de 2 de abril de 2012
Sobre a disciplina
- Horários de atendimento: segundas-feiras das 17:30 às 18:30 e sextas-feiras das 11:30 às 12:30.
Lógica de Programação
27/02
- Apresentação da disciplina.
- Linguagem de programação estruturada: instruções, operadores, tipos, alteração do fluxo do código em tempo de execução.
- Apresentação do ambiente e linguagem Portugol.
- Primeiro problema em Portugol: dados dois números, verificar se um é múltiplo do outro.
// Início do programa. inicio // Pedir o primeiro número. escrever "Por favor, digite um número natural: " inteiro primeiroNumero ler primeiroNumero // Pedir o segundo número. escrever "E agora, digite um segundo número natural: " inteiro segundoNumero ler segundoNumero // Calcule se o primeiro é múltiplo do segundo. inteiro resto resto <- primeiroNumero % segundoNumero // Se for, mostre na tela. se resto = 0 então escrever "O primeiro é múltiplo do segundo." fimse // Senão, calcule se o segundo é múltiplo do primeiro. inteiro resto2 resto2 <- segundoNumero % primeiroNumero // Se for, mostre na tela. se resto2 = 0 então escrever "O segundo é múltiplo do primeiro." fimse se resto =/= 0 e resto2 =/= 0 então escrever "Não há múltiplos." fimse // Fim do programa. fim
- Segundo problema: um conversor decimal-binário para números até 255.
05/03
Conversor de decimal para binário utilizando apenas estruturas de decisão:
inicio escrever "Por favor , digite um número entre 0 e 255: " inteiro numero ler numero inteiro resto resto <- numero - 128 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 64 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 32 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 16 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 8 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 4 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 2 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse resto <- numero - 1 se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse fim
Conversor de decimal para binário utilizando estrutura de repetição:
inicio inteiro numero inteiro resto inteiro expoente escrever "Por favor , digite um número entre 0 e 255: " ler numero expoente <- 7 repete resto <- numero - ( 2 ^ expoente ) se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse expoente <- expoente - 1 ate expoente < 0 fim
Conversor de decimal para binário utilizando estrutura de repetição e validação da entrada:
inicio inteiro numero inteiro resto inteiro expoente escrever "Por favor , digite um número entre 0 e 255: " ler numero enquanto (numero < 0) ou (numero > 255) faz ler numero fimenquanto expoente <- 7 repete resto <- numero - ( 2 ^ expoente ) se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse expoente <- expoente - 1 ate expoente < 0 fim
Conversor de decimal para binário com quaisquer casas binárias e divisão em bytes:
inicio inteiro numero inteiro resto inteiro expoente escrever "Por favor , digite um número inteiro: " ler numero enquanto numero < 0 faz escrever "Número inválido! Um número inteiro: " ler numero fimenquanto expoente <- 0 enquanto numero >= ( 2 ^ ( expoente + 1 ) ) faz expoente <- expoente + 1 fimenquanto repete resto <- numero - ( 2 ^ expoente ) se resto >= 0 entao escrever "1" numero <- resto senao escrever "0" fimse se expoente > 0 entao resto <- expoente % 8 se resto = 0 entao escrever "." fimse fimse expoente <- expoente - 1 ate expoente < 0 fim
Linguagens de Programação
Shell Script
12/03
O mesmo problema de verificação de múltiplos:
#!/bin/bash
# Pedir o primeiro número.
clear
echo -n "Por favor, informe o 1o. número: "
read numero1
# Pedir o segundo número.
echo -n "Agora, digite o 2o. número: "
read numero2
# Calcule se o primeiro é múltiplo do segundo.
resto=$(expr ${numero1} % ${numero2})
# Se for, mostre na tela.
if [ "${resto}" = "0" ]
then
echo "${numero1} é multiplo de ${numero2}."
else
echo "${numero1} não é multiplo de ${numero2}."
fi
# Senão, calcule se o segundo é múltiplo do primeiro.
resto=$(expr ${numero2} % ${numero1})
# Se for, mostre na tela.
if [ "${resto}" = "0" ]
then
echo "${numero2} é multiplo de ${numero1}."
else
echo "${numero2} não é multiplo de ${numero1}."
fi
Agora com passagem direta dos parâmetros na linha de comando:
#!/bin/bash
if [ "${2}" = "" ]
then
echo "Informe pelo menos dois parâmetros."
echo "Use: ${0} (número) (número)"
exit
fi
numero1=${1}
numero2=${2}
# Calcule se o primeiro é múltiplo do segundo.
resto=$(expr ${numero1} % ${numero2})
# Se for, mostre na tela.
if [ "${resto}" = "0" ]
then
echo "${numero1} é multiplo de ${numero2}."
else
echo "${numero1} não é multiplo de ${numero2}."
fi
# Senão, calcule se o segundo é múltiplo do primeiro.
resto=$(expr ${numero2} % ${numero1})
# Se for, mostre na tela.
if [ "${resto}" = "0" ]
then
echo "${numero2} é multiplo de ${numero1}."
else
echo "${numero2} não é multiplo de ${numero1}."
fi
O mesmo problema de conversão:
#!/bin/bash
# Testa se o usuário digitou um parâmetro
if [ "${1}" = "" ]
then
# O parâmetro ${0} é o próprio comando
echo "Use: ${0} (número)"
exit
fi
numero=${1}
# Testa se o parâmetro é um número
soma=$(echo "${numero} + 1" | bc)
# Se a soma for zero (o parâmetro é inválido)
# E
# o parâmetro é diferente de zero (para afetar a soma)
if [ "${soma}" = "1" -a "${numero}" != "0" ]
then
echo "O parâmetro informado não é número. Tente novamente."
exit
fi
expoente="0"
while [ "${numero}" -ge "$(echo "2 ^ (${expoente} + 1)" | bc)" ]
do
expoente=$(echo "${expoente} + 1" | bc)
done
while [ ${expoente} -ge 0 ]
do
resto=$(echo "${numero} - 2 ^ ${expoente}" | bc)
# se resto >= 0 entao
if [ "${resto}" -ge "0" ]
then
# escrever "1"
echo -n "1"
# numero <- resto
numero=${resto}
# senao
else
# escrever "0"
echo -n "0"
# fimse
fi
# se expoente > 0 entao
if [ "${expoente}" -gt "0" ]
then
# resto <- expoente % 8
resto=$(echo "${expoente} % 8" | bc)
# se resto = 0 entao
if [ "${resto}" = "0" ]
then
# escrever "."
echo -n "."
# fimse
fi
# fimse
fi
# expoente <- expoente - 1
expoente=$(echo "${expoente} - 1" | bc)
done
echo ""
26/03
#!/bin/bash
# Declaração de função: verifica se um byte é válido (>=0 e <=255)
byteValido(){
if [ "${1}" -ge "0" -a "${1}" -le "255" ]
then
echo "sim"
else
echo "não"
fi
}
# Declaração de função: verifica IP
verificaIP(){
primeiroOcteto=$(echo ${1} | cut -d . -f 1)
segundoOcteto=$( echo ${1} | cut -d . -f 2)
terceiroOcteto=$(echo ${1} | cut -d . -f 3)
quartoOcteto=$( echo ${1} | cut -d . -f 4)
resposta=$(byteValido ${primeiroOcteto})
if [ "${resposta}" = "sim" ]
then
resposta=$(byteValido ${segundoOcteto})
if [ "${resposta}" = "sim" ]
then
resposta=$(byteValido ${terceiroOcteto})
if [ "${resposta}" = "sim" ]
then
resposta=$(byteValido ${quartoOcteto})
if [ "${resposta}" = "sim" ]
then
echo "sim"
else
echo "não"
fi
else
echo "não"
fi
else
echo "não"
fi
else
echo "não"
exit
fi
}
# Verifica se o usuário digitou pelo menos dois parâmetros
if [ "${1}" = "" -o "${2}" = "" ]
then
# O usuário não digitou corretamente
echo "Use: ${0} (IP) (máscara)"
exit
fi
resposta=$(verificaIP ${1})
if [ "${resposta}" = "sim" ]
then
resposta=$(verificaIP ${2})
if [ "${resposta}" = "sim" ]
then
echo "Parâmetros dentro dos limites."
else
echo "Máscara de rede inválida. Tente novamente."
exit
fi
else
echo "Endereço IP inválido. Tente novamente."
exit
fi
# A partir de agora, informar os comandos com:
# - Endereço de 'broadcast';
# - Endereço de rota-padrão
echo ""
echo "O comando para configurar IP, máscara de rede e 'broadcast' é:"
broadcast=$(echo ${1} | cut -d . -f 1,2,3)".255"
echo "ifconfig eth0 ${1} netmask ${2} broadcast ${broadcast}"
echo ""
echo "E o comando para configurar rota padrão:"
roteador=$(echo ${1} | cut -d . -f 1,2,3)".254"
echo "route add default gw ${roteador}"
# Depois, o arquivo de configuração
echo ""
echo "O arquivo de configuração da interface fica assim:"
echo "auto eth0"
echo "iface eth0 inet static"
echo " address ${1}"
echo " netmask ${2}"
echo " broadcast ${broadcast}"
echo " gateway ${roteador}"
Projeto da disciplina
Neste semestre será desenvolvido um instalador assistente de servidor baseado em Debian/Ubuntu. Serão utilizados os seguintes arquivos:
- /etc/assistente.conf: definição das variáveis. De livre modificação.
- /usr/local/sbin/assitente: script. Imutável.
Para descarregar os arquivos:
wget -P /etc http://tele.sj.ifsc.edu.br/prc2012/assistente.conf
wget -P /usr/local/sbin http://tele.sj.ifsc.edu.br/prc2012/assistente
Projeto Integrador
Referências
- Popularidade das linguages de programação: http://www.langpop.com
- Material introdutório e avançado sobre shell script: http://www.aurelio.net/shell/
- Jogos de lógica