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

Tarea #2 [solución]

Inversión de los dígitos de un número

      Utilice el programa de la tarea programada anterior para contruir otro programa que reciba números de pantalla y los grabe de vuelta, con sus dígitos al derecho y al revés. Por ejemplo, si su programa recibiera de entrada 12345 y 777899, devuelta grabaría esas mismos número, y también 54321 y 998777.

      Para esta tarea programada usted debe enviarme estos archivos:

  1. Tp2cin.java
  2. CARNET.docx

      En el documento CARNET.docx deben describir su experiencia de aprendizaje para completar esta tarea. Explique qué hizo, cómo lo hizo y por qué lo hizo. En especial, es importante que mencionen por qué escogieron las instrucciones que incluyeron y cuáles fueron las dificultades que enfrentaron. Recuerde: agregue su algoritmo dentro del bloque marcado "{ *** RELLENE CON SU ALGORITMO *** }"... ¡No modifique ninguna otra parte del programa!

Consulta:
Cuando el numero a invertir termina en cero, como por ejemplo 1230, el programa retorna 321, esto porque ignora los ceros a la izquierda de un número. Necesito corregir esto, ¿o lo puedo dejar así?
Respuesta:
Es posible eliminar este detalle, pero se sale de los alcances de esta tarea. Mejor dejalo así.
 
Consulta:
Resulta que haciendo la tarea tengo varios problemas porque tendría que hacer unas restricciones, ya que si es un número sumamente grande (6278436289743285643725694378) el programa no me devuelve el número al revés ...
Respuesta:
Las computadoras tienen una capacidad finita de almacenamiento. Por eso, los números enteros almacenados en variables "int" deben tener menos de 10 dígitos. Tu numerotote tiene 41 dígitos, valor que rebasa el tamaño máximo que es posible almacenar en un "int":
- 6278436289743285643725694378
- 12345679.12345679.12345679.1
- http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html
Los valores tipo "long" tienen una capacidad más grande que los de tipo "int", pero siempre son limitados a un máximo: 9,223,372,036,854,775,807.
En esta tarea lo que importante es lograr que el algoritmo funcione con números enteros "int". Una forma de lograr que el programa funcione con números ultra-enormes requiere del uso de vectores.
- http://www.google.com/search?num=100&q=site%3Asun.com+java+array
No hace falta que tu programa funcione con numerómetros enormes.

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

/* Tp2cin.java  (c) 2009 adolfo@di-mare.com */

/**
    @(#)Tp2cin.java 2009
    Arrevesador de números enteros.
    @author Adolfo Di Mare <adolfo@di-mare.com>
*/

import java.io.*; // Clases para leer desde el teclado
import java.lang.Character; // isDigit()

/** Clase que contiene el programa principal {@code main()}. */
public class Tp2cin {

    /** Lee un número de {@code CIN}.
      * Se salta los caracteres no númericos antes del número.
      */
    public static int leeInt( BufferedReader CIN ) {
        int num = 0; char ch;
        try {
            do { // se salta la basura antes del número
                ch = (char)CIN.read();
            } while ( ! Character.isDigit(ch) );

            while ( Character.isDigit(ch) ) {
                num = num*10 + (ch-'0');
                ch = (char)CIN.read();
            }
            return num;
        }
        catch (IOException e) {
            return 0;
        }
    }

    /** Programa principal.
      * OJO: tira la excepción <code>IOException</code> cuando {@code CIN} no funciona.
      */
    public static void main( String args[] ) throws IOException {
        // CIN es el lector de la consola (teclado)
        BufferedReader CIN = new BufferedReader( new InputStreamReader(System.in) );
        System.out.print( "0 > 0\n" ); // Graba el 0 al derecho y al revés

        // Ciclo para efectuar todos los cálculos
        int alVerres, num = leeInt(CIN); // lee el nuevo valor
        while (num != 0) {
            // Aquí calcula alVerres
            {    
                /*******************************\
                *                              *
                *   RELLENE CON SU ALGORITMO   *
                *                              *
                \*******************************/
            }
            System.out.print( (alVerres) + " >\n"  );
            num = leeInt(CIN); // jala el siguiente #
        }

        CIN.close(); // Cierra la consola de lectura
        return;
    }  // main()

    /** Constructor por defecto.
      * {@code private} previene que la clase sea instanciada. */
    private Tp2cin() { super(); }
} // Tp2cin

/* EOF: Tp2cin.java */

Soluciones

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