Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1402
I Semestre 1998
[<=] [home] [<>] [\/] [=>]
CI-1402 Organización de Lenguajes de Programación

Quiz #1 [solución]

Convenciones de Programación

      Reescriba el programa Armstrong.pas, que se muestra a continuación, de acuerdo a las Convenciones de Programación descritas en [DiM­88a].

PROGRAM Armstrong;
{ Determina cuantos numeros son de Armstrong, desde 1
  hasta numero. Un numero es de Armstrong si la suma de
  los digitos que lo componen al cubo es igual al
  numero. Por ejemplo 153 es un numero de Arms.}

CONST  n = 3000;

VAR
numero, suma,
digito, temp : INTEGER;

begin
  WriteLn('Numeros encontrados (1 .. 3000)');
  WriteLn(' que son de Armstrong:');
  WriteLn;
  for numero:=1 to n do begin
    suma:=0;
    temp:=numero;
     WHILE temp <> 0 DO BEGIN  { suma de digitos }
   digito:= temp MOD 10;      { al cubo }
   suma:= suma+(digito*digito*digito);
   temp:= temp DIV 10
    END;
IF suma = numero then
      WriteLn(numero,' Suma de su digitos al cubo ', suma);
  end;{ FOR }
  ReadLn;
END. { Armstrong }
Figura 1: Armstrong.pas

[DiM­88a] Di Mare, Adolfo: Convenciones de Programación para Pascal, Reporte Técnico ECCI­01­88, Proyecto 326­86­053, http:// www.di-mare.com /adolfo/p/ convpas.htm, Escuela de Ciencias de la Computación e Informática (ECCI), Universidad de Costa Rica (UCR), 1988.

PROGRAM Armstrong;
{ RESULTADO
  Determina cuantos números son de Armstrong, desde 1 hasta N.
  - Un número es de Armstrong si la suma de los dígitos que lo
    componen elevados al cubo es igual al número.
  - Por ejemplo 153 es un número de Armstrong porque
           3    3    3
    153 = 1  + 5  + 3  = 1^3 + 5^3 + 3^3  }

CONST
  N = 3000;
VAR
  numero, suma,
  digito, temp : INTEGER;
BEGIN { Armstrong }
  Write('Números encontrados (1 .. ');
  WriteLn(N:1, ') que son de Armstrong:');
  WriteLn;
  FOR numero := 1 TO N DO BEGIN
    suma := 0;
    temp := numero;
    WHILE temp <> 0 DO BEGIN     { suma de dígitos }
      digito := temp MOD 10;     { al cubo         }
      suma   := suma + (digito * digito * digito);
      temp   := temp DIV 10;
    END;
    IF suma = numero THEN BEGIN
      WriteLn(numero,' Suma de sus dígitos al cubo ', suma);
    END;
  END;
END. { Armstrong }
Figura 2: Versión corregida de Armstrong.pas

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 1998
Derechos de autor reservados © 1998
[home] <> [/\]