Exercício 81 – Lógica de programação com JavaScript

Descrição do exercício

Crie um programa que leia a idade de 8 pessoas e guarde-as em um vetor. No
final, mostre:

a) Qual é a média de idade das pessoas cadastradas
b) Em quais posições temos pessoas com mais de 25 anos
c) Qual foi a maior idade digitada (podem haver repetições)
d) Em que posições digitamos a maior idade

Explicação de como funciona

Para você visualizar o exercício funcionando no seu navegador, peço que siga os seguintes passos:

1 – Crie uma pasta no Visual Studio Code, você pode chamá-la de “exercicio-numero-aqui”.

2 – Crie 3 arquivos dentro dessa pasta, um vai ser para o código HTML, CSS e outro para JavaScript. Os nomes que dei para os meus arquivos foram:

  • texto.html
  • estilo.css
  • codigo.js

3 – Depois de criar os 3 arquivos, basta copiar os códigos abaixo para ver funcionando no seu navegador.

Estrutura da página em HTML

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exercício de logica de programação</title>
    <link rel="stylesheet" href="estilo.css">
</head>

<body>
    <section class="design-section">

        <h1>Cadastro de pessoas</h1>

        <p>Insira a idade de 8 pessoas abaixo.</p>

        <p>Idade: <input type="number" name="idade" id="idade"></p>

        <button onclick="adicionar()" class="btnAdicionar">Adicionar</button>

        <button onclick="cadastrar()" class="btnCadastrar">Cadastrar mais pessoas</button>

        <div class="resposta"></div>

    </section>

    <script src="./codigo.js"></script>

</body>

</html>

Estilização da página em CSS

* {
    box-sizing: border-box;
}

body {
    background: #F8F9FA;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 18px;
    min-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 0;
}

.design-section {
    width: 50%;
    border: 1px solid #d2d2d2;
    border-radius: 10px;
    padding: 20px;
    background-color: #ffffff;
    box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
}

input[type="button"] {
    background: #F8F9FA;
    border-radius: 50px;
    border: 1px solid;
    padding: 10px;
    cursor: pointer;
}

input[type="number"] {
    background: #F8F9FA;
    border-radius: 50px;
    border: 1px solid;
    padding: 5px;
}

input[type="text"] {
    background: #F8F9FA;
    border-radius: 50px;
    border: 1px solid;
    padding: 5px;
}

button {
    background: #F8F9FA;
    border-radius: 50px;
    border: 1px solid;
    padding: 10px;
    cursor: pointer;
    margin: 10px;
}

.btnCadastrar {
    display: none;
}

Resolução do exercício em JavaScript

const inputIdade = document.getElementById('idade')

// Atalho para adicionar dados apertando "ENTER"
inputIdade.addEventListener('keydown', function (event) {
    if (event.key === 'Enter') {
        adicionar()
    }
})

const btnAdicionar = document.querySelector('button.btnAdicionar')
const btnCadastrar = document.querySelector('button.btnCadastrar')
const resposta = document.querySelector('div.resposta')

let listaIdades = []


function adicionar() {
    const idadeDigitada = inputIdade.value
    const idade = Number(idadeDigitada)

    // Validação de valores
    if (idadeDigitada === '' || isNaN(idade)) {
        alert('Insira um número válido no campo.')
        inputIdade.value = ''
        inputIdade.focus()
        return
    }

    if (idade <= 0) {
        alert('Insira uma idade maior que zero.')
        inputIdade.value = ''
        inputIdade.focus()
        return
    }

    // Adiciona números ao array e mostra para o usuário
    listaIdades.push(idade)
    resposta.innerHTML = `${listaIdades.length} idades adicionadas.`

    inputIdade.value = ''
    inputIdade.focus()

    // Análise dos números
    if (listaIdades.length >= 8) {

        let somaIdades = 0
        let maiorIdade = 0
        let maiorIdadePosicao = 0

        for (let contador = 0; contador < listaIdades.length; contador++) {
            somaIdades = somaIdades + listaIdades[contador]

            if (listaIdades[contador] > maiorIdade) {
                maiorIdade = listaIdades[contador]
            }
        }

        const posicoesMaiorIdade = listaIdades
            .map((valor, indice) => ({ indice, valor }))
            .filter(item => item.valor === maiorIdade)
            .map(item => `[${item.indice}]`)
            .join(' > ')

        const idadeMais25 = listaIdades
            .map((valor, indice) => ({ indice, valor }))
            .filter(item => item.valor > 25)
            .map(item => `[${item.indice}]`)
            .join(' > ')

        let respostaIdadeMais25 = ''

        if (idadeMais25.length === 0) {
            respostaIdadeMais25 = 'Não foi cadastrada nenhuma idade maior que 25.'
        } else {
            respostaIdadeMais25 = `${idadeMais25}`
        }

        const idadeMedia = somaIdades / listaIdades.length

        // Retorno da análise
        resposta.innerHTML = `
        <p>Idades cadastradas: ${listaIdades.join(' | ')}</p>
        <p>Idade média: ${idadeMedia} ano(s).</p>
        <p>Idades maiores que 25 (indíce): ${respostaIdadeMais25}</p>
        <p>Maior idade: ${maiorIdade} anos.</p>
        <p>Posições da maior idade: ${posicoesMaiorIdade}</p>
    `

        inputIdade.disabled = true

        btnAdicionar.style.display = 'none'
        btnCadastrar.style.display = 'inline-block'

    }

}


function cadastrar() {
    listaIdades.length = 0

    inputIdade.disabled = false
    inputIdade.value = ''
    inputIdade.focus()

    btnAdicionar.style.display = 'inline-block'
    btnCadastrar.style.display = 'none'

    resposta.innerHTML = ''
}

Participe do Desafio de JavaScript

Este exercício faz parte do Desafio de JavaScript, um desafio composto por 100 exercícios para praticar lógica de programação com JavaScript.

Além disso, você poderá participar da nossa comunidade, tirando suas dúvidas, fazendo networking e aprendendo muito!

Caso tenha interesse em participar, basta clicar aqui neste link para saber mais detalhes!

Compartilhe este texto!