Foro de elhacker.net

Programación => Java => Mensaje iniciado por: enrique8923 en 22 Abril 2009, 07:25 am



Título: Ejercicio Avanzado usando Java (POO)
Publicado por: enrique8923 en 22 Abril 2009, 07:25 am
Amigos, soy un studiante de programacion, y tengo un problema muy dificil, y quisiera saber de algunas propuestas de solucion yaque ustedes son programadores avanzados de Programacion Orientada a Objetos (POO) con lenguaje Java.

El problema es el siguiente.
*) Programa que lea un numero y que se visualize lo siquiente:
   - Cantidad de digitos.
   - Suma de sus digitos.
   - Producto de sus digitos.
   - Digito izquierdo
   - Digito derecho.
   - Digito menor.
   - Digito mayor.
   - Numero invertido.
-------------------------------------------
tomen en cuenta q no hay limite de cantidad, puede ser cualquier numero con n digitos, digamos 5667 o puede ser 232, entienden?.
Bueno de antemano muchisimas gracias por su ayuda, cualquier propuesta sera bienvenida, y si tienen algun link de ejercicios parecidos a estos para yo poder practicar, se los agradeceria mucho.

Cuidense.


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: leogtz en 22 Abril 2009, 08:09 am
El ejercicio lo resolví en C, de algo te servirá:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
    char buffer[30];
    signed int numero, ndigitos, suma = 0, producto = 1;
    printf("Introduzca numero : ");
    scanf("%i", &numero);
    ndigitos = strlen(itoa(numero, buffer, 10));
    signed int digitos[ndigitos];
    for(signed int i = 1; i <= ndigitos; i++)
    {
        digitos[i] = numero % 10;
        numero /= 10;
    }
    for(signed int i = 1; i <= ndigitos; i++)
    {
        suma += digitos[i];
    }
for(signed int i = 1; i <= ndigitos; i++)
    {
        producto *= digitos[i];
    }
    printf("\n\tCantidad de digitos : %i", ndigitos);
    printf("\n\tSuma : %i", suma);
    printf("\n\tProducto de sus digitos : %i", producto);
    printf("\n\tDigito izquierdo : %i", digitos[sizeof(digitos)/sizeof(int)]);
    printf("\n\tDigito derecho : %i", digitos[1]);
    printf("\n\nNumero inverso : ");
    for(signed int i = ndigitos; i > 0; i--)
    {
        printf("%i", digitos[i]);
    }
    return 0;
}
Puedes sacarle provecho a los for para calcular las sumas y productos.

No te preocupes seguro que aqui te ayudarán bien, solo tienes que poner un poco de tu parte, poniendo lo que llevas de codigo.


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: Amerikano|Cls en 22 Abril 2009, 08:17 am
Aquí no se hacen tareas pero te voy a dar un ayudita  :P.

Si quieres obtener los digitos, basta con hacer un bucle en el que se tome el numero y se aplique módulo 10, para obtener el ultimo digito, luego tomas el numero inicial y lo divides por 10 para obtener los 2 primeros, y estos 2 serán los que pasen nuevamente por el bucle y asi sucesivamente hasta obtener todos los digitos:

Ej: 548.

------>548%10=8
------------------>548/10=54

Aquí ya se obtuvo el 8, y para obtener los demas basta con almacenar el 57 obtenido de la division en una variable, y repetir el proceso el ciclo  ;). Y ya con esto podrás solucionar todas las preguntas, basta pensar un poco más  ;).

salu2 y suerte.


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: Amerikano|Cls en 22 Abril 2009, 08:21 am
El ejercicio lo resolví en C, de algo te servirá:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
    char buffer[30];
    signed int numero, ndigitos, suma = 0, producto = 1;
    printf("Introduzca numero : ");
    scanf("%i", &numero);
    ndigitos = strlen(itoa(numero, buffer, 10));
    signed int digitos[ndigitos];
    for(signed int i = 1; i <= ndigitos; i++)
    {
        digitos[i] = numero % 10;
        numero /= 10;
    }
    for(signed int i = 1; i <= ndigitos; i++)
    {
        suma += digitos[i];
    }
for(signed int i = 1; i <= ndigitos; i++)
    {
        producto *= digitos[i];
    }
    printf("\n\tCantidad de digitos : %i", ndigitos);
    printf("\n\tSuma : %i", suma);
    printf("\n\tProducto de sus digitos : %i", producto);
    printf("\n\tDigito izquierdo : %i", digitos[sizeof(digitos)/sizeof(int)]);
    printf("\n\tDigito derecho : %i", digitos[1]);
    printf("\n\nNumero inverso : ");
    for(signed int i = ndigitos; i > 0; i--)
    {
        printf("%i", digitos[i]);
    }
    return 0;
}
Puedes sacarle provecho a los for para calcular las sumas y productos.

No te preocupes seguro que aqui te ayudarán bien, solo tienes que poner un poco de tu parte, poniendo lo que llevas de codigo.

Fuera de que fomentas la vagancia de los demas  >:(, veo que hay unas cosas en tu code que no son realmente lo esperado, ya que tu obtienes la longitud del numero con la funcion strlen, y de acuerdo a este creas el arreglo, y la escencia de todo es generarlo con operaciones básicas no crees :huh: :huh:.

salu2


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: leogtz en 22 Abril 2009, 08:24 am
Y tu fuera de que no usas el botón "Modificar".

Soy novato en C, por eso lo resolví de esa manera.


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: sapito169 en 23 Abril 2009, 04:03 am
 :laugh: :laugh: :laugh: :laugh:

es problema no es dificill mas bien es una broma  (no te molestes)


el truco no es usar funciones matematicas conplejas para dar la solucion todo lo contrario las soluciones mas sencillas logicas y cortas que se te puedan presentar son las mejores

comensemos que no necesitas calcular las cifras usando funciones matematicas eso es perdida de tiempo mejor usa la clase String(mientras mas clases conoscas que te hagan la tare por ti mejor)

para mostrarte como se ase tu tarea solo te resolvere las mas "sencillas"  :laugh: :laugh: tu lla ases las mas dificiles


Código:
//cantidad de digitos
    int cantCifras= txtnumero.getText().length();
    txtrespuesta.setText(""+cantCifras);

Código:
//suma de digitos

    int cont =0;
    for(int c=1;c<=txtnumero.getText().length();c++){
        System.out.print(c+" "+txtnumero.getText().charAt(c-1)+"\n");
        cont =cont +Integer.parseInt(txtnumero.getText().charAt(c-1)+"");
    }
    txtrespuesta.setText(cont+"");
    }



Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: enrique8923 en 14 Mayo 2009, 07:01 am
Hola, muchas gracias por sus respuestas, y sus recomendaciones.
-- Gracias  Leo Gutierrez , aun no se mucho el lenguaje C, pero es un lenguaje de programacion muy interesante, que puede que lo aprenda por mi mismo.

-- Gracias AmeRiK@nO, tu consejo me ayudo en la solucion del algoritmo, y cuando vi tu respuesta, pude darme cuenta que desde alli se hacia todo, bueno investigue mas, pero tu recomendacion fue el punto de partida.

-- Gracias sapito169, bueno esta chevere tu codigo y la recomendacion de usar metodos de String, pero el truco del algoritmo es ese, usar la matematica para crear el algoritmo, en lo personal, a mi me gusta hacer un algoritmo que funcione no solo en el JCreator, sino que tambien funcione con otros lenguajes, y como te daras cuenta, en general los algoritmos matematicos se aplican en todo, porque te muestran la logica del desarrollo del problema y aparte cualquier comprenderia la solucion del problema con el algoritmo, pero si yo uso metodos que no muchos conocen, no seria un algoritmo muy general, pero eso no quiere decir que tu algoritmo no sea bueno ni nada, solo que no todos conocen la tremenda cantidad de metodos del JCreator, pero tomare en cuenta tu consejo, de conocer mas metodos, eso me facilitaria la cosa a la hora de trabajar, puesto que en un trabajo no me pondria a pensar en crear un algoritmo, sino en aplicar un metodo que incluya ese algoritmo.

poreso la programacion orientada a objetos, creas tu clase, con atributos y metodos propios, y solo convocas el metodo con el algoritmo, y listo, es un metodo que conozco que contiene un algoritmo que conozco :).

aqui esta el desarrollo en POO.

=============CLASE===============
public class Numero {
   
   public int num;
   public static int digi=0,suma=0,ninver=0,pro=1,ndere=0,
                                      nizqui=0,menor=10,mayor=-1,resto=0;
                  
   public Numero(int num){
            
   this.num=num;
   Numero();
   }
   
public void Numero(){
      
      do{
   Resto();
   Producto();
   Suma();
   NDerecha();
   NInvertido();
   NMayor();
   NMenor();
   digi++;
                num/=10;
            }while(num>0);
      
            NIzquierda();
       }
   
public void Resto(){
      
         resto=num%10;
         
}
public static void Producto(){
      
   pro*=resto;
}
public static void Suma(){
      
   suma+=resto;
}
public static void NDerecha(){
      
   if(digi==0)
   ndere=resto;
}
public static void NIzquierda(){
      
   nizqui=ninver%10;
}
public static void NInvertido(){
      
   ninver=ninver*10+resto;
}
public static void NMayor(){
      
   if(resto>mayor)
     mayor=resto;
}
public static void NMenor(){
      
if(resto<menor)
   menor=resto;
    }      
}

=============PROCESAR============

void procesar(){
      
Numero a= new Numero(getN());
      
listado();
   
}
void listado(){
      
imprimir("Cantidad de Digitos: "+Numero.digi);
imprimir("Suma de digitos    : "+Numero.suma);
imprimir("Producto de digitos: "+Numero.pro);
imprimir("Digito Izquierdo   : "+Numero.nizqui);
imprimir("Digito Derecho     : "+Numero.ndere);
imprimir("Digito Menor       : "+Numero.menor);
imprimir("Digito Mayor       : "+Numero.mayor);
imprimir("Numero Invertido   : "+Numero.ninver);
      
}
int getN(){
return Integer.parseInt(txtNumero.getText());
  }
}



Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: juancho77 en 16 Mayo 2009, 02:07 am
jajaj dificil? Pobres los que programan compiladores, navegadores, mapas...


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: Myth.ck en 16 Mayo 2009, 03:04 am
jajaj dificil? Pobres los que programan compiladores, navegadores, mapas...

 :xD

La verdad era un algoritmo de entrenamiento, no era tan avanzado. Al menos hubiese estado bueno un algoritmo con arrays o matrices, eso si puedo creer que es algo avanzado. Pero capaz que enrique se está introduciendo en este lenguaje.


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: Aeros en 16 Mayo 2009, 06:58 am
pasa el numero a string y que uses esa clase para separar digitos y demas cosas (subtring,value off,etc)

si empiezas algo de codigo te ayudo, si no no:P




Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: pool666 en 8 Agosto 2012, 01:04 am
//RESUELTO POR GABRIEL PAUL HURTADO MATAMOROS
import java.util.*;
public class Principal {
    public static void main(String[] args)
    {
        System.out.print("Ingrese un numero entero:  ");
        Scanner leer=new Scanner(System.in);
        int num=Integer.parseInt(leer.nextLine());
        Operaciones oper=new Operaciones();
        oper.m=num;
        oper.canDigitos();
        oper.sumaDigitos();
        oper.productoDigitos();
        oper.digitoDerecho();
        oper.digitoIzquierdo();
        oper.digitoMayor();
        oper.digitoMenor();
        oper.numeroInvertido();
       
    }
}

//RESUELTO POR GABRIEL PAUL HURTADO MATAMOROS
public class Operaciones {
   static int m;
    void canDigitos()
         { 
             int n=m;
               int cont=0;
              while(n!=0)
                     {
                         if(n!=10)
                         {
                         n=(n-n%10)/10;
                         cont++;
                         }     
                     }
              System.out.println("El numero ingresado tiene : "+cont+"   cifras \n");
   
            }
   
    void sumaDigitos()
         {
             int n=m;
        int sum=0;
        while(n!=0)
              {
                  if(n!=0)
                      {
                          sum=sum+n%10;
                          n=(n-n%10)/10;
                      }
              }
        System.out.println("La suma de cifras del numero ingresado es:  "+sum+"\n");
    }
    void productoDigitos()
    {
        int n=m;
        int prod;
        System.out.println("CALCULANDO EL PRODUCTO DE DIGITOS");
        if(n!=0)
        {
            prod=1;
            while(n!=0)
           {
                 prod=prod*(n%10);
                 n=(n-n%10)/10;
                 
           }   
            System.out.println("El producto de digitos del numero ingresado es: "+prod+"\n");
        }
        else
        {
            System.out.println("El nuemro ingresado solo tiene un digito y  es: "+n+"\n");
        }
       
    }
     void digitoIzquierdo()
    {
        int n=m;
        System.out.println("CALCULANDO EL DIGITO IZQUIERDO");
        int di;
        if(n>=10 ||  n<=-10)
        {         
            while(n>=10 || n<=-10)
            {
                  n=(n-n%10)/10;
            }
           
            System.out.println("El digito izquierdo del numero ingresado es:  "+n+"\n");
        }
        else
        {
            System.out.println("El numero ingresado tiene un solo digito y es: "+n+"\n");
        }
    }
     void digitoDerecho()
    {
        int n=m;
        int dd;
        System.out.println("CALCULANDO EL DIGITO DERECHO");
        if(n>=10 ||  n<=-10)
        {
            dd=n%10;
            System.out.println("El digito derecho es: "+dd+"\n");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
       
       
    }
     void digitoMenor()
    {
        int n=m;
        int dm=10;
        System.out.println("CALCULANDO EL DIGITO MENOR");
         if(n>=10 ||  n<=-10)
        {
            while(n!=0)
            {
                if(dm>n%10)
                {
                    dm=n%10;
                }
                n=(n-n%10)/10;
               
            }
            System.out.println("El digito menor es: "+dm+"\n");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
    }
     void digitoMayor()
    {
        int n=m;
        int dma=-10;
        System.out.println("CALCULANDO EL DIGITO MAYOR");
         if(n>=10 ||  n<=-10)
        {
            while(n!=0)
            {
                if(dma<n%10)
                {
                    dma=n%10;
                }
                n=(n-n%10)/10;
               
            }
            System.out.println("El digito mayor es: "+dma+"\n");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
    }
     void numeroInvertido()
    {
        int n=m;
        int nin;
        System.out.println("CALCULANDO EL NUMERO INVERTIDO");
         if(n>=10 ||  n<=-10)
        {
            nin=n%10;
            while(n!=0)
            {               
                n=(n-n%10)/10;
                if(n!=0)
                nin=(nin*10)+(n%10);
            }
            System.out.println("El numero invertido  es: "+nin+"\n");
            System.out.println("RESUESTO POR GABRIEL PAUL HURTADO MATAMOROS");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
    }
}


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: pool666 en 8 Agosto 2012, 01:11 am
//RESUELTO POR GABRIEL PAUL HURTADO MATAMOROS
import java.util.*;
public class Principal {
    public static void main(String[] args)
    {
        System.out.print("Ingrese un numero entero:  ");
        Scanner leer=new Scanner(System.in);
        int num=Integer.parseInt(leer.nextLine());
        Operaciones oper=new Operaciones();
        oper.m=num;
        oper.canDigitos();
        oper.sumaDigitos();
        oper.productoDigitos();
        oper.digitoDerecho();
        oper.digitoIzquierdo();
        oper.digitoMayor();
        oper.digitoMenor();
        oper.numeroInvertido();
       
    }
}

//RESUELTO POR GABRIEL PAUL HURTADO MATAMOROS
public class Operaciones {
   static int m;
    void canDigitos()
         { 
             int n=m;
               int cont=0;
              while(n!=0)
                     {
                         if(n!=10)
                         {
                         n=(n-n%10)/10;
                         cont++;
                         }     
                     }
              System.out.println("El numero ingresado tiene : "+cont+"   cifras \n");
   
            }
   
    void sumaDigitos()
         {
             int n=m;
        int sum=0;
        while(n!=0)
              {
                  if(n!=0)
                      {
                          sum=sum+n%10;
                          n=(n-n%10)/10;
                      }
              }
        System.out.println("La suma de cifras del numero ingresado es:  "+sum+"\n");
    }
    void productoDigitos()
    {
        int n=m;
        int prod;
        System.out.println("CALCULANDO EL PRODUCTO DE DIGITOS");
        if(n!=0)
        {
            prod=1;
            while(n!=0)
           {
                 prod=prod*(n%10);
                 n=(n-n%10)/10;
                 
           }   
            System.out.println("El producto de digitos del numero ingresado es: "+prod+"\n");
        }
        else
        {
            System.out.println("El nuemro ingresado solo tiene un digito y  es: "+n+"\n");
        }
       
    }
     void digitoIzquierdo()
    {
        int n=m;
        System.out.println("CALCULANDO EL DIGITO IZQUIERDO");
        int di;
        if(n>=10 ||  n<=-10)
        {         
            while(n>=10 || n<=-10)
            {
                  n=(n-n%10)/10;
            }
           
            System.out.println("El digito izquierdo del numero ingresado es:  "+n+"\n");
        }
        else
        {
            System.out.println("El numero ingresado tiene un solo digito y es: "+n+"\n");
        }
    }
     void digitoDerecho()
    {
        int n=m;
        int dd;
        System.out.println("CALCULANDO EL DIGITO DERECHO");
        if(n>=10 ||  n<=-10)
        {
            dd=n%10;
            System.out.println("El digito derecho es: "+dd+"\n");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
       
       
    }
     void digitoMenor()
    {
        int n=m;
        int dm=10;
        System.out.println("CALCULANDO EL DIGITO MENOR");
         if(n>=10 ||  n<=-10)
        {
            while(n!=0)
            {
                if(dm>n%10)
                {
                    dm=n%10;
                }
                n=(n-n%10)/10;
               
            }
            System.out.println("El digito menor es: "+dm+"\n");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
    }
     void digitoMayor()
    {
        int n=m;
        int dma=-10;
        System.out.println("CALCULANDO EL DIGITO MAYOR");
         if(n>=10 ||  n<=-10)
        {
            while(n!=0)
            {
                if(dma<n%10)
                {
                    dma=n%10;
                }
                n=(n-n%10)/10;
               
            }
            System.out.println("El digito mayor es: "+dma+"\n");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
    }
     void numeroInvertido()
    {
        int n=m;
        int nin;
        System.out.println("CALCULANDO EL NUMERO INVERTIDO");
         if(n>=10 ||  n<=-10)
        {
            nin=n%10;
            while(n!=0)
            {               
                n=(n-n%10)/10;
                if(n!=0)
                nin=(nin*10)+(n%10);
            }
            System.out.println("El numero invertido  es: "+nin+"\n");
            System.out.println("RESUESTO POR GABRIEL PAUL HURTADO MATAMOROS");
        }
        else
        {
            System.out.println("Elnumero ingresado solo tiene un digito y es: "+n+"\n");
        }
    }
}
 >:D


Título: Re: Ejercicio Avanzado usando Java (POO)
Publicado por: leogtz en 8 Agosto 2012, 01:47 am
@pool666, va contra las reglas abrir temas antiguos, lee las reglas, además de que no pones el código como se debe.