Entendendo o Código: Solução do Desafio C# - Múltiplos

10/09/2021 19:55

Luanna N.

Luanna N.

Brasil

Desenvolvendo 🌱 | HTML5 | CSS | JAVASCRIPT | REACT | C# | .NET | GIT | GITHUB

Entendendo o Código: Solução do Desafio C# - Múltiplos
  • #.NET C#

Antes de iniciar qualquer desafio de código, é importante entender o que está sendo pedido e como a informação será processada pelo console.

Para exemplificar, vou usar o desafio Múltiplos.

1. using System;
2. class minhaClasse {
3.        static void Main(string[] args) {
4.            //continue a solucao com a insercao da variavel corretamente
5.            
6.        }
7.    }

O que esse bloco de código está me dizendo?

  • Na linha 1, temos a diretiva using fazendo referência ao namespace System. Na prática isso significa que posso usar os tipos da System de forma não qualificada. Ou seja, posso chamar o Console diretamente, em vez de ter que chamar System.Console.
  • Na linha 2, temos a classe que está sendo declarada.
  • Na linha 3, temos o método Main, que é o único membro da classe minhaClasse. Ele também é o ponto de entrada desse programa e está recebendo um array de strings.

Agora vamos olhar a solução que precisa ser feita:

  1. Instrução: Leia 2 valores inteiros (A e B). Após, o programa deve mostrar uma mensagem "São Multiplos" ou "Não são Multiplos", indicando se os valores lidos são múltiplos entre si.
  2. Entrada: A entrada contém valores inteiros.
  3. Saída: A saída deve conter uma das mensagens conforme descrito acima.

Vamos receber os dados:

1. using System;
2. class minhaClasse {
3.        static void Main(string[] args) {
4.            //continue a solucao com a insercao da variavel corretamente
5.
6.            string[] valores = Console.ReadLine().Split(' ');
7.            int A = int.Parse(valores[0]);
8.            int B = int.Parse(valores[1]);
9.        }
10.    }          
  • Na linha 6, temos o Console.ReadLine() lendo os dados e o Split(' ') separando esses dados por um espaço. Isso está sendo atribuído a variável valores que é um array.
  • Na linha 7, estou selecionando o índice 0 do array. Dentro dele está o 1º item desse array, que é do tipo string. Para poder trabalhar com ele como se fosse um número, preciso convertê-lo. É isso que o int.Parse() está fazendo. Esse dado, já devidamente convertido, está sendo atribuído a variável A.
  • Na linha 8, está acontecendo a mesma coisa. A diferença é que estou acessando o índice 1, que contém o 2º item do array.

Agora é preciso pensar no problema em si. Como que eu sei que 2 números são ou não são múltiplos um do outro? Como a tabuada é o exemplo clássico dos múltiplos, vamos olhar para ela:

  • Tabuada de 2:
  • 2x1 = 2 // 2x2 = 4 // 2x3 = 6 // 2x4 = 8 // 2x5 = 10
  • Conjunto dos Múltiplos de 2 = {2, 4, 6, 8, 10, ...}

Então se observa que os múltiplos de um número são divisíveis por esse número, então o resto dessa divisão será 0.

  • 2 / (qualquer múltiplo de 2) = (a um número natural) => Resto será 0
  • 2 / 2 = 1 => resto 0
  • 2 / 4 = 2 => resto 0
  • 2 / 6 = 3 => resto 0

Vamos implementar isso:

1. using System;
2. class minhaClasse {
3.        static void Main(string[] args) {
4.            //continue a solucao com a insercao da variavel corretamente
5.
6.            string[] valores = Console.ReadLine().Split(' ');
7.            int A = int.Parse(valores[0]);
8.            int B = int.Parse(valores[1]);
9.
10.           if (A % B  == 0) {
11.               Console.WriteLine("Sao Multiplos");
12.           }
13.           else {
14.                Console.WriteLine("Nao sao Multiplos");
15.            }
16.        }
17. }

  • Na linha 10, ele vai dividir o valor A pelo valor B e se o resto for igual a 0, ele vai executar o que está dentro das { }
  • Na linha 11, ele vai retornar a saída "Sao Multiplos", caso o if da linha 10 seja verdadeiro.
  • Na linha 13, se o if da linha 10 for falso, ele vai executar o que está dentro das { } do else.
  • Na linha 14, ele vai retornar a saída "Nao sao Multiplos", indicando que a verificação do if retornou falsa.

Esse código está bom, mas tem um problema. Ele só retorna verdadeiro quando A é múltiplo de B. Mas eu preciso que ele retorne verdadeiro também nos casos em que B é múltiplo de A.

  • Porque? Porque a instrução pede que se verifique se os números recebidos são múltiplos entre si, em qualquer ordem.
  • Sabemos que 2 e 4 são múltiplos entre si.
  • Mas o meu código só vai retornar verdadeiro quando A = 4 e B = 2.
  • Se eu receber esses números na ordem inversa, com A = 2 e B = 4 ele vai retornar falso.

Para resolver isso, vou adicionar o operador lógico ou (||) dentro do meu if.

1. using System;
2. class minhaClasse {
3.        static void Main(string[] args) {
4.            //continue a solucao com a insercao da variavel corretamente
5.
6.            string[] valores = Console.ReadLine().Split(' ');
7.            int A = int.Parse(valores[0]);
8.            int B = int.Parse(valores[1]);
9.
10.           if (A % B  == 0 || B % A == 0) {
11.               Console.WriteLine("Sao Multiplos");
12.           }
13.           else {
14.                Console.WriteLine("Nao sao Multiplos");
15.            }
16.        }
17. }
  • Na linha 10, ele vai ver se o resto da divisão entre A e B é igual a 0 OU se o resto da divisão entre B e A é igual a 0. Se qualquer uma dessas condições for verdadeira, o if será verdadeiro e ele irá executar o que está dentro das { }

Pronto, agora o código vai passar em todos os testes de saída.

Faça parte da nossa comunidade!

Domine as tecnologias utilizadas pelas empresas mais inovadoras do mundo e encare seu novo desafio profissional, evoluindo em comunidade com os melhores experts.

2

Certificado

Artigo relacionado

Comentários

    Nenhum comentário