Mudanças entre as edições de "Programação para Redes de Computadores (técnico) (diário 2013-1)"

De MediaWiki do Campus São José
Ir para: navegação, pesquisa
(06/05)
(06/05)
Linha 338: Linha 338:
 
echo "Propriedade e permissões dos arquivos e diretórios:"
 
echo "Propriedade e permissões dos arquivos e diretórios:"
 
ls -la /home/${grupo}
 
ls -la /home/${grupo}
 +
</syntaxhighlight>
 +
 +
==27/05==
 +
Em um passeio na Havan, eis que me deparo com essas formas de pagamento:
 +
<syntaxhighlight lang=bash>
 +
#!/bin/bash
 +
if [ "${2}" = "" ]
 +
then
 +
echo -n "Por favor, informe o valor do produto: "
 +
read valor
 +
echo -n "Agora, a quantidade de parcelas: "
 +
read parcelas
 +
else
 +
valor=${1}
 +
parcelas=${2}
 +
fi
 +
if [ "${parcelas}" = "1" ]
 +
then
 +
echo Valor final: $(echo "scale=2; ${valor} * 0.9"|bc)
 +
fi
 +
if [ "${parcelas}" -ge "2" -a "${parcelas}" -le "3" ]
 +
then
 +
echo Valores: 1 + $(echo "${parcelas} - 1"|bc) de $(echo "scale=2; ${valor}/${parcelas}"|bc)
 +
fi
 +
if [ "${parcelas}" -ge "4" -a "${parcelas}" -le "36" ]
 +
then
 +
somatorio="0"
 +
parcelaCorrente=$(echo "scale=2; ${valor} / ${parcelas}"|bc)
 +
for mes in $(seq 1 ${parcelas})
 +
do
 +
parcelaCorrente=$(echo "scale=2; ${parcelaCorrente} * 1.0215"|bc)
 +
somatorio=$(echo "scale=2; ${somatorio} + ${parcelaCorrente}"|bc)
 +
echo "[${mes}: ${parcelaCorrente} - ${somatorio}]"
 +
done
 +
echo Parcela média é $(echo "scale=2; ${somatorio} / ${parcelas}"|bc)
 +
fi
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
=Avaliação=
 
=Avaliação=
 
* [https://docs.google.com/spreadsheet/ccc?key=0AvKQkavuEKVtdDdPdVB4MlhNT0o1ME1uY2o2WnROSWc&usp=sharing Conceitos]
 
* [https://docs.google.com/spreadsheet/ccc?key=0AvKQkavuEKVtdDdPdVB4MlhNT0o1ME1uY2o2WnROSWc&usp=sharing Conceitos]

Edição das 21h47min de 27 de maio de 2013

Aulas

01/04

Problema: saber o valor final de parcelamento (1 +3) a 2% de juros.

inicio

// Problema: pagamento de uma geladeira, comprada a prazo em
// 1 + 3 x com juros de 2% ao mês.
escrever "Por favor, informe o valor da geladeira: "
real valorGeladeira
ler valorGeladeira

// 1) Saber quanto é o valor de entrada.
escrever "Agora, informe o valor da entrada: "
real entrada
ler entrada

// 2) Deduzir o valor de entrada do valor total, e depois dividir por 3. Isso 
//    dará o valor da parcela sem juro. Aplicar, no segundo mês, já o juro de 2%.
real parcela
parcela <- (((valorGeladeira - entrada) / 3) * 1.02)

// 3) No terceiro mês, aplicar o mesmo juro sobre o valor do mês anterior;
//    ou seja, juro composto.
real parcela2
parcela2 <- (parcela * 1.02)

// 4) Repetir o processo no quarto mês.
real parcela3
parcela3 <- (parcela2 * 1.02)

// 5) Somar tudo e ver o prejuízo.
real somatorio
somatorio <- entrada + parcela + parcela2 + parcela3
escrever "Ao final, a geladeira custou ", somatorio, "."

fim

08/04

E se todas as opções forem variáveis?

inicio

escrever "Por favor, informe o valor da geladeira: "
real valorGeladeira
ler valorGeladeira

escrever "Deseja pagar a entrada? S ou N"
texto pagarEntrada
ler pagarEntrada

real entrada
se (pagarEntrada = "N" ou pagarEntrada = "n") entao 
    entrada<-0
senao 
    escrever "Agora, informe o valor da entrada: "
    ler entrada
fimse 

escrever "Valor de juros: "
real valorJuros
ler valorJuros

escrever "Quantidade de parcelas: "
real qtdParcelas
ler qtdParcelas

real somatorio
real parcela
parcela <- (valorGeladeira - entrada) / qtdParcelas

inteiro mes
para mes de 1 ate qtdParcelas passo 1
    parcela <- parcela * (1 + valorJuros * 0.01)
    somatorio <- somatorio + parcela
proximo 

escrever "Ao final, a geladeira custou ", entrada + somatorio, "."
escrever "\nForam ", qtdParcelas, " parcelas de ", somatorio / qtdParcelas, " cada."

fim

15/04

Problema do dia: Dado um dia e mês neste ano de 2013, em que semana estamos?

inicio

inteiro dias
inteiro mês
inteiro semanas
inteiro resto
inteiro quociente

//Pedir ao usuário:
//- dia
//- mês
escrever "Informe o dia: "
ler dias
escrever "Agora, informe o mês (número): "
ler mês

//Dependendo do mês, deve-se somar à quantidade de dias, de acordo com o calendário juliano.
//Ao final, teremos a quantidade de dias no ano.
escolhe mês
    caso 1: // Janeiro
        dias <- dias
    caso 2: // Fevereiro
        dias <- dias + 31
    caso 3: // Março
        dias <- dias + 31 + 28
    caso 4: // Abril
        dias <- dias + 31 + 28 + 31
    caso 5: // Maio
        dias <- dias + 31 + 28 + 31 + 30
    caso 6: // Junho
        dias <- dias + 31 + 28 + 31 + 30 + 31
    caso 7: // Julho
        dias <- dias + 31 + 28 + 31 + 30 + 31 + 30
    caso 8: // Agosto
        dias <- dias + 31 + 28 + 31 + 30 + 31 + 30 + 31
    caso 9: // Setembro
        dias <- dias + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31
    caso 10: // Outubro
        dias <- dias + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30
    caso 11: // Novembro
        dias <- dias + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31
    caso 12: // Dezembro
        dias <- dias + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30
fimEscolhe        

//Como a primeira semana tem apenas 5 dias (começa na terça), se a soma estiver entre 1 e 5 então
// estamos ainda na primeira semana. Caso contrário, apenas subtraimos esse valor (5) da soma.
se dias >=1 e dias <= 5 então
    semanas <- 1
senão
    dias <- dias - 5
    //Com o valor que sobrou, faz-se uma divisão por 7. Se o resto for 0, o resultado é o próprio
    // quociente mais um (a primeira semana); caso contrário (o resto está entre 1 e 6), então
    // somamos: primeira semana (1) + quociente + 1 semana.
    resto <- dias % 7
    se resto = 0 então
        semanas <- (dias / 7) + 1
    senão
        semanas <- 1 + (dias / 7) + 1
    fimSe
fimSe

escrever "É a semana número ", semanas, "."

fim

22/04

O clássico problema: um número é primo quando...?

inicio

// Declaração de variáveis.
inteiro número
inteiro divisor
inteiro resto
inteiro divisores

// Interação com o usuário: número a ser testado como primo.
escrever "Por favor, digite um número inteiro entre 1 e 10000: "
ler número

// Como 1 e o próprio número sempre serão divisores, interessa saber se os valores
// intermediários conseguem dividir, com resto inteiro, o número solicitado.
divisor <- 2
divisores <- 0
enquanto divisor < número faz
    resto <- número % divisor
    se resto = 0 então
        escrever "[", divisor, "]"
        divisores <- divisores + divisor
    senão
        escrever "."
    fimSe
    divisor <- divisor + 1
fimEnquanto

se divisores = 0 então
    escrever "\nO número ", número, " é primo."
senão
    escrever "\nO número ", número, " NÃO é primo."
fimSe

fim

Ou mais características: se é primo, se é perfeito e sua soma cabalística (soma dos algarismos até resultar em um único dígito):

inicio

inteiro número
inteiro divisores
inteiro divisor
inteiro resto
inteiro centena
inteiro dezena
inteiro unidade
inteiro algarismos

para número de 1 até 999 passo 1
    escrever "[",número
    
    divisores <- 0
    divisor <- 1
    enquanto divisor <= (número / 2) faz
        resto <- número % divisor
        se resto = 0 então
            divisores <- divisores + divisor
        fimSe
        divisor <- divisor + 1
    fimEnquanto
    se divisores = 1 então
        escrever "p"
    senão
        escrever "."
    fimSe
    se divisores = número então
        escrever "P"
    senão
        escrever "."
    fimSe
    
    centena <- número / 100
    dezena <- (número % 100) / 10
    unidade <- número % 10
    algarismos <- centena + dezena + unidade
    se algarismos > 9 então
        dezena <- algarismos / 10
        unidade <- algarismos % 10
    fimSe
    se algarismos > 9 então
        dezena <- algarismos / 10
        unidade <- algarismos % 10
    fimSe
    algarismos <- dezena + unidade
    escrever algarismos,"]"

    escrever " - "
próximo

fim

29/04

  • Primeiro dia de shell script com bash. Primeiro código de exemplo: caixa decorativa:
#!/bin/bash

linha_de_hifens(){
    echo -n "·"
    for caracter in $(seq 1 ${1})
    do  
        echo -n "-"
    done
    echo "·"
}

# Pedir ao usuário que digite um texto.
echo -n "Por favor, digite um texto singelo: "
read texto

# Calcula a quantidade de hífens nas linhas superior e inferior
HIFENS=$(expr $(echo -n ${texto} | wc -c) + 2)

# Escrever o resultado final
linha_de_hifens ${HIFENS}
echo "| ${texto} |"
linha_de_hifens ${HIFENS}

06/05

Um primeiro programa em shell script: criar usuário (e grupo).

#!/bin/bash

# Entrada
# - Criar usuário:
#   - Nome completo
echo -n "Por favor, digite o nome completo do usuário: "
read nomeCompleto
#   - Nome da conta
nomeDaConta=""
while [ "${nomeDaConta}" = "" ]
do
	echo -n "Agora, digite o nome da conta: "
	read nomeDaConta
	REPETIDOS=$(cat /etc/passwd|cut -d : -f 1|grep ^${nomeDaConta}$|wc -l)
	if [ "${REPETIDOS}" -ge "1" ]
	then
		echo "Usuário já existe. Tente novamente."
		nomeDaConta=""
	fi
done
#   - Grupo
grupo=""
while [ "${grupo}" = "" ]
do
	echo -n "Digite o nome do grupo principal: "
	read grupo
done
#   - Interpretador (shell script)
echo -n "Agora, digite o interpretador de comandos: "
read interpretador
#   - Senha
#
# Processamento
# - Criar grupo, se necessário
groupadd ${grupo}
# - Criar usuário com os valores pessoais e incluir o usuário no grupo
useradd -g ${grupo} -c "${nomeCompleto}" -s ${interpretador} \
        -d /home/${grupo}/${nomeDaConta} ${nomeDaConta}
passwd ${nomeDaConta}
# - Criar diretório pessoal
mkdir -p /home/${grupo}/${nomeDaConta}
# - Atribuir as propriedade e permissões do diretório
chown root /home
chgrp root /home
chmod 755  /home
chown root     /home/${grupo}
chgrp ${grupo} /home/${grupo}
chmod 750      /home/${grupo}
chown ${nomeDaConta} /home/${grupo}/${nomeDaConta}
chgrp ${grupo}       /home/${grupo}/${nomeDaConta}
chmod 700            /home/${grupo}/${nomeDaConta}
# 
# Saída
# - Mostrar o grupo criado E mostrar o usuário criado
echo "Informações da conta (incluindo grupo):"
id ${nomeDaConta}
# - Mostrar o diretório criado com as permissões
echo "Propriedade e permissões dos arquivos e diretórios:"
ls -la /home/${grupo}

27/05

Em um passeio na Havan, eis que me deparo com essas formas de pagamento:

#!/bin/bash
if [ "${2}" = "" ]
then
	echo -n "Por favor, informe o valor do produto: "
	read valor
	echo -n "Agora, a quantidade de parcelas: "
	read parcelas
else
	valor=${1}
	parcelas=${2}
fi
if [ "${parcelas}" = "1" ]
then
	echo Valor final: $(echo "scale=2; ${valor} * 0.9"|bc)
fi
if [ "${parcelas}" -ge "2" -a "${parcelas}" -le "3" ]
then
	echo Valores: 1 + $(echo "${parcelas} - 1"|bc) de $(echo "scale=2; ${valor}/${parcelas}"|bc)
fi
if [ "${parcelas}" -ge "4" -a "${parcelas}" -le "36" ]
then
	somatorio="0"
	parcelaCorrente=$(echo "scale=2; ${valor} / ${parcelas}"|bc)
	for mes in $(seq 1 ${parcelas})
	do
		parcelaCorrente=$(echo "scale=2; ${parcelaCorrente} * 1.0215"|bc)
		somatorio=$(echo "scale=2; ${somatorio} + ${parcelaCorrente}"|bc)
		echo "[${mes}: ${parcelaCorrente} - ${somatorio}]"
	done
	echo Parcela média é $(echo "scale=2; ${somatorio} / ${parcelas}"|bc)
fi

Avaliação