Crie um programa e um algoritmo que leia um número e informe se ele é ou não um número feliz
Fala galera do Show Delphi, tudo beleza?
Hoje vamos ver como mostrar programas que verificam se um número é ou não um número feliz na matemática.
Caso você queria saber mais sobre a definição de número feliz segundo a matemática, recomendo a leitura do post específico sobre o assunto no site Giovani Da Cruz:
O que é um número feliz na matemática?
Agora vamos as códigos!!!
Exemplo de resposta em Pascal /Delphi / Lazarus
(*
Criado pelo professor Giovani Da Cruz
https:// giovanidacruz.com.br
*)
program NumeroFeliz;
uses
SysUtils;
function CalcularSomaDosQuadrados(n: Integer): Integer;
var
soma, digito: Integer;
begin
soma := 0;
while n > 0 do
begin
digito := n mod 10;
soma := soma + (digito * digito);
n := n div 10;
end;
CalcularSomaDosQuadrados := soma;
end;
function EstaNoArray(const numero: Integer; const arr: array of Integer): Boolean;
var
i: Integer;
begin
for i := Low(arr) to High(arr) do
begin
if arr[i] = numero then
begin
EstaNoArray := True;
Exit;
end;
end;
EstaNoArray := False;
end;
function EhNumeroFeliz(n: Integer): Boolean;
var
numerosVistos: array of Integer;
begin
SetLength(numerosVistos, 0); // Inicializa o array vazio
while (n <> 1) and (not EstaNoArray(n, numerosVistos)) do
begin
// Adiciona o número atual ao array
SetLength(numerosVistos, Length(numerosVistos) + 1);
numerosVistos[High(numerosVistos)] := n;
n := CalcularSomaDosQuadrados(n);
end;
EhNumeroFeliz := (n = 1);
end;
var
numero: Integer;
begin
Write('Digite um número: ');
Readln(numero);
if EhNumeroFeliz(numero) then
Writeln(numero, ' é um número feliz!')
else
Writeln(numero, ' não é um número feliz.');
Readln;
end. |
(*
Criado pelo professor Giovani Da Cruz
https:// giovanidacruz.com.br
*)
program NumeroFeliz;
uses
SysUtils;
function CalcularSomaDosQuadrados(n: Integer): Integer;
var
soma, digito: Integer;
begin
soma := 0;
while n > 0 do
begin
digito := n mod 10;
soma := soma + (digito * digito);
n := n div 10;
end;
CalcularSomaDosQuadrados := soma;
end;
function EstaNoArray(const numero: Integer; const arr: array of Integer): Boolean;
var
i: Integer;
begin
for i := Low(arr) to High(arr) do
begin
if arr[i] = numero then
begin
EstaNoArray := True;
Exit;
end;
end;
EstaNoArray := False;
end;
function EhNumeroFeliz(n: Integer): Boolean;
var
numerosVistos: array of Integer;
begin
SetLength(numerosVistos, 0); // Inicializa o array vazio
while (n <> 1) and (not EstaNoArray(n, numerosVistos)) do
begin
// Adiciona o número atual ao array
SetLength(numerosVistos, Length(numerosVistos) + 1);
numerosVistos[High(numerosVistos)] := n;
n := CalcularSomaDosQuadrados(n);
end;
EhNumeroFeliz := (n = 1);
end;
var
numero: Integer;
begin
Write('Digite um número: ');
Readln(numero);
if EhNumeroFeliz(numero) then
Writeln(numero, ' é um número feliz!')
else
Writeln(numero, ' não é um número feliz.');
Readln;
end.
Obs:
Se você tiver problemas com a acentuação, utilize UTF8ToAnsi nos comandos Write para corrigir.
Explicação
- Programa Principal (
NumeroFeliz
)
- O programa começa com a declaração
program NumeroFeliz;
.
- Isso define o nome do programa como “NumeroFeliz”.
- Função
CalcularSomaDosQuadrados
- A função
CalcularSomaDosQuadrados
é definida para calcular a soma dos quadrados dos dígitos de um número inteiro.
- Ela recebe um número inteiro
n
como parâmetro.
- Dentro da função, uma variável
soma
é inicializada como 0 para acumular a soma.
- Em seguida, um loop
while
é usado para percorrer os dígitos do número n
.
- A cada iteração, o último dígito de
n
é obtido usando a operação n mod 10
, e o quadrado desse dígito é adicionado à variável soma
.
- O dígito é removido de
n
usando n div 10
.
- O loop continua até que todos os dígitos tenham sido processados, e a função retorna o valor de
soma
.
- Função
EhNumeroFeliz
- A função
EhNumeroFeliz
verifica se um número é feliz ou não.
- Ela recebe um número inteiro
n
como parâmetro.
- Uma variável
numerosVistos
é inicializada como um conjunto vazio (um conjunto é usado para armazenar números únicos que já foram vistos).
- Dentro de um loop
while
, o código verifica duas condições: se n
não é igual a 1 e se n
não está no conjunto numerosVistos
. Se ambas as condições forem verdadeiras, o loop continua.
- Dentro do loop,
n
é adicionado ao conjunto numerosVistos
para rastrear que este número já foi processado.
- O número
n
é então atualizado chamando a função CalcularSomaDosQuadrados(n)
, que retorna a soma dos quadrados dos dígitos de n
.
- O loop continua até que
n
seja igual a 1 ou até que n
seja um número que já foi visto (indicando um ciclo infinito). Nesse ponto, o loop para.
- A função retorna
True
se n
for igual a 1, o que significa que o número é feliz, e False
caso contrário.
- Variáveis e Saída de Dados
- Dentro do programa principal, uma variável
numero
é declarada para armazenar o número que o usuário deseja verificar.
- O programa solicita que o usuário digite um número usando
Write('Digite um número: ')
e lê o valor digitado na variável numero
.
- Em seguida, ele chama a função
EhNumeroFeliz(numero)
para verificar se o número é feliz ou não.
- Com base no resultado, o programa exibe a mensagem apropriada usando
Write
.
- Fim do Programa
- O programa aguarda a tecla “Enter” ser pressionada antes de ser encerrado usando
Readln;
. Isso permite que o usuário veja a saída antes de fechar o programa.
Em resumo, o código em Pascal define funções para calcular a soma dos quadrados dos dígitos e verificar se um número é feliz. Ele solicita um número ao usuário, realiza a verificação e exibe o resultado. O conjunto numerosVistos
é usado para evitar ciclos infinitos ao verificar números não felizes.
Para ver este algoritmo em outras linguagens, veja o post n site Giovani Da Cruz:
Crie um programa e um algoritmo que leia um número e informe se ele é ou não um número feliz
Beleza pessoal? Espero que tenham gostado.
Deixe nos comentários as suas dúvidas e sugestões!
Um abraço e até o próximo post. Valeu!
-
Giovani Da Cruz
-
296 views
- 0 comentários
- 19 de agosto de 2023
Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!
Posts Relacionados - Continue Aprendendo