Olá! Vamos analisar esse trecho de código!
O mais importante é notar o uso de while
. Essa instrução indica, sem precisarmos olhar muito no código que algo será repetido. O que queremos repetir? A leitura da idade de um familiar através do teclado. Mas quantas familiares você tem e eu tenho? São números iguais? Não, sendo assim, se eu tenho 5 familiares e você 3, o número de vezes que ele deve perguntar ao usuário varia, ou seja, o número de repetições da pergunta varia.
Sendo assim, veja que o while repete sempre uma instrução até que alguma condição seja falsa. Veja que a condição do while é repetir até que o número de leitura de idades seja menor ou igual a quantidade de familiares informadas.
O programa não fez curso "mãe" Diná para saber quantas familiares eu tenho e você tem, por isso a primeira coisa que fazemos no programa é perguntar o total de familiares. Aliás, esse total é utilizando no while
. Veja:
while(numero <= totalDeFamiliares)
Sendo sim, ele vai repetir as instruções dentro do bloco while tantas vezes. Quantas? O total de familiares informado.
Agora que matamos o lance da repetição, você sabe que não basta eu ler a idade do familiar. Eu tenho que acumular a idade de cada familiar lido, pois no final eu quero tirar a média das idades. Que é o somatória da idade de cada familiar dividido pelo total de familiares. O total já temos, precisamos é somar cada idade, uma a uma.
while(numero <= totalDeFamiliares) {
// lê do teclado a idade
var idade = parseInt(prompt("Qual é a idade?"));
// acumula a idade na variavel somaDeIndades
somaDeIdades = somaDeIdades + idade;
numero++; // IMPORTANTEEEEEEEE!
}
Veja que para cada idade lida, eu acumulo seu valor em somaDeIdades. ATENÇÃO MEGA ULTRA AQUI: a variável somaDeIdades
não pode ser declarada com 0 dentro do while, se você fizer isso, ela será zerada a cada leitura de idade. Sendo assim, esse código não funciona conforme o esperado:
while(numero <= totalDeFamiliares) {
var somaDeIdades = 0; // isso está errado
var idade = parseInt(prompt("Qual é a idade?"));
somaDeIdades = somaDeIdades + idade;
numero++;
}
É por isso que somaDeIdades
é inicializada com 0 ante do while
. Mas Flávio, porque eu preciso inicializar somaDeIdades
? Se você não atribuir 0, quando ele estiver dentro do while vai tentar somar undefined
com a idade lida. Essa operação resulta em NaN
(not a number) porque não é possível somar undefined com um número.
Mas não adianta nada você pedir para ler do teclado quantas vezes for o total de familiar. O nosso programa precisa saber que ele já leu uma vez, duas vezes, três vezes. É a quantidade de idades lidas que ele compara com o total de familiares para saber se para de repetir. É por isso que declaramos uma variável chamada numero
. Ela começa de 1, depois de você ter lido a idade, ela vai para 2, depois de ler mais uma ela vai para 3. E veja que para cada passada do while ele compara número para ver se é igual ou menor ao total de idades. Se for, o while pode executar seu bloco, se não for, é porque já lemos todas as idades para a quantidade de familiares.
Por fim, como temos a soma total de idades e o total de familiares, podemos executar a média aritmética.
A essência desse curso é fazer com que você entenda que uma variável acumuladora deve ser iniciada fora do bloco de repetição e não dentro dele.