Publicidad

Introducción:

Cada que escribo un post de programación, tengo la sensación de quedarme corta a la hora de la explicación, creo que podría dar un mejor desarrollo de la solución pero sencillamente no encuentro las palabras adecuadas para expresarlo, aun así intentare explicar la solución de este problema lo mejor que pueda.

Problema:

Dado un número entero x ingresado por el usuario, elimine de el todos los dígitos mayores a 5. Si x=15682=>152

 

un número entero x, elimine de el todos los dígitos mayores a 5 - Programación basica - ilustración

Solución:

Comencemos probando que retornaría si el valor del número fuera otro.

Primero:

Si el número ingresado por el usuario, es un número entero n:

donde n = 101
retorna = 101

donde n = 123456
retorna = 12345

donde n = 987
retorna = 0

donde n = 575757
retorna = 555

Segundo:

Composición de los números, antes de abarcar más en la solución, recordemos que los números se componen en: unidad, decena, centena,  unidad de mil, decena de mil etc. Donde el valor de cada una de las cifras de un número depende de la posición que ocupa.

Composición de los números - ¿Cómo contar los los números? - ilustración (Ney)

También recordemos que los números se forman empezando desde la unidad que esta a la derecha; pero se lee de derecha a izquierda y se lo describe de izquierda a derecha.

Podemos apreciar que recibimos un número al que debemos dividirlo en pedacitos de unidades, por decirlo de alguna forma. Ahora, ¿Cómo separamos los dígitos de un número entero?, bueno podemos dividir el número entre 10, en programación hay dos tipos de divisiones, con una obtenemos el resto que es Mod y con la otra el cociente que es Div.

El proceso de la división seria así.

Primera tanda:
Si n=15682
n div 10 = 1568
n mod 10 = 2

Segunda tanda:
Si n= 1568
n div 10 = 156
n mod 10 = 8

Publicidad

Tercera tanda:
Si n= 156
n div 10 = 15
n mod 10 = 6  …y así sucesivamente hasta que n se vuelva cero.

Tercero:

Preguntamos si cada uno de los números es mayor que cinco.

Siendo n=15682

Primera tanda:
2>5 —>no
entonces guardamos 2

Segunda tanda:
8>5—>si
entonces no guardamos

Tercera tanda:
6>5—>si
entonces no guardamos

Cuarta tanda:
5>5—>no
entonces guardamos 5

Quinta tanda:
1>5—>no
entonces guardamos 1

Cuarto:

Ya sabemos como fragmentar en unidades un número, pero ¿Cómo las unimos para formar otro número?. Para unir los dígitos que no son mayores a cinco, hay que multiplicar por 10 elevado a un exponente que empiece en cero.

 Formación de un número a partir de dígitos sueltos.

Si n=15682
i es una variable que incrementara.
n1 es una variable para guardar el nuevo número.

Este paso solo se ejecuta cuando los números sean menores o iguales a 5.

Primera tanda:

Obteniendo el 2
entonces n1=2*10^i + n1
i=i+1

Segunda tanda:
Obteniendo el 5
entonces n1=5*10^i + n1
i=i+1

Tercera tanda:
Obteniendo el 1
entonces n1=1*10^i + n1
i=i+1

Para poder ver todo el proceso unificado y en orden aquí les dejo el pseudocódigo.

Donde:

  • a es la variable que contiene la unidad de dígito separado.
  • i es la variable que incrementa.
  • n1 en esta variable se almacenan los dígitos no mayores a cinco.
  • n variable que contiende el número entero ingresado.
  a=0
  i=0
  n1=0
  mientras(n>0){
    a=n mod 10
    n=n div 10
    si(5>=a){
      n1=a*10^i+n1
      i=i+1
    }
  }
  retorna n1
}

Podemos probar que el código funciona directamente, aquí se los dejo en c++ y abajo de este lo dejo escrito en java.

#include <iostream>
#include <math.h> 
using namespace std;


int eliminador_de_N_MayoresA5(int n){
  int a,i,n1;
  a=0;
  i=0;
  n1=0;
  while(n>0){
    a=n%10;
    n=n/10; 
    if(5>=a){
      n1=a*pow(10,i)+n1;
      i++;
    }
  }
  return n1;
}

int main(){
  int n;
  cout<<"Introduzca el Número :";
  cin >> n;
  
  cout << "The result is: " << eliminador_de_N_MayoresA5(n)<<"\n";
  return 0;
}

Código en java.

import java.util.Scanner;

public class EliminarMque5{
  public static void main(String[] args){
    int a,i,n1;
    a=0;
    i=0;
    n1=0;
    Scanner teclado = new Scanner(System.in);
    System.out.print( "Introduzca número: " );
    int n = teclado.nextInt();
    while(n>0){
      a=n%10;
      n=n/10; 
      if(5>=a){
        n1=a* (int) Math.pow(10,i)+n1;
        i++;
      }
    }
    System.out.println(n1);
  }
}

Si encuentras algún error por favor dejalo en los comentarios, para que pueda rectificar el ejercicio.

 

Publicidad