Article image
Fernando Araujo
Fernando Araujo09/12/2021 17:39
Compartilhe

Eduzz, resolvendo desafios básicos em Javascript

  • #Informática Básica
  • #Lógica de Programação

Olá, devs!

Este artigo trata da análise da lógica de dois desafios do curso “Resolvendo Desafios Básicos em JavaScript”, do bootcamp “Eduzz Fullstack developer #2”, no qual estou matriculado.

Alguns problemas dos desafios de código são muito difíceis para que o dev iniciante chegue à sua lógica de resolução com facilidade, mas outros são bem fáceis e sua resolução pode parecer óbvia para os devs experientes, não para os iniciantes.

O objetivo é ajudar os devs iniciantes a entenderem como resolver um problema com programação, chegando à lógica computacional necessária para transformar um enunciado em um algoritmo, que deve ser codificado para implementar a sua resolução.

Neste artigo, eu vou analisar a lógica da resolução de dois desafios de código, partindo do enunciado e dos exemplos dados até chegar a um algoritmo para a solução.

Eu só vou chegar até o algoritmo básico, sem sugerir ou analisar um possível código-fonte, pois isso é tarefa do aluno. Ele é quem deve buscar, nos seus conhecimentos aprendidos nas aulas da plataforma, a sintaxe e estruturas da linguagem de programação pedida, a codificação adequada para resolver o problema.

 

1 - Introdução

No artigo anterior (Desafios de Código, o Guia Definitivo), eu analisei um desafio de código do curso “Resolvendo Desafios Básicos em JavaScript”, do bootcamp “Eduzz Fullstack developer #2”, no qual estou matriculado.

Nele, eu parti do enunciado, exemplos e código-fonte inicial, oferecido pela plataforma, e fiz a análise do problema, expliquei a lógica da solução, escrevi um algoritmo, dei sugestões de código-fonte, analisei a execução deste código nos testes abertos e fechados, fiz as correções necessárias no código até concluir o desafio, com a aprovação do código final em todos os testes abertos e fechados. Finalmente, dei várias dicas sobre entrada e saída de dados para os desafios de código e como obter ajuda na plataforma e com os devs da DIO.

O desafio analisado no artigo anterior foi: Múltiplos (1/3).

 

Para este novo artigo, eu escolhi analisar os desafios de código 2 e 3 do mesmo curso do artigo anterior, “Resolvendo Desafios Básicos em JavaScript”, do bootcamp “Eduzz Fullstack developer #2”.

E vou analisar agora os dois desafios restantes daquele curso.

 

2 – Análise do desafio de código Teste de Seleção 1 (2/3)

image

3 – Enunciado do desafio “Teste de Seleção 1”

Basicamente, o problema espera a entrada de 4 valores inteiros (A, B, C e D) e lista várias condições de aceitação para estes valores. Se todos os valores passarem nos testes, serão aceitos, do contrário, não serão aceitos. O programa deve escrever uma mensagem no final indicando um destes dois resultados.

As condições de aceitação para os números lidos são: o valor de B deve ser maior do que o de C, e D deve ser maior do que A, e a soma de C com D deve ser maior que a soma de A e B, e tanto C quanto D devem ser positivos, e A deve ser par.

 

4 - Exemplos

Na parte dos exemplos, são mostrados exemplos de entradas para dois casos (respectivamente, A, B, C e D do enunciado):

  • 5, 6, 7 e 8     Valores nao aceitos
  • 2, 3, 2 e 6      Valores nao aceitos

 

5 - O Algoritmo

O algoritmo para a solução é muito óbvio e já está dado pelo código já escrito, oferecido pela plataforma. Ele é composto apenas da entrada de dados, um teste (comando IF) e dois comandos de saída.

  1. Leia A
  2. Leia B
  3. Leia C
  4. Leia D
  5. Se a condição de aceitação for verdadeira
  6. Escreva uma mensagem de aceitação dos valores lidos
  7. Senão
  8. Escreva uma mensagem de não aceitação

 

6 - Análise da lógica do problema

Como o código já está quase pronto, as únicas coisas que faltam para concluir o código são a condição do IF e as mensagens de saída.

A condição do comando IF é uma condição múltipla, formada por várias condições individuais, dadas no enunciado. Os valores de entrada só serão aceitos se TODAS estas condições forem satisfeitas ao mesmo tempo:

SE

  • B > C e;
  • D > A e;
  • (C+D) > (A+B) e;
  • C>0 e;
  • D>0 e;
  • A é par.

ENTÃO os valores são aceitos

SENÃO os valores não são aceitos

Analisando os exemplos de entrada e saída esperada dados, temos:

image

E as mensagens de saída devem refletir o resultado do comando IF. Atenção! A sua mensagem de saída deve ser exatamente igual à mensagem esperada pelo problema, ou seja, a palavra nao sem o til e valores com inicial maiúscula.

 

Agora, use seus conhecimentos de Javascript aprendidos nas aulas e codifique o que falta, com base nesta análise.

 

Depois, execute seu código para os testes abertos, usando o botão “Executar Testes”:

  • Se ele não for aprovado em todos os testes abertos, ele tem algum erro. Corrija seu código e repita o processo com os testes abertos;
  • Se for aprovado em todos os testes abertos, é preciso testá-lo para os testes fechados.

Agora, execute seu código para os testes fechados, usando o botão “Entregar Desafio”:

  • Se seu código não for aprovado em todos os testes fechados, ele tem algum erro. Corrija seu código e repita o processo com os testes abertos novamente.
  • Se for aprovado em todos os testes fechados, está finalizado seu desafio e seu código foi aprovado!!

 

7 – Análise do desafio de código Folha de Pagamento (3/3)

image

8 – Enunciado do desafio de código “Folha de Pagamento”

Basicamente, o enunciado do problema pede que sejam lidos os seguintes dados: o número de um colaborador de uma empresa, o número de horas trabalhadas e o valor que ele recebe por hora trabalhada. Com base nestes dados, pede para calcular o salário dele e apresentar o número do trabalhador e o salário dele, com duas casas decimais.

Os dois primeiros dados de entrada são inteiros e o último é um número decimal, com duas casas decimais.

A saída deve ser composta de duas mensagens, uma para o número do trabalhador e, na linha seguinte, o seu salário, conforme os exemplos dados na próxima seção.

OBS: há um espaço em branco entes e depois de cada símbolo de igualdade, bem como após o símbolo $.

 

9 - Exemplos

Na parte dos exemplos, são mostrados exemplos de entradas para dois casos (respectivamente, variáveis valor1, valor2 e valor3 do código):

image

10 - O Algoritmo

O algoritmo para a solução é muito óbvio e já está dado pelo código já escrito, oferecido pela plataforma. Ele é composto apenas da entrada de dados, uma expressão matemática e dois comandos de saída.

  1. Leia o número do colaborador (valor1, inteiro)
  2. Leia o número de horas trabalhadas (valor2, inteiro)
  3. Leia o valor que ele recebe por hora trabalhada (valor3, decimal)
  4. Calcule o valor do salário do trabalhador (salary, decimal)
  5. Escreva uma mensagem informando o número do trabalhador
  6. Escreva uma mensagem informando o salário do trabalhador

 

11 - Análise da lógica do problema

Como o código já está quase pronto, a única coisa que falta para concluir o código é a expressão matemática para o cálculo do salário, dados o número de horas trabalhadas e o valor pago por hora trabalhada.

Esse cálculo pode ser determinado por regra de 3 simples:

  • O trabalhador númro “valor1” recebe “valor2” por hora trabalhada
  • Então ele receberá “salary” por “valor3” horas trabalhadas

 

Ou seja:

  • Ele recebe valor2 dólares -----> 1 hora trabalhada
  • E receberá salary dólares -----> valor3 dólares / horas trabalhadas

 

Logo: salary = valor2 x valor3 dólares

 

E essa é a expressão que calcula o salário do trabalhador. Agora, use seus conhecimentos de Javascript aprendidos nas aulas e codifique esta expressão.

 

As mensagens de saída devem informar os valores pedidos seguindo o modelo dos exemplos dados.

Atenção! A sua mensagem de saída deve ser exatamente igual à mensagem esperada pelo problema, ou seja, usar NUMBER e SALARY (ao invés de número e salário), ambas em maiúsculas, US$ (ao invés de R$), com os espaços em branco exigidos no enunciado.

É importante checar os resultados dos cálculos realizados nos exemplos e verificar se sua saída bate com a formatação para as saídas esperadas.

 

Depois, execute seu código para os testes abertos, usando o botão “Executar Testes”:

  • Se ele não for aprovado em todos os testes abertos, ele tem algum erro. Corrija seu código e repita o processo com os testes abertos;
  • Se for aprovado em todos os testes abertos, é preciso testá-lo para os testes fechados.

Agora, execute seu código para os testes fechados, usando o botão “Entregar Desafio”:

  • Se seu código não for aprovado em todos os testes fechados, ele tem algum erro. Corrija seu código e repita o processo com os testes abertos novamente.
  • Se for aprovado em todos os testes fechados, está finalizado seu desafio e seu código foi aprovado!!

 

12 - Finalizando...

Eu publiquei um novo artigo listando todos os artigos que já escrevi para a DIO uma espécie de índice (ou sumário), pois vejo que os artigos antigos acabam ficando inacessíveis após algum tempo. Este novo artigo será referenciado em todos os artigos que eu escrever daqui para a frente e será atualizado a cada artigo novo que eu escrever.

Segue o link abaixo:

Iniciantes 5 – Meus artigos na DIO

 

Bem, por hoje é só! Obrigado por ter lido até aqui.

OBS: Se você gostou deste artigo, veja o artigo anterior que eu escrevi na DIO:

Desafios de Código, o Guia definitivo

E o meu artigo seguinte a este:

O dia em que em eu encontrei o Android em pessoa

 

Compartilhe
Comentários (4)
Fernando Araujo
Fernando Araujo - 09/12/2021 18:30

Ah, Cailton, agora entendi.


Vou continuar, sim!!


Comecei uma série de artigos tratando de Algoritmos e este artigo tem a ver com algoritmos e desafios.

Vou começar em breve outra só tratando de Estruturas de Dados

E vou pensar se vale a pena botar no github, pois aqui, depois de um dia no ar, o artigo some da página principal e ninguém mais acessa.

Pode ser que lá seja mesmo o repositório adequado para este tipo de artigos.


Valeu, obrigado!!


Cailton Costa
Cailton Costa - 09/12/2021 18:25

Refiro sobre o mesmo tipo desse post aqui, onde irá ficar seguindo as etapas... Acredito que ficará mais facil acessar os conteúdos dos desafios anteriores

Fernando Araujo
Fernando Araujo - 09/12/2021 18:05

Obrigado, Cailton!

Fico realmente feliz que meus artigos ajudem alguém que precisa de maiores entendimentos!!

Não sei se vale a pena colocar lá, pois não gosto de dar os códigos, apenas os algoritmos.

O aluno é quem deve criar seu código, com base no algoritmo.

Só no último artigo eu decidi dar o código, pois era como uma aula completa sobre como resolver o desafio até a aprovação dele em todos os testes.

Cailton Costa
Cailton Costa - 09/12/2021 17:59

Continue com esses post!

Acredito que irá ajudar bastante gente assim como eu :D


Dica: Coloque num repositório no GitHub