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:
- 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.
- Entrada: A entrada contém valores inteiros.
- 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.