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

Descrição do exercício

Crie um programa que leia o sexo e a idade de várias pessoas. O programa vai
perguntar se o usuário quer continuar ou não a cada pessoa. No final, mostre:

a) qual é a maior idade lida
b) quantos homens foram cadastrados
c) qual é a idade da mulher mais jovem
d) qual é a média de idade entre os homens

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>Digite o número "0" no campo "Sexo" e "Idade" para finalizar o cadastro.</p>

        <p>Digite: "F" para "Sexo feminino" | "M" para "Sexo masculino"</p>

        <p>Sexo: <input type="text" name="sexo" id="sexo"></p>

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

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

        <br>

        <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;
}

.btnCadastrar {
    display: none;
}

Resolução do exercício em JavaScript

const inputSexo = document.getElementById('sexo')
const inputIdade = document.getElementById('idade')

// Atalho para adicionar valores pressionando o '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')

// Arrays para armazenar o sexo e a idade
let listaSexo = []
let listaIdade = []

// Variável para sinalizar FLAG
let parar = false

let quantidadeHomens = 0
let somaIdadeHomens = 0
let idadeMediaHomens = 0

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

    if (sexo.trim() === '' || sexo !== 'F' && sexo !== 'f' && sexo !== 'M' && sexo !== 'm' && sexo !== '0') {
        alert('Digite "F" para "Sexo feminino" | "M" para "Sexo masculino"')
        inputSexo.value = ''
        inputSexo.focus()
        return
    }

    if (isNaN(idade) || idade < 0) {
        alert('Insira uma idade válida.')
        inputIdade.value = ''
        inputIdade.focus()
        return
    }

    if (sexo === '0') {
        parar = true
        inputSexo.disabled = true
        inputIdade.disabled = true
        btnAdicionar.style.display = 'none'
        btnCadastrar.style.display = 'inline-block'
    }

    if (!parar) {

        // Adiciona os valores no fim dos arrays
        listaSexo.push(sexo)
        listaIdade.push(idade)

        resposta.innerHTML = `
            <p>Sexo adicionado: ${listaSexo.join(' | ')}</p>
            <p>Idade adicionada: ${listaIdade.join(' | ')}</p>
        `

        if (sexo == 'M' || sexo == 'm') {
            quantidadeHomens += 1
            somaIdadeHomens += idade
            idadeMediaHomens = somaIdadeHomens / quantidadeHomens

        }

    } else {

        // A variável abaixo vai receber o primeiro valor digitado pelo usuário, ou seja, o primeiro valor é a maior e a menor idade inserida no primeiro cadastro
        let maiorIdade = listaIdade[0]

        // Por isso, este contador começa a partir do índice 1, pois ele irá fazer as novas análises tendo ele como ponto de partida
        for (let contador = 1; contador < listaIdade.length; contador++) {
            if (listaIdade[contador] > maiorIdade) {
                maiorIdade = listaIdade[contador]
            }
        }

        // Inicializa com null, ou seja, nenhum valor definido ainda. Isso permite identificar depois se nenhuma mulher foi cadastrada (útil para evitar erros).
        let mulherMaisJovem = null

        for (let contador = 0; contador < listaIdade.length; contador++) {
            // toLowerCase() transforma F ou f em minúsculo, garantindo que funcione com qualquer uma das duas letras.
            if (listaSexo[contador].toLowerCase() === 'f') {
                if (mulherMaisJovem === null || listaIdade[contador] < mulherMaisJovem) {
                    mulherMaisJovem = listaIdade[contador]
                }
            }
        }

        resposta.innerHTML += `
            <h2>Informações do cadastro:</h2>
            <p>Maior idade: ${maiorIdade}</p>
            <p>Quantidade de homens: ${quantidadeHomens}</p>
            <p>Idade média dos homens: ${idadeMediaHomens.toFixed(1)}</p>
            <p>Idade da mulher mais jovem: ${mulherMaisJovem ?? 'Nenhuma mulher cadastrada'}</p>     
        `
    }

    inputSexo.value = ''
    inputIdade.value = ''
    inputSexo.focus()

}


function cadastrar() {
    // Limpa os valores dos arrays abaixo
    listaSexo.length = 0
    listaIdade.length = 0

    // Reseta o valor de FLAG
    parar = false

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

    resposta.innerHTML = ''
    maiorIdade = 0
    quantidadeHomens = 0
    somaIdadeHomens = 0
    idadeMediaHomens = 0
    mulherMaisJovem = 0

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

}

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!