Pascal/Turbo Pascal - PASCAL-APRENDIZ-NÚMEROAMSTRONG

 
Vista:
Imágen de perfil de Luciano

PASCAL-APRENDIZ-NÚMEROAMSTRONG

Publicado por Luciano (2 intervenciones) el 02/10/2022 00:03:34
Hola Buenas, Necesito ayuda con pascal ya que estoy adentrándome en esto de de la programación y entiendo mucho la lógica pero no aprendí bien los conceptos y en mi universidad el examen final es de pascal
PASCAL-IMAGE

Como pueden ver en la imagen ahí esta la consigna que me dieron y la forma que trate de hacer, se pueden dar cuenta que mi nivel de programación es ultra básico y estoy tratando de aprender y si es rápido mejor, sé que debe haber algún método para que cuente automático cada uno de los dígitos porque lo desconozco ya que no sé del código y no es didáctico tampoco ni hay mucha info en internet al ser tan estricto, si me ayudan y explican un poco nada más sería de gran ayuda desde ya gracias.

voy a estar subiendo más consignas de la guía que me dificulten para ver si recibo una respuesta en algún momento y ver si puedo mejorar mis métodos acá mi gmail por si quieren contactarme.

[email protected]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 287
Oro
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

PASCAL-APRENDIZ-NÚMEROAMSTRONG

Publicado por dario (87 intervenciones) el 02/10/2022 04:23:24
Hola, espero esto te sirva.
Salu2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Armstrong;
var
    x,r,n,original:integer;
begin
    write('Digite un numero de 3 cifras: ');
    readln(original);
    n:=original;
 
    while n >= 1 do begin
        x:=n mod 10;
        r:=r + x * x * x;
        n:=n div 10;
    end;
 
    if r = original then
        writeln('El numero es Armstrong')
    else
        writeln('El numero no es Armstrong');
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

PASCAL-APRENDIZ-NÚMEROAMSTRONG

Publicado por juanba (40 intervenciones) el 10/10/2022 17:59:40
Hola.
He mirado tu programa y quizá, si quitas el último asterisco en la línea del cálculo de Resultado (el que está entre el último dígito3 y el punto y coma), te compila mejor.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

PASCAL-APRENDIZ-NÚMEROAMSTRONG

Publicado por juanba (40 intervenciones) el 10/10/2022 21:13:23
Hola otra vez.
Sigo revisando tu programa porque la verdad es que tiene muchos puntos de interés para alguien que está aprendiendo a programar en Pascal y tengo otro par de comentarios que hacerte:

- Para que compile tu programa, además de la corrección descrita en mi comentario anterior, tienes que quitar el punto y coma (semicolon) al final de la línea
1
writeln('es un número Armstrong')
. La cláusula else que viene después no suele estar precedida por un punto y coma.

- El programa quedaría más elegante si concentras en una función el cálculo de determinar si un número es Armstrong o no. Algo así como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Program LoQueSea;
var Original: integer;
 
function CuboDe(Numero: integer): integer;
begin
  CuboDe := Numero * Numero * Numero;
end;
 
function EsArmstrong(Numero: integer): boolean;
var digito1, digito2, digito3: integer;
begin
  digito1 := Numero mod 10;             {Dígito de menor peso}
  digito2 := (Numero div 10) mod 10;     {Dígito intermedio}
  digito3 := (Numero div 100) mod 10;     {Dígito de mayor peso}
 
  EsArmstrong := Numero = (CuboDe(digito1) + CuboDe(digito2) + CuboDe(digito3));
end;
 
begin                                     {Programa lo que sea}
  writeln;
  writeln('Ingrese un número entero entre 1 y 999');
  readln(Original);
  if EsArmstrong(Original) then
    writeln('¡Qué casualidad! El número ', Original, ' es Armstrong.')
  else
    writeln('Lo siento. El número ', Original, ' tampoco es Armstrong.');
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

PASCAL-APRENDIZ-NÚMEROAMSTRONG

Publicado por juanba (40 intervenciones) el 11/10/2022 08:08:12
Y ya que tenemos una función para decidir si un número es Armstrong, la podemos emplear para encontrar todos los números que cumplen la condición. aquí te propongo un procedimiento MostrarTodos que lo hace:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Program LoQueSea;
 
function CuboDe(Numero: integer): integer;
begin
  CuboDe := Numero * Numero * Numero;
end;
 
function EsArmstrong(Numero: integer): boolean;
var digito1, digito2, digito3: integer;
begin
  digito1 := Numero mod 10;             {Dígito de menor peso}
  digito2 := (Numero div 10) mod 10;    {Dígito intermedio}
  digito3 := (Numero div 100) mod 10;   {Dígito de mayor peso}
 
  EsArmstrong := Numero = (CuboDe(digito1) + CuboDe(digito2) + CuboDe(digito3));
end;
 
procedure MostrarTodos;
var n: integer;
begin
  writeln('Los números Armstrong son: ');
  for n := 1 to 999 do
    if EsArmstrong(n) then
     write(n:5);
  writeln;
end;
 
begin                                     {Programa lo que sea}
  writeln;
  MostrarTodos;
end.

Y aquí va una versión de MostrarTodos un poco más elaborada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure MostrarTodos;
var n: integer;
    HaSalidoElPrimero: boolean;
begin
  HaSalidoElPrimero := false;
  for n := 1 to 999 do
    if EsArmstrong(n) then
      if HaSalidoElPrimero then
        writeln('El siguiente es: ', n)
      else begin
        writeln('El primer número Armstrong es: ', n);
        HaSalidoElPrimero := true;
      end;
end;

La respuesta del programa a las dos versiones es:

Numeros_Armstrong_2022-10-11_07-40-13

Y nada más por hoy. Queda al menos un problema interesante: Cómo extender el cálculo de Armstrongicidad a enteros de cualquier número de dígitos (dentro de las limitaciones del compilador y el sistema operativo). Para otro día.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar