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

Tarea #1 [solución]

Números de Armstrong

      Traduzca y compile este programa. Documente su experiencia. Explique qué hizo, cómo lo hizo y por qué lo hizo. Para trabajar use el ambiente de desarrollo DrJava, disponible en http://www.DrJava.org/ junto con la herramienta de visualización de la ejecución Jeliot.

// Armstrong.cpp (C) 2010  adolfo@di-mare.com

/** \file  Armstrong.cpp
    \brief Traducción de \c Armstrong.java.
    Contiene todos los componentes principales de un algoritmo:
    - Secuenciación
    - Asignación y expresiones
    - Decisiones if()
    - Ciclos for(;;) y while()
    - Uso de vectores o matrices
    - Subrutinas y parámetros

    \author Adolfo Di Mare <adolfo@di-mare.com>
    \date   2010
*/

#include <iostream>  // cout

void esArmstrong( int N, const int VAL[] , bool res[] );

/** Determina si una lista de números son de Armstrong. */
int main( int argc , char* argv[] ) {
    int VEC[] = { 456 , 9 , 555 , 370 , 371 , 12 , 407 , 0 , 1  };
    const int DIM = ( sizeof(VEC) / sizeof(VEC[0]) );
    bool *B = new bool[DIM]; // vector paralelo a VEC[]
    esArmstrong( DIM , VEC , B );
    cout << "\nNúmeros de Armstrong:\n";
    for ( int i=0; i<DIM; ++i ) {
        if ( B[i] ) {
            cout << VEC[i] << "\n";
        }
    }
    return 0;
}

/** Retorna <code> res[i]==true </code> si \c VAL[i] es un número de Armstrong.
    - 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:
      <PRE>
              3    3    3
      153 == 1  + 5  + 3  == 1^3 + 5^3 + 3^3 == 1 + 125 + 27
      </PRE>
    - Falla si <code> DIM(VAL) > DIM(res) </code> <br>
      <code>#define DIM(VEC) ( sizeof(VEC) / sizeof(VEC[0]) )</code>
*/
void esArmstrong( int N, const int VAL[] , bool res[] ) {
    int numero, suma, digito, temp;

    for ( int i=0; i<N; ++i ) {
        numero = VAL[i];   // recuerda el número
        temp   = VAL[i];   // le saca todos los dígitos
        suma   = 0;
        while ( temp != 0 ) {       // suma de dígitos
            digito = temp % 10;     // al cubo
            suma   = suma + (digito * digito * digito);
            temp   = temp / 10;
        }
        if ( suma == numero ) {
            res[i] = true;
        }
        else {
            res[i] = false;
        }
    }
}

// Armstrong.cpp

Visualización de la Ejecución con Jeliot
1) Jale el Jeliot
2) Jale el programa de Armstrong
3) Ejecución Jeliot

1) Jale el Jeliot
- http://cs.joensuu.fi/jeliot/
- Seleccione "Java Web Start"
- Abra el programa [Java(TM) Web Start Launcher]
  - Se descarga jeliot.njlp
  - Web Start inicia la aplicación y jala el resto del programa
  - Advertencia de seguridad - Firma digital
    - [Ejecutar]

2) Jale el programa de Armstrong
- En el hojeador (Mozilla, Explorer, Opera, etc.)
- http://www.di-mare.com/adolfo/cursos/2009-2/Lab01.java.txt
  - Seleccione todo ( Select All )
  - Copiar          ( Copy       )
- En Jeliot
  - Seleccione todo ( Select All )
  - Pegar           ( Paste      )
  - Guardar         ( Save       )
  - Nombre de archivo [Lab01.java]
    [Guardar]

3) Ejecución Jeliot
- Compilar
- Animar
- Velocidad de Animación
  [----------+---------]
  - Pausa
  - Rebobinar
  - etc.

 

Entrega de la tarea

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Modalidad: Individual

 

Políticas de Corrección de Tareas

  1. La falta de cualquier especificación debe ser castigada fuertemente.
  2. Correcta indentación del código fuente.
  3. Correcto espaciado del código fuente.
  4. Código fuente escrito de manera que se legible y claro.
  5. Uso de indentificadores significativos.

Soluciones

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