Ejercicio Avanzado usando Java (POO)

Iniciado por enrique8923, 22 Abril 2009, 07:25 AM

0 Miembros y 1 Visitante están viendo este tema.

enrique8923

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.

leogtz

El ejercicio lo resolví en C, de algo te servirá:
#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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Amerikano|Cls

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.




Mi blog:
http://amerikanocls.blogspot.com

Amerikano|Cls

Cita de: Leo Gutierrez. en 22 Abril 2009, 08:09 AM
El ejercicio lo resolví en C, de algo te servirá:
#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




Mi blog:
http://amerikanocls.blogspot.com

leogtz

Y tu fuera de que no usas el botón "Modificar".

Soy novato en C, por eso lo resolví de esa manera.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

sapito169

 :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



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



//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+"");
    }



enrique8923

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());
  }
}


juancho77

jajaj dificil? Pobres los que programan compiladores, navegadores, mapas...

Myth.ck

Cita de: juancho77 en 16 Mayo 2009, 02:07 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.
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.

Aeros

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