Exercício de shell script complicado ! Ajuda.

1. Exercício de shell script complicado ! Ajuda.

Guilherme Ferreira Schults
Schults

(usa Ubuntu)

Enviado em 24/01/2016 - 19:17h

Galera, esse exercício está quebrando minha cabeça, não estou conseguindo resolve-lo de maneira alguma. Alguém aí com algum nível bacana ou com conhecimento legal em shell script poderia me ajudar? Vocês me ajudaram anteriormente e ficaria muito agradecido caso algum de vocês pudessem me dar uma mão. Segue o exercício:

"Elaborar um script que leia do teclado a taxa de juros (i), o valor do deposito mensal (R), e o numero de meses (n) e, então, calcule o valor futuro de um investimento (S), conforme formula abaixo:

S=R[(1+i)^n - 1/ i

Destaca-se que o valor de S deverá ser exibido com apenas duas casas decimais de precisão".

Galera todo jeito que eu tento fazer sempre dá erro. Alguém pode me ajudar?


  


2. Re: Exercício de shell script complicado ! Ajuda.

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/01/2016 - 19:31h

Procure sobre o comando bc.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Exercício de shell script complicado ! Ajuda.

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/01/2016 - 21:52h

Poste oquê voçê ja têm, quem sabe eu possa ajudar!!!


4. Re: Exercício de shell script complicado ! Ajuda.

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/01/2016 - 13:16h

Esta formula dá um resultado sinistro , ela esta correta??? para calcular o valor de um "investimento baseado na taxa de juros mensal" X "valor do deposito" = "rendimento" + "valor geral do deposito" = resultado ... Não entendi a formula sou pessimo em matemática.


5. RESP:

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/01/2016 - 23:59h

Boa Noite Schults.
Veja se ajuda:
#!/bin/bash
###############################
# GERA TABELA DE JUROS COMPOSTOS
# MARCELO OLIVER
###############################

#VM = Valor Mensal
#TJ = Taxa de Juros
#NM = Número de Meses
#SC = CASAS DECIMAIS = SCALE

PEGADADOS() {
SC="2"
printf "\n Informe o Solicitado:\n\n"
read -p " Valor: " -e VM
read -p " Juros[%]: " -e TJ
TJ=$(bc <<< "scale=$SC;($TJ/100)+1")
read -p " Meses: " -e NM
echo
unset VLC
GERATAB
}

GERATAB() {
for ((X=1;X<=$NM;X++));do
if [ $VLC ];then
VLC=$(bc <<< "scale=$SC;(($VM+$VLC)*$TJ)")
else
VLC=$(bc <<< "scale=$SC;($VM*$TJ)")
fi
printf " Mês => %02d: %s\n" $X $VLC;
done
}

PEGADADOS

Saída:
Informe o Solicitado:

Valor: 100
Juros[%]: 1
Meses: 12

Mês => 01: 101.00
Mês => 02: 203.01
Mês => 03: 306.04
Mês => 04: 410.10
Mês => 05: 515.20
Mês => 06: 621.35
Mês => 07: 728.56
Mês => 08: 836.84
Mês => 09: 946.20
Mês => 10: 1056.66
Mês => 11: 1168.22
Mês => 12: 1280.90



É isso . . .
Se gostar, marque como melhor resposta .... Rsrsrsr

Att.:
Marcelo Oliver


6. Re: Exercício de shell script complicado ! Ajuda.

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/01/2016 - 01:10h

Poxa!!! Se manja em ... e eu aqui me matando para fazer uma gambiarra dessa >>
#/bin/bash

clear
printf "====================->> Hard-calc <<-====================\n\n"
read -p "Digite a taxa de juros (sem "%"): " i
read -p "Digite o valor do deposito (mensal): " r
read -p "Digite a quantidade de meses: " n

calculo=$(echo "scale=3; p=( "$i" / 100 ); c=( "$r" * "$n" ); ( c * p ) + c" | bc )
resultado=$(echo "scale=2; $calculo + 0 " | bc)

tenho muito a aprender ainda :-)


7. Re: Exercício de shell script complicado ! Ajuda.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/01/2016 - 01:38h

parazite10195392 escreveu:

Poxa!!! Se manja em ... e eu aqui me matando para fazer uma gambiarra dessa >>
#/bin/bash

clear
printf "====================->> Hard-calc <<-====================\n\n"
read -p "Digite a taxa de juros (sem "%"): " i
read -p "Digite o valor do deposito (mensal): " r
read -p "Digite a quantidade de meses: " n

calculo=$(echo "scale=3; p=( "$i" / 100 ); c=( "$r" * "$n" ); ( c * p ) + c" | bc )
resultado=$(echo "scale=2; $calculo + 0 " | bc)

tenho muito a aprender ainda :-)

#####################################################################
Páginas e páginas do man, --help e muitas googladas
E ainda me considero um iniciante.
O método que encontrei e INSISTIR . . .
E, ter em mente, um código sempre pode ser melhorado. . .

Seguinte, consegui resolver o "ARREDONDAMENTO"
Tava gerando a maior "M3r4A" dentro do "for", por isso postei sem . . .
Vou fazer mais uns testes e depois posto.

Abç,
Marcelo



8. Re: Exercício de shell script complicado ! Ajuda.

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/01/2016 - 02:11h

Como sugestão de exercício aponto para deixar o código à prova de erros.

Por exemplo:

- digitar números negativos ou com sinais: +0, -0, -1, -2, -0.5
- digitar letras: qwerQWER
- digitar símbolos sem sentido: @#$%*
- digitar múltiplos pontos: 3.4.5.6
- aceitar vírgula decimal e converter para ponto decimal

e algo mais que possa ter me esquecido.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Obrigado !

Guilherme Ferreira Schults
Schults

(usa Ubuntu)

Enviado em 27/01/2016 - 08:26h

msoliver escreveu:

Boa Noite Schults.
Veja se ajuda:
#!/bin/bash
###############################
# GERA TABELA DE JUROS COMPOSTOS
# MARCELO OLIVER
###############################

#VM = Valor Mensal
#TJ = Taxa de Juros
#NM = Número de Meses
#SC = CASAS DECIMAIS = SCALE

PEGADADOS() {
SC="2"
printf "\n Informe o Solicitado:\n\n"
read -p " Valor: " -e VM
read -p " Juros[%]: " -e TJ
TJ=$(bc <<< "scale=$SC;($TJ/100)+1")
read -p " Meses: " -e NM
echo
unset VLC
GERATAB
}

GERATAB() {
for ((X=1;X<=$NM;X++));do
if [ $VLC ];then
VLC=$(bc <<< "scale=$SC;(($VM+$VLC)*$TJ)")
else
VLC=$(bc <<< "scale=$SC;($VM*$TJ)")
fi
printf " Mês => %02d: %s\n" $X $VLC;
done
}

PEGADADOS

Saída:
Informe o Solicitado:

Valor: 100
Juros[%]: 1
Meses: 12

Mês => 01: 101.00
Mês => 02: 203.01
Mês => 03: 306.04
Mês => 04: 410.10
Mês => 05: 515.20
Mês => 06: 621.35
Mês => 07: 728.56
Mês => 08: 836.84
Mês => 09: 946.20
Mês => 10: 1056.66
Mês => 11: 1168.22
Mês => 12: 1280.90



É isso . . .
Se gostar, marque como melhor resposta .... Rsrsrsr

Att.:
Marcelo Oliver




Marcelo muito obrigado men ! Agradeço muito pela ajuda, vou tentar hoje e te falo :) ! To quebrando a cabeça com isso.


10. RESP:

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/01/2016 - 11:12h

[quote]listeiro_037 escreveu:

Como sugestão de exercício aponto para deixar o código à prova de erros.

Por exemplo:

- digitar números negativos ou com sinais: +0, -0, -1, -2, -0.5
- digitar letras: qwerQWER
- digitar símbolos sem sentido: @#$%*
- digitar múltiplos pontos: 3.4.5.6
- aceitar vírgula decimal e converter para ponto decimal

e algo mais que possa ter me esquecido.
########################################################################################################

Boa listeiro_037.
Essa parte é a pior, por mais que tentemos bloquear os ERROS, o usuário sempre consegue achar uma brecha.
É só dizer.
Não faça tal coisa.
Ele faz para ver o que acontece . . . Rsrsrs

Por hora tenho o seguinte:
#VM = Valor Mensal
egrep -o  '[0-9]{1,}(\.|,)[0-9]{2}' <<< "$VM" 


#TJ = Taxa de Juros
egrep '[0-9]{1,}(\.|,)?[0-9]{1,5}?' <<< "$TJ" 


#NM = Número de Meses
#Pega Pontuação
if egrep -v '[[:punct:]]' <<< "$NM";then echo -e "\nOKAY";else echo -e "\nNOT_KAY";fi 


#Pega se tiver algo diferente de número
if egrep -v '[0-9]+' <<< "$NM";then echo -e "\nOKAY";else echo -e "\nNOT_KAY";fi 


Geral:
Troca virgula por ponto. bc não aceita ","
sed 's/,/\./ 


Se tiver LeTrA ... => VM, TJ e NM
if egrep  '[[:alpha:]]+' <<< "$NM";then
echo -e "\nTeM_LeTrA"
else
echo -e "\nNãO_TeM";fi


Caso encontre qquer VAR vazia, manda para o HELP:
[[ $VM && $TJ && $NM ]] && GERATAB || HELP 

HELP() {
printf "\n Modo de USO\n
VM = Valor Mensal => FORMATO: 100, 100.00 ou 100,00
TJ = Taxa de Juros => 1, 1.00, 0.01, 1,00,etc.
OBS.: A TJ informada e dividida por 100.
NM = Qtdade de Meses => Número INTEIRO
CD = CASAS DECIMAIS => Não ALTERAR
Visando a precisão, inicia com três casas, é feito o arredondamento, e finaliza com duas casas decimais.
Logo mais, posto o ARREDONDAMENTO.
\n\n"
}



Att.:
Marcelo


11. FINALIZADO. . .

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/02/2016 - 18:00h

listeiro_037 escreveu:
Como sugestão de exercício aponto para deixar o código à prova de erros.
Por exemplo:
- digitar números negativos ou com sinais: +0, -0, -1, -2, -0.5
- digitar letras: qwerQWER
- digitar símbolos sem sentido: @#$%*
- digitar múltiplos pontos: 3.4.5.6
- aceitar vírgula decimal e converter para ponto decimal
e algo mais que possa ter me esquecido.
----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif
# apt-get purge systemd
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

_________________________________________________________________________________________________________
Boa tarde, finalizei.
Listeiro_037, de uma verificada se está "aceitando" algum caractere que não deveria....
Fiz vários testes, e não passou nada . . .
Tipo, letras, sinais, negativo, 25..50, etc . . .

Segue:
#!/bin/bash

###############################
# GERA TABELA DE JUROS COMPOSTOS
# MARCELO OLIVER
# FEVEREIRO/2016
###############################

# VM = Valor Mensal
# TJ = Taxa de Juros
# NM = Número de Meses
# CD = CASAS DECIMAIS
# VLC = VALOR CORRIGIDO (CALCULADO)

CT="\x1B[1;38;5;4m"
CH="\x1B[1;38;5;3m"
CE="\e[0;31m"
CF="\e[m"
MSGERR="DADOS INCORRETOS\n"
CD="3"
COLS=$(($(tput cols)/2))

INICIO() {

printf "$CT\n Informe o Solicitado:\n$CF"
LinHzt;LinHzt
PEGAVM ; PEGATJ ; PEGANM
}

PEGAVM() {
SRC=VM
MSG="VALOR:"
PERGUNTA
}

PEGATJ() {
SRC=TJ
MSG="JUROS:"
PERGUNTA
TJ=$(bc <<< "scale=$CD;($TJ/100)+1")
}

PEGANM() {
SRC=NM
MSG="MESES:"
PERGUNTA
}

PERGUNTA() {
printf ""$CT" $MSG"$CF""
read -p " "
[ $REPLY ] || ALERTA
#TROCA "," p/ ".". TIRA "." DO FINAL
REPLY=$(sed 's/,/\./g;s/\.$//' <<< "$REPLY")
#BUSCA POR CARACTER DIFERENTE DE [0-9] e \.
if egrep -q '[[:alpha:]+!@#$%&*()_+=><;:/?\|-]+' <<< "$REPLY";then
echo -e "\n"$CE" $MSGERR"$CF""
PERGUNTA
else
case $SRC in
VM) TST00 ;;
TJ) TST01 ;;
NM) TST02 ;;
esac
fi
}

TST00() {
if egrep -q "^([0-9]+\.?[0-9]{0,2})$" <<< "$REPLY";then
GERAVAR
else
echo -e "\n"$CE" $MSGERR"$CF""
PERGUNTA
fi
}

TST01() {
if egrep -q "^([0-9]+\.?[0-9]*)$" <<< "$REPLY";then
GERAVAR
else
echo -e "\n"$CE" $MSGERR"$CF""
PERGUNTA
fi
}

TST02() {
if egrep -q '\.+' <<< "$REPLY";then
echo -e "\n"$CE" $MSGERR"$CF""
PERGUNTA
else
GERAVAR ; GERATAB
fi
}

GERAVAR() {
eval $SRC="$REPLY"
}

GERATAB() {
unset VLC;LinHzt
for ((X=1;X<=$NM;X++));do
if [ $VLC ];then
VLC=$(bc <<< "scale=$CD;(($VM+$VLC)*$TJ)")
else
VLC=$(bc <<< "scale=$CD;($VM*$TJ)")
fi
LinHzt
sleep 0.125
#ARREDONDA
VLCAR=$(bc <<< "$VLC+0.005")
#TIRA 3ª CASA DECIMAL
VLCDE=$(sed 's/.$//' <<< "$VLCAR")
VLCDEV=$(sed 's/\./\,/' <<< "$VLCDE")
printf ""$CT" Mês => %02d"$CF" %s\n" $X $VLCDEV;
done;LinHzt
}

ALERTA() {
echo -e " "$CE"\nPREENCHIMENTO OBRIGATÓRIO!"$CF"" ; HELP ; sleep 1.5 ; PERGUNTA
}

LinHzt() { printf '%*s' "$COLS" '' | sed "s/ /—/g" ;echo; }

HELP() {
printf "\n"$CH"$(LinHzt)\n Modo de USO:\n$(LinHzt)
"$CF""$CT"VM = Valor Mensal"$CF""$CH"\n FORMATO: 100 ou 100,00
"$CF""$CT"TJ = Taxa de Juros"$CF""$CH"\n FORMATO: 1, 1,00, 1.275.
"$CF""$CT"NM = Período/Meses"$CF""$CH"\n FORMATO: Número INTEIRO.
"$CF""$CT"CD = CASAS DECIMAIS"$CF""$CH" => NãO ALTERAR
Calcula com três casas, arredonda
e elimina a 3ª casa decimal.\n$(LinHzt)"$CF""$CE"
OBS.: A TJ e dividida por 100."$CH"
$(LinHzt)"$CF"\n"
}

INICIO


Saída:
Informe o Solicitado:
___________________________________________________________
___________________________________________________________
VALOR: 150
JUROS: 1,25
MESES: 12
___________________________________________________________
___________________________________________________________
Mês => 01 151,80
___________________________________________________________
Mês => 02 305,42
___________________________________________________________
Mês => 03 460,89
___________________________________________________________
Mês => 04 618,22
___________________________________________________________
Mês => 05 777,43
___________________________________________________________
Mês => 06 938,56
___________________________________________________________
Mês => 07 1101,63
___________________________________________________________
Mês => 08 1266,64
___________________________________________________________
Mês => 09 1433,64
___________________________________________________________
Mês => 10 1602,65
___________________________________________________________
Mês => 11 1773,68
___________________________________________________________
Mês => 12 1946,76
___________________________________________________________


Att.:
Marcelo








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts