Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercício das gerações

Em média, um casal tem filhos quando atinge a idade de 28 anos. Seguindo essa média, se os portugueses chegaram em 1500 no Brasil, então, a primeira geração de brasileiros surgiu em 1528, a segunda em 1556 e assim por diante. Desde 1500 até o ano atual, quantas gerações se passaram? Vamos criar um programa para resolver a tarefa! Imprima esse número da seguinte maneira: calcule quantos anos passaram desde 1500 e divida o resultado pela média de 28 anos.

Eu criei um código de forma que se eu alterar o ano de chagada, automaticamente atualiza o ano de surgimento da primeira e segunda gerações, assim como o número de gerações que se passaram até o ano atual:

<meta charset="UTF-8">
<script>
function pulaLinha(){
    document.write("<br><br>");
}

function mostra(texto){
    document.write(texto);
    pulaLinha();
}
function exibeTitulo(titulo){
    document.write("<h1>"+titulo+"</h1>");
    pulaLinha();
}
    var idadeCasal= 28;
    var anoChegada= 1500;
    var primeiraGeracao= anoChegada+idadeCasal;
    var segundaGeracao= anoChegada+(idadeCasal*2);
    var anoAtual= 2022;
    var geracoes= Math.round((anoAtual - anoChegada)/28);
    exibeTitulo("O PROBLEMA DAS GERAÇÕES...");
    mostra("Em média, um casal tem filhos quando atinge a idade de " + idadeCasal + " anos.");
    mostra("Seguindo essa média, se os portugueses chegaram em " + anoChegada + " no Brasil, então, a primeira geração de brasileiros surgiu em " + primeiraGeracao + ", a segunda em " + segundaGeracao + " e assim por diante.");
    mostra("Desde " + anoChegada + " até o ano atual, quantas gerações se passaram?");
    mostra("Resposta: Até o ano atual, já se passaram " + geracoes + " gerações.");
</script>

Espero não ter complicado de mais o código.

Sobre a resposta da questão: usei o Math.round para arredondar o resultado 18.428571428571427

Porém o output foi 19. Ele não deveria arredondar para 18?

2 respostas
solução!

Aconteceu comigo o mesmo problema de arredondamento, Jorge. Apesar de a sintexe Math.round(x) dizer que arredonda números menores que 0.5 para 0 e maiores que 0.5 para 1, não foi o que aconteceu no meu programa. A solução que encontrei foi utilizar uma sintaxe diferente, encontrei a Math.floor(x);. Esta sintaxe arredonda para o número inteiro menor sempre. Ja resolveria seu problema, pelo menos por enquanto...

Nossa, muito obrigado José!! :D