|
|||||||
|
|
|
|||||
|
|
|||||||
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
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
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