msoliver
(usa Debian)
Enviado em 17/04/2021 - 21:43h
gutosoni escreveu:
msoliver escreveu:
gutosoni escreveu:
Olá pessoal!
Estou tentando criar um algorítimo em shell do problema a seguir, mas não estou tendo êxito dentro do loop. Sei que precisa do bc, mas não sei como inseri-lo. Alguém saberia criar esse algorítimo?
Supondo que a população de um país A seja da ordem de 80000 habitantes com uma taxa anual de crescimento de 3% e que a população de B seja 200000 habitantes com uma taxa de crescimento de 1.5%. Faça um programa que calcule e escreva o número de anos necessários para que a população do país A ultrapasse ou iguale a população do país B, mantidas as taxas de crescimento.
#!/usr/bin/env bash
pop_a=80000
pop_b=200000
ano=0
while [ "$pop_a" -le "$pop_b" ]; do
pop_a+=pop_a*0.03
pop_b+=pop_b*0.015
ano+=1
done
echo "A ultrapassa B em $ano anos"
Eu criei um novo tópico, porque por engano marquei o anterior como resolvido.
Boa Noite Gutosoni.
Testei aqui e funcionou.... Teste, por favor.
#!/usr/bin/env bash
pais_A=80000;pais_B=200000;ano=0;stt=0;
while ((${stt} < 1)); do
pais_A=$(bc <<< "${pais_A} * 1.03");
pais_B=$(bc <<< "${pais_B} * 1.015");
let ano++;
stt=$(bc <<< "${pais_A}>=${pais_B}");
#Linha Abaixo é para testes#
printf "PAIS_A: %s =» PAIS_B: %s =» ANO: %02d =» STT: %d\n" ${pais_A} ${pais_B} ${ano} ${stt}
done
echo "PAIS_A:${pais_A} \">=\" PAIS_B:${pais_B} em $ano anos"
PAIS_A =» 515032.34 ">=" PAIS_B =» 510964.368 em =» 63 anos
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando:
lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p' ,
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:
Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.
______________________________________________________________________
Msoliver, funcionou perfeitamente.
Além disso é possível ver a população de A e B com o passar dos anos até ultrapassar.
Pelo o que entendi o stt controla o loop e encerra assim que a população de A iguala ou supera a população de B. Obrigado!
Justamente, quem controla o looping e a var stt
Originada pelo "bc", já que o bash só trabalha com numero inteiro
$(bc <<< "${pais_A}>=${pais_B}");
verdadeiro=1
falso=0
Depois que postei, fiz uma alteração no laço.
segue:
while :;do
pais_A=$(bc <<< "${pais_A} * 1.03");
pais_B=$(bc <<< "${pais_B} * 1.015");
let ano++;
stt=$(bc <<< "${pais_A}>=${pais_B}");
printf "PAIS_A: %s =» PAIS_B: %s =» ANO: %02d =» STT: %d\n" ${pais_A} ${pais_B} ${ano} ${stt}
((${stt} > 0)) && break
done
echo "PAIS_A =» ${pais_A} \">=\" PAIS_B =» ${pais_B} em =» $ano anos"
Agora que está funcionando, só falta MARCAR como RESOLVIDO e escolher a MELHOR RESPOSTA, KKKKKKK
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando:
lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p' ,
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:
Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.
______________________________________________________________________