Article image
Luanna N.
Luanna N.10/09/2021 19:55
Compartilhe

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.

Compartilhe
Comentários (6)
Marcus Oliveira
Marcus Oliveira - 28/01/2022 12:00

Parabéns, sua didática é ótima!

Tiago Silva
Tiago Silva - 19/09/2021 14:41

Obrigado Luanna por compartilhar seu conhecimento com esta ótima explicação.

Osvaldo Junior
Osvaldo Junior - 18/09/2021 14:03

Obrigado Luanna! Gostei bastante e pode ir fazendo cada vez mais explicações assim, eu mesmo vou sempre acompanhar!

Luanna N.
Luanna N. - 11/09/2021 14:19

As vezes a dificuldade nem é resolver o desafio, e sim traduzir essa solução corretamente. Espero que esse meu passo-a-passo ajude o pessoal que está começando agora com o C#.

Diego Marcelino
Diego Marcelino - 11/09/2021 11:04

Boa Luanna! É um ótimo tutorial principalmente pra quem ta começando em C# que é uma linguagem bem tipada! Vai ajudar bastante!

Wlanyse Beckman
Wlanyse Beckman - 10/09/2021 20:04

Oi Luana,

Achei sensacional a forma como você explicou a resolução do código. Assim ficou mais fácil o entendimento.

Obrigada por compartilhar!