C# - A Constante de Kaprekar
Hoje vamos tratar da constante de Kaprekar, o enigmático número 6174. |
Você sabe o que é a constante de Kaprekar ?
Ela esta relacionada com o número 6174, que parece ser um número mágico ou misterioso...
Vamos entender isso:
1. Escolha
qualquer número de quatro dígitos que seja composto por pelo menos dois dígitos
diferentes, incluindo zero, por exemplo, 1234....
2. Organize os dígitos em ordem decrescente : 4321.
3. Agora, organize os números em ordem crescente: 1234
4. Subtraia o menor número do maior número: 4321 - 1234 = 3087
5. E agora, com o resultado obtido, repita os últimos três passos Vamos lá:
- Primeiro, organizamos os dígitos em ordem decrescente: 8730
- Depois, em ordem crescente: 0378
- E subtraímos o menor do maior: 8730 - 0378 = 8352
- Novamente, reorganizamos os dígitos e os subtraímos: 8532 - 2358 =
6174.
- Uma vez mais, reordenamos os dígitos e subtraímos: 7641 - 1467 = 6174.
De agora em diante, não vale a pena prosseguir, já que repetiríamos a mesma
operação e sempre obteriamos o número 6174.
"O número inteiro 6174 é conhecido como a Constante
Kaprekar, batizada em homenagem àquele que descobriu a misteriosa beleza do
número 6174 e a apresentou na Conferência Matemática de Madras em 1949,
Dattatreya Ramchandra Kaprekar (1905-1986), um viciado confesso na teoria dos
números.
"Um bêbado quer continuar bebendo vinho para se manter naquele estado agradável.
O mesmo vale para mim quando se trata de números", ele costumava dizer.
Kaprekar era um professor de uma pequena população indiana chamada devlali ou
deolali e era frequentemente convidado a falar em outras escolas sobre seus
métodos únicos e observações numéricas fascinantes. No entanto, vários
matemáticos indianos riam de suas ideias chamando-as de triviais.
Talvez sejam: é fato que, apesar de a Constante de Kaprekar ser surpreendente e
nos levar a suspeitar que por trás dela esteja um grande teorema, pelo menos até
agora nunca revelou nada...."
Acessado em 28/08/2019 - https://bit.ly/32cXxqG
Vamos então criar um projeto Windows Forms na linguagem C# e mostrar como obter a constante de Kaprekar.
recursos usados:
Criando o projeto no VS 2019 Community
Vamos criar uma aplicação Windows Forms com o .NET Framework usando o Visual Studio 2019 Community chamada WF_Kaprekar.
No formulário padrão Form1.cs vamos incluir a partir da ToolBox os seguintes controles:
Disponha os controles no formulário conforme a figura abaixo:
Vamos criar a classe Calculo no projeto onde vamos definir os métodos estáticos:
Defina o código abaixo para a classe Calculo:
using System;
using System.Collections.Generic;
namespace WF_KapreKar
{
public class Calculo
{
public static List<Resultado> kaprekarConstante(int numero, int valorPrevio,
List<Resultado> resultados)
{
// cria uma instância da classe Resultado
// gerando objetos operacao onde vamos
// armazenar as iterações feitas
Resultado operacao = new Resultado();
// armazena o valor atual como o valor anterior
valorPrevio = numero;
// Pega 4 digitos do numero informado
int[] digitos = new int[4];
for (int i = 0; i < 4; i++)
{
digitos[i] = numero % 10;
numero = numero / 10;
}
// Ordena os digitos em orden ascendente
// armazena na variavel valorAscendente
Array.Sort(digitos);
int valorAscendente = 0;
for (int i = 0; i < 4; i++)
{
valorAscendente = valorAscendente * 10 + digitos[i];
}
//atribui o valor ao objeto operacao
operacao.ValorAscendente = valorAscendente;
// Ordena os digitos em ordem descendente
// e armazena em valorDescendente
Array.Sort(digitos);
int valorDescendente = 0;
for (int i = 3; i >= 0; i--)
{
valorDescendente = valorDescendente * 10 + digitos[i];
}
//atribui o valor ao objeto operacao
operacao.ValorDescendente = valorDescendente;
// Obtém a diferenca (absoluta) entre os dois numeros
int diff = Math.Abs(valorAscendente - valorDescendente);
//atribui a diferena ao objeto operacao
operacao.Diferenca = diff;
//inclui o objeto operação à lista de objetos Resultado
resultados.Add(operacao);
// Se a diferença for igual a valorPreveio
// alcançamos a constante de Kaprekar
if (diff == valorPrevio)
{
//retorna as operações realizadas
return resultados;
}
// Continua a realizar as operações
return kaprekarConstante(diff, valorPrevio, resultados);
}
// Chama o método passando o número , o valorPrevio(0)
// e uma instância da lista de resultados
public static List<Resultado> Kaprekar(int numero)
{
int valorPrevio = 0;
List<Resultado> resultados = new List<Resultado>();
return kaprekarConstante(numero, valorPrevio, resultados);
}
}
}
|
Este código foi modificado do original obtido em : https://www.geeksforgeeks.org/kaprekar-constant/
O código já esta comentado e esta classe basicamente vai fazer o seguinte:
Precisamos criar também a classe Resultado onde vamos armazenar a lista das operações feitas:
public class Resultado
{
public int ValorAscendente { get; set; }
public int ValorDescendente { get; set; }
public int Diferenca { get; set; }
}
|
No formulário Windows Forms temos o seguinte código:
using System; using System.Windows.Forms;
namespace WF_KapreKar
private void TxtNumero_KeyPress(object
sender, KeyPressEventArgs e)
private void BtnVerificar_Click(object sender, EventArgs e)
foreach (var resultado in resultados)
private void BtnLimpar_Click(object sender, EventArgs e) |
O código acima somente permite o usuário informar valores numéricos com 4 digitos e chama o método Kaprekar() da classe Calculo: Calculo.Kaprekar(numero);
"Em outras
investigações, descobriu-se que o mesmo fenômeno ocorre quando, em vez de
começar com quatro dígitos, começa com três.
Vamos tentar com o número 574?
754 - 457 = 297
972 - 279 = 693
963 - 369 = 594
954 - 459 = 495
954 - 459 = 495
Como se pode ver, o "número mágico" neste caso é 495.
E não, isso não acontece em outros casos: somente com números de três ou quatro
dígitos (pelo menos de 2 a 10 dígitos, que é o que foi testado)"
Acessado em 28/08/2019 - https://bit.ly/32cXxqG
Executando o projeto teremos o seguinte resultado:
Pegue o código do projeto aqui : WF_KapreKar.zip
"Porque o
Senhor é justo, e ama a justiça; o seu rosto olha para os retos."
Salmos 11:7
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Tratando com Números Complexos - Macoratti
C# - Gerando números aleatórios - Macoratti
C# - Resolvendo 10 problemas de matemática em uma ... - Macora
C# - Números de Armstrong - Macoratti.net
C# - Convertendo Números para valores Reais em extenso