Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Manipulación Numérica

Ya con los conceptos de sentencias se selección e iterativas, podemos solucionar problemas típicos como :

Dado un número , hacer los siguientes algoritmos :

a ) Contar la cantidad de dígitos
b ) Sumar los dígitos
c ) Invertir dicho número

Para resolver estos problemas, se sigue un esquema similar en todos los casos. Este consiste en ir iterativamente dividiendo por 10 un número dado, guardando el resultado entero y el resto.
Luego en cada iteración, se manipula una de las dos variables o ambas, para que mediante asignaciones simples, se cumpla con algún algoritmo planteado.

ESQUEMA EJEMPLO :

NUM = 174

174 : 10  = 17  --> ( 17 , 4 )
 17 : 10 = 1 --> ( 1  , 7 )
  1 : 10 = 0 --> ( 0  ,  1 )

* nota : (div_entera , resto)

Podemos observar que :

a ) Se realizan divisiones, hasta que div_entera sea cero.
b ) Sucesivamente a partir del resto se obtiene los dígitos 4,7,1.
c ) Se observa que div_entera toma los valores 17 , 1 , 0.

Applet para ver las divisiones

Podemos concluir que :

a) La condición del ciclo va a ser que la variable div_entera sea distinta de cero --> MIENTRAS (div_entera != 0) HACER

b ) Con la variable resto, vamos a realizar las operaciones, ya que nos entrega todos los dígitos del número.

c ) div_entera toma el valor inicial de 174, para completar la serie : 174 , 17 , 1 , 0

Por lo tanto el algoritmo básico para este tipo de problemas es :


Leer num
div_entera = num  
MIENTRAS (div_entera !=  0) HACER
    resto = RESTO(div_entera / 10)
    div_entera = div_entera / 10
FIN MIENTRAS

Ejemplo : Sumar y contar los dígitos del número.

Declaramos una variable sum para que en cada iteración se incremente según la fórmula : sum = sum + resto y también una variable contador, que se incremente en 1, por cada división que se haga.

Leer num
div_entera = num
sum = 0
contador = 0  
MIENTRAS (div_entera !=  0) HACER

    resto = RESTO(div_entera / 10)
    div_entera = div_entera / 10

    sum = sum + resto
    contador = contador + 1

FIN MIENTRAS

Applet para ver las variables



Programa en Java

import java.io.*;
class manipnum
{
    public static void main(String Arg[ ]) throws IOException
    {
        int num,div_entera,resto,contador,sum;
         
        BufferedReader in = new BufferedReader(new 
            InputStreamReader(System.in));

        System.out.print("Ingrese numero : ");
        num = Integer.parseInt(in.readLine( ));
             
        div_entera = num;
        sum = 0;
        contador = 0;
        while (div_entera != 0)
        {
            resto = div_entera % 10;
            div_entera = div_entera / 10;

            sum += resto;
            contador++;
        }
    
        System.out.println("suma : " + sum);
        System.out.println("contador : " + contador);
    }
}
Bajar archivo

Salida a pantalla





Invertir un número
Algoritmo

leer num
num_inv = 0
div_entera = num
resto_div = 0
mientras (div_entera != 0) hacer
    resto_div  = div_entera % 10
    div_entera = div_entera / 10
    num_inv   = num_inv * 10 +  resto_div
fin mientras
24352 -->  25342       

* Nota :   num : divisor = (div_entera , resto)

24352 : 10 = (2432 , 2)  --> 0 * 10  + 2 = 2
 2435 : 10 = (243 , 5)  -->  2 * 10 + 5 = 25
  243 : 10 = (24 , 3)  -->  25 * 10  + 3 = 253
   24 : 10 = (2 , 4)  --> 253 * 10  + 4 = 2534
    2 : 10 = (0 , 2)  --> 2534 * 10 + 2 = 25342 
 
import java.io.*;
class InvNum
{
    public static void main(String Arg[ ]) throws IOException
    {
        int num , num_inv , div_entera , resto_div;
         
        BufferedReader in = new BufferedReader(new 
            InputStreamReader(System.in));

        System.out.print("Ingrese numero : ");
        num = Integer.parseInt(in.readLine( ));
        num_inv = 0;    
        div_entera = num;
        resto_div = 0;
        while (div_entera != 0)
        {
            resto_div = div_entera % 10;
            div_entera = div_entera / 10;

            num_inv = num_inv * 10 + resto_div;
        }
    
        System.out.println("El numero " + num + " invertido es " + num_inv);
        
    }
}
Bajar archivo
Ej : 

    Ingrese numero : 12345
    El numero 12345 invertido es 54321




Eliminar un dígito
Algoritmo

Leer num, x	   // x : dígito a eliminar
div_entera = num
resto_div = 0
aux = 0
mult = 1
mientras (div_entera != 0) hacer
    resto_div  = div_entera % 10
    div_entera = div_entera / 10

     si ( resto_div != x) entonces
         aux = aux + (resto_div * mult)
         mult = mult * 10
     fin si

fin mientras
import java.io.*;
class ElimDig
{
    public static void main(String Arg[ ]) throws IOException
    {
        int num , x , aux , mult , div_entera , resto_div;
         
        BufferedReader in = new BufferedReader(new 
            InputStreamReader(System.in));

        System.out.print("Ingrese numero : ");
        num = Integer.parseInt(in.readLine( ));
        
        System.out.print("Ingrese digito a eliminar : ");
        x = Integer.parseInt(in.readLine( ));
                
        div_entera = num;
        resto_div = 0;
        aux = 0;
        mult = 1;
        
        while (div_entera != 0)
        {
            resto_div = div_entera % 10;
            div_entera = div_entera / 10;

            if (resto_div != x)
             {    
                aux += (resto_div * mult);
                mult *= 10;
            }

        }
    
        System.out.println("El numero " + num + ", eliminando el digito " + x + " es igual a " + aux);
        
    }
}
Bajar archivo
Ej : 

    Ingrese numero : 12345
    Ingrese digito a eliminar : 2
    El numero 12345, eliminando el digito 2 es igual a 1345


TAREA DE AYUDANTIA (SECCION PROF.CACERES)  : CONSISTE EN LEER UN NUMERO POR TECLADO Y UN DIGITO A 
ELIMINAR, PARA LUEGO INVERTIR DICHO NUMERO SIN EL DIGITO ELEGIDO. (Fijarse en los dos ejemplos anteriores).

Ej :
    Ingrese numero : 12345
    Ingrese digito a eliminar : 2
    El numero 12345 invertido, sin el digito 2 es igual a 5431


Ejercicios

1) Realizar programa en java que

a) Sume los digitos de un número

b) Determine si un número es perfecto ; o sea que la suma de los divisores del número , sean igual al número.
Ej : 6 = 1 + 2 + 3.

c) Determine si un número es palíndrome ; o sea que si se invierten los dígitos de un número, resulta el mismo número. Ej : 1221 , 56765 , 33 , 353

d) Determine los n primeros números perfectos

e ) Determine cuántos números palíndromos existen entre 10 y 32000

2 ) Resolver los problemas de manipulación numérica, para números enteros negativos, haciendo los mínimos cambios posibles.

3 ) Ordenar los dígitos de un número, en forma creciente y decreciente, usando funciones de manipulación numérica.
Ej : num = 907035 --> 3579 , 975300