elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 01:57  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  Ejercicios prácticos Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicios prácticos Java  (Leído 1,661 veces)
Superplay


Desconectado Desconectado

Mensajes: 626



Ver Perfil
Ejercicios prácticos Java
« en: 7 Noviembre 2011, 15:17 »

Buenas, estoy haciendo una serie de ejercicios prácticos en Java y de momento tengo problemas con uno, que es sencillo pero no sé exactamente que falla:

Tengo que imprimir en pantalla (en la consola vamos, a lo printf de C) los 20 primeros números primos. El problema es que de varios códigos que he hecho, unos me imprimen los 20 números primeros (que no son ni primos, simplemente todos)... otros no llegan a imprimir nada y estoy un poco desesperado. Pide que se haga con bucles anidados y dos variables de control, pero nada... hay que tener moral para una cosa tan simple no me salga bien.

Uno de los códigos que he hecho es:

Código:
public class ejercicio32
{
    public static void main(String args[])
        {
           int i, numero, contador=0;
           
            for(numero=0;contador<=20;numero++){
                for(i=0;i<=numero;i++){
                    if(numero%i==0){
                        System.out.println("El número:" + numero + "es primo");
                    }
                   
                    else {
                        System.out.println("El número:" + numero + "no es primo");
                    }
                }
            }
        }
    }

Al compilar no me da ningún error, al intentar ejecutarlo me da error en la línea 9 (la que dice si numero%i es 0).

Muchas gracias, igual pongo más problemas.


En línea



"Nací siendo un virus" By Windows.
Este mensaje no es por ofender, yo uso Windows también, simplemente... es broma ;)
madpitbull_99
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.898



Ver Perfil WWW
Re: Ejercicios prácticos Java
« Respuesta #1 en: 7 Noviembre 2011, 15:41 »

Una posible solución:

Código
package HojaEjercicios1;
import java.io.*;
 
/**
*
* @author madpitbull
*/

public class Ejer10 {
   public static void main (String args[]) throws IOException {
 
       BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
       System.out.print("Introduce un número: ");
       int lim = Integer.parseInt(in.readLine());
 
 
       if (lim > 0) {
           for (int i=1; i<=lim; i++) {
               int x;
               for (x=2; x<=i; x++) {
                  if (i%x == 0) {
                      break;
                  }
               }
               if (i == x) {
                  System.out.print(" " + i + " ");
               }
           }
 
 
       }else
           System.out.println("[Error] Número no válido.");
 
 
 
   }
}
 

Otra alternativa es hacerlo usando una variable boolean. Puedes usar el mismo ejemplo,
sólo tendrás que cambiar el estado de la variable dentro del if que comprueba si el número es primo.



En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Valkyr


Desconectado Desconectado

Mensajes: 632


Divide y vencerás


Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #2 en: 7 Noviembre 2011, 15:47 »

A ver, lo primero: la estructura general de un bucle for es la siguiente:

for(variable = Inicio; Condición para que continue; Incremento o Decremento).

Tú haces esto:

Código
for(numero=0;contador<=20;numero++)

Contador no lo incrementas nunca por lo que el programa va a estar haciendo cosas hasta que se canse.

Por otro lado, y suponiendo que lo hemos aprendido en la escuela, un número primo es aquel que solo puede dividirse por la unidad y consigo mismo. De la forma que tú lo has hecho si numero valiese 4 e i valiese 2 te diría que 4 es un número primo cuando eso no es verdad.

Entonces, ¿cuál es la solución?. En primer lugar miraría el manual, libro, guia, articulo que estés siguiendo y dominaría primero eso del bucle, después haría lo siguiente:

1) Un bucle for que vaya desde 1 hasta 20.
2) Un bucle dentro de ese anterior que vaya desde 2 (sabemos que por uno se puede dividir si o si) hasta el número que queremos comprobar si es primo.
3) Comprobamos en cada iteración si el resto de dividir el número por i nos da un resto distinto de 0 (lo que significa que no es divisible), si en alguna iteración nos da resto 0 y el valor de i no es ni 0 ni el número, entonces paramos puesto que sabemos que ese número es divisible por uno que es distinto de sí mismo y de 1.

Básicamente esa es la idea, ahora a darle al papel (podrías hacerlo primero en papel la idea) y luego al teclado.

Saludos.

madpitbull_99 así no va a aprender... pero bueno.
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.408



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #3 en: 7 Noviembre 2011, 15:53 »

Digamos que tu codigo Superplayer hace la division con todos los numeros sin terminar el bucle y mostraria muchos mensajes tu codigo, mas de los 20, y fijate que madpitbull si sale del bucle con break;

Te digo esto por si no entiendes el codigo de madpitbull.

Tambien decirte que para saber si un numero es primo hay que dividir ese numero por todos los numeros primos hasta la raiz cuadrada del numero, en este caso como no sabes los numeros primos porque es lo que quieres hayar xD, haces que se divida por todos los numeros total es lo mismo solo que demoraria mas y serian cuentas en vano, pero en este caso no te queda otra creo, pero si te tienen permitido hacelo hasta la raiz cuadrada del numero, porque luego va a dar con decimales siempre.
En línea

Estado en el MSN:
Superplay


Desconectado Desconectado

Mensajes: 626



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #4 en: 7 Noviembre 2011, 16:28 »

Si entiendo de bucles y tal por C, pero es que es un puñetero lío lo de poner los 20 primeros números primos.

He modificado un poco el código... no me da errores de compilación pero ahora no me abre la consola virtual... LOL

Código:
public class ejercicio33
{
    public static void main(String args[])
        {
           int contador=1,i=1, numero=1;
           
            for(contador=0;contador<=20;contador++){
                for(i=numero-1;i>0;i--){
                    if(numero%i==0 && contador<=20){
                        System.out.println("El número: " + numero + " es primo");
                        numero++;
                        break;}
                       else{ numero++;
                        }
                }
                }
            }
        }
En línea



"Nací siendo un virus" By Windows.
Este mensaje no es por ofender, yo uso Windows también, simplemente... es broma ;)
$Edu$


Desconectado Desconectado

Mensajes: 1.408



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #5 en: 7 Noviembre 2011, 16:44 »

Te abre, solo que se cierra enseguida porque no tienes ni un pause si quiera, mira, aca te podemos ayudar pero antes tienes que poner tu parte, por ejemplo.. leer un buen libro de Java podria ser? Cambiaste cosas que no tenias que cambiar :/ lee un buen tutorial y luego vienes con tu duda ;)
En línea

Estado en el MSN:
markosliveup

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #6 en: 7 Noviembre 2011, 18:44 »

parparaparparparpara

Aca el problema es que no planteas bien la solucion. Frena 5 minutos. Y pensa la solucion no arranques a escribir codigo de una...
En línea
Superplay


Desconectado Desconectado

Mensajes: 626



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #7 en: 7 Noviembre 2011, 20:44 »

No es mi idea pelearme ni nada de eso... pero me da la sensación de que cuando no sabéis algo en vez de reconocer que no lo sabéis, mandáis a "estudiar y luego preguntar" o bien mandáis a Google o bien ponéis la excusa que lo que quiero es que me hagáis los deberes... si pregunto aquí es porque no sé que puede estar mal, pido sugerencias, no digo "hacedme el código que yo copio, pego y disfruto del 10"

Y respecto a pensar el código... he hecho y repito, 20 códigos distintos sobre el puto imprimidor de números primos... pensados en lo que creo que deben hacer... y no lo hacen. Por eso pregunto aquí, si no, no preguntaría.

En línea



"Nací siendo un virus" By Windows.
Este mensaje no es por ofender, yo uso Windows también, simplemente... es broma ;)
s00rk

Desconectado Desconectado

Mensajes: 139



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #8 en: 7 Noviembre 2011, 21:46 »

No es mi idea pelearme ni nada de eso... pero me da la sensación de que cuando no sabéis algo en vez de reconocer que no lo sabéis, mandáis a "estudiar y luego preguntar" o bien mandáis a Google o bien ponéis la excusa que lo que quiero es que me hagáis los deberes... si pregunto aquí es porque no sé que puede estar mal, pido sugerencias, no digo "hacedme el código que yo copio, pego y disfruto del 10"

Y respecto a pensar el código... he hecho y repito, 20 códigos distintos sobre el puto imprimidor de números primos... pensados en lo que creo que deben hacer... y no lo hacen. Por eso pregunto aquí, si no, no preguntaría.



Ok, entonces explicare porque en el codigo anterior no sale nada
Código:
public class ejercicio33
{
    public static void main(String args[])
        {
           int contador=1,i=1, numero=1;
           
            for(contador=0;contador<=20;contador++){
                for(i=numero-1;i>0;i--){
                    if(numero%i==0 && contador<=20){
                        System.out.println("El número: " + numero + " es primo");
                        numero++;
                        break;}
                       else{ numero++;
                        }
                }
                }
            }
        }

Numero es 1 -1 = 0 ahora i = 0 , luego 0 no es mayor a 0, por lo que no decrementa y no entra al ciclo, listo y eso lo intenta hacer 21 veces pero no pasa nada nunca jejeje porque numero nunca cambiara.
-------------------

Ahora planteo un poco en pseudocodigo

Inicio Programa
   Declarar variables n = 0 y contador = 0;
   Mientras contador < 20
      Si n Modulo 2 es diferente a 0 Ó n es igual a 2
         Imprime n
         contador aumenta + 1
      Fin Si
      n aumenta + 1
   Fin Mientras
Fin Programa


Creo que asi es mas sencillo de entender como funciona...
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.408



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #9 en: 8 Noviembre 2011, 00:36 »

Jeje esque mira, siento que no has leido ningun tutorial aun, nosotros no estamos para dar una clase de como funciona un bucle porque para eso estan los tutoriales en internet que hay muchisimos, ademas no te lo dije como mal, te lo digo para que aprendas como se debe, imaginate que vienes a plantear una tarea pero no has entendido bien como funcionan los bucles, por eso mismo si lees un tutorial tranquilo aprenderas y luego recien si podras hacer estos ejercicios que te mandan.
En línea

Estado en el MSN:
Superplay


Desconectado Desconectado

Mensajes: 626



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #10 en: 8 Noviembre 2011, 14:54 »

Ahora planteo un poco en pseudocodigo

Inicio Programa
   Declarar variables n = 0 y contador = 0;
   Mientras contador < 20
      Si n Modulo 2 es diferente a 0 Ó n es igual a 2
         Imprime n
         contador aumenta + 1
      Fin Si
      n aumenta + 1
   Fin Mientras
Fin Programa

Coño alguien junto con el primero o el segundo que mostró su código, que me entiende.

Tengo una duda respecto a tu pseudocódigo... ¿Qué significa para ti módulo en esa parte del código?

A mi lo que no me queda claro es... si para demostrar que un número es primo SÓLO debe ser divisible por uno y por si mismo, y un número no primo lo es si es divisible por otro número que no sea ni él mismo ni el uno... (ej: el 6, se puede dividir entre 2, entre 3) por lo tanto, tendré que tener un bucle de 1 a 20 que me los divida todos y entonces necesitaré una variable para ese bucle y otra variable que me cuente el número de divisiones que sean iguales a 0... si ese numero es 2, el numero es primo y si es >2 es no primo... pero el problema me pide que lo haga con sólo dos variables...una que represente el número que divido y otra el contador para saber cuantos numeros primos llevo ya... y es lo que me mata y no me deja hacer bien el código xD
En línea



"Nací siendo un virus" By Windows.
Este mensaje no es por ofender, yo uso Windows también, simplemente... es broma ;)
s00rk

Desconectado Desconectado

Mensajes: 139



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #11 en: 8 Noviembre 2011, 15:01 »

Coño alguien junto con el primero o el segundo que mostró su código, que me entiende.

Tengo una duda respecto a tu pseudocódigo... ¿Qué significa para ti módulo en esa parte del código?

A mi lo que no me queda claro es... si para demostrar que un número es primo SÓLO debe ser divisible por uno y por si mismo, y un número no primo lo es si es divisible por otro número que no sea ni él mismo ni el uno... (ej: el 6, se puede dividir entre 2, entre 3) por lo tanto, tendré que tener un bucle de 1 a 20 que me los divida todos y entonces necesitaré una variable para ese bucle y otra variable que me cuente el número de divisiones que sean iguales a 0... si ese numero es 2, el numero es primo y si es >2 es no primo... pero el problema me pide que lo haga con sólo dos variables...una que represente el número que divido y otra el contador para saber cuantos numeros primos llevo ya... y es lo que me mata y no me deja hacer bien el código xD

Modulo es este simbolo % el cual te da el residuo de una division y como sabemos si da 0 esq es primo por eso ponemos != 0
En línea

Superplay


Desconectado Desconectado

Mensajes: 626



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #12 en: 8 Noviembre 2011, 15:07 »

Modulo es este simbolo % el cual te da el residuo de una division y como sabemos si da 0 esq es primo por eso ponemos != 0

Mil millones de gracias, con decirme que modulo era % ya he visto como lo hace y si... Dios, que tonto soy por no darme cuenta de lo simple que era. Ya lo tengo.

Muchas gracias :D

Am también te falta comprobar n%3!=0 porque si se divide entre 3 es primo :P

Uf, gracias... bueno voy a ponerme con un cacho código que me hace gracia... de números primos ahora tengo que ponerme con listas enlazadas de Java... cosa que no di en C el año pasado y que no tengo ni idea.

Gracias y si vuelvo a tener problemas, lo posteo por aquí :)

El código al final me ha quedado:

Código:
public class ejercicio33
{
    public static void main(String args[])
        {
           int contador=0, numero=0;
            
            while(contador<20){
                if((numero%2 != 0 && numero%3 !=0) || (numero==1) || (numero==2)){
                    System.out.println("El número " + numero + " es primo");
                    contador++;
                }
                numero++;
            }
            }
        }
« Última modificación: 8 Noviembre 2011, 15:10 por Superplay » En línea



"Nací siendo un virus" By Windows.
Este mensaje no es por ofender, yo uso Windows también, simplemente... es broma ;)
Superplay


Desconectado Desconectado

Mensajes: 626



Ver Perfil
Re: Ejercicios prácticos Java
« Respuesta #13 en: 8 Noviembre 2011, 15:35 »

Ahora viene lo jodido de localizar:

Tenemos el siguiente código:

Código
class Item
{
   Item siguiente;
   Object objeto;
 
   Item(Object objeto)
   {
           this.objeto=objeto;
           this.siguiente = null;
       }
   }
 
class ListaEnlazada
{
   Item primero;
   Item activo;
 
   ListaEnlazada()
   {
           this.primero = null;
           this.activo = null;
 
 
       }
   boolean moveNext()
   {
       if(this.activo.siguiente!=null){
           this.activo=this.activo.siguiente;
           return true;
       }
       else
       return false;
   }
 
   void moveFirst()
   {
       this.activo=this.primero;
   }
 
   void moveLast()
   {
       boolean a;
       do{
           a=moveNext();
       }while(a==true);
   }
 
   Object getObject()
   {
       return this.activo;
   }
 
   void addItem(Item nuevo)
   {
       if(this.primero==null)
      {
      this.primero=nuevo;
      this.primero.siguiente=null;
      this.activo=this.primero;
       }else{
       moveLast();
       this.activo.siguiente=nuevo;
       this.activo=nuevo;
   }
   }
 
   void insertItem(Item nuevo)
   {
       this.activo.siguiente=nuevo;
       this.activo=nuevo;
   }
}
 
abstract class Figura   //defino figura, pero como abstracta
{
//m&#233;todos abstractos, s&#243;lo tienen declaraci&#243;n. No se definen
abstract double area();
abstract void muestra();
}
 
class Circulo extends Figura
{
   double x,y,radio;
 
   Circulo (double a, double b, double c)  //Constructor
   {
       x = a;
       y = b;
       radio = c;
   }
 
double area()   //Redefinido, calcula el &#225;rea
{
   double varea;
   varea = 3.1416 * radio * radio;
   return varea;
}
 
void muestra() //Redefinido, muestra la figura
{
   System.out.println("C&#237;rculo de radio " + radio + " y de centro (" + x + "," + y +")");
}
}//fin clase Circulo
 
class Rectangulo extends Figura
{
double x1,y1,x2,y2;
 
Rectangulo (double a, double b, double c, double d) {
   x1 = a;
   y1 = b;
   x2 = c;
   y2 = d;
}
 
double area()   //Redefinido, calcula el &#225;rea
{
   double varea;
   varea = (x2-x1) * (y2-y1);
   return varea;
}
 
void muestra()  //Redefinido muestra la figura
{
   System.out.println("Rect&#225;ngulo esquina (" + x1 + ","+ y1 +") y ("+ x2 +","+ y2 +")");
}
}//fin clase rect&#225;ngulo
 
class Triangulo extends Figura
{
   double x1,y1,x2,y2,x3,y3;
 
   Triangulo (double a, double b, double c, double d, double e, double f)  //Constructor
   {
       x1 = a;
       y1 = b;
       x2 = c;
       y2 = d;
       x3 = e;
       y3 = f;
   }
 
   double area()   //Redefinido, calcula el &#225;rea
   {
       double varea;
       varea = ((x2-x1)*(y2-y1))/2;
       return varea;
   }
 
   void muestra()  //Redefinido, muestra la figura
   {
           System.out.println("Tri&#225;ngulo esquina (" + x1 + "," + y1 + "),(" + x2 + "," + y2 + "),(" + x3 + "," + y3 +")");
       }
   }//fin clase tri&#225;ngulo
 
class Rombo extends Figura
{
   double diagonalmayor,diagonalmenor;
 
   Rombo (double a, double b)  //Constructor
   {
       diagonalmayor = a;
       diagonalmenor = b;
   }
 
   double area()   //Redefinido, calcula el &#225;rea
   {
       double varea;
       varea = diagonalmayor*diagonalmenor/2;
       return varea;
   }
   void muestra()  //Redefinido, muestra la figura
   {
           System.out.println("Rombo diagonal mayor:" + diagonalmayor + ", diagonal menor:" + diagonalmenor);
       }
   }//fin clase rombo
 
public class ejercicio43
{
public static void main(String args[]) throws Exception
{
 
char eleccion, figura;
int salir, i=0;
ListaEnlazada Lista= new ListaEnlazada();
 
do{
System.out.println("\n0-Salir\n");
System.out.println("1-Muestra todas las figuras\n");
System.out.println("2-Muestra el &#225;rea de todas las figuras\n");
System.out.println("3-Crear una nueva figura en una posici&#243;n concreta\n");
System.out.println("Introduce lo que quieres realizar: ");
eleccion=(char) System.in.read();
 
System.in.read();
boolean a;
switch (eleccion)//Sentencia Switch
{
case '0':
System.out.println("&#191;Desea salir? Introduzca un 1 si lo desea: ");
salir=System.in.read(); //Lee el n&#250;mero que introduzca el usuario
 
if(salir!=1){
   System.exit(0);//Sale del programa
}
break;
case '1':
System.out.println("A continuaci&#243;n mostraremos todas las figuras: \n\n");
Lista.moveFirst();
 
do{
a=Lista.moveNext();
((Figura)Lista.activo.objeto).muestra();
}while(a==true);
 
break; //Salimos opci&#243;n 1
 
case '2':
System.out.println("A continuaci&#243;n calculamos el &#225;rea de todas las figuras: \n\n");
Lista.moveFirst();
 
do{
a=Lista.moveNext();
System.out.println("El &#225;rea del objeto es: " + ((Figura)Lista.activo.objeto).area());
}while(a==true);
break;  //Salimos opci&#243;n 2
 
case '3':
System.out.println("Seleccione la figura que desea crear\n");
System.out.println("0-C&#237;rculo\n");
System.out.println("1-Rect&#225;ngulo\n");
System.out.println("2-Tri&#225;ngulo\n");
System.out.println("3-Rombo\n");
System.out.println("Introduce lo que quieres realizar: ");
figura=(char)
 
System.in.read();
 
System.in.read();
 
Item nuevoitem;
switch (figura)//Sentencia Switch
{
case '0':
Circulo nuevocirculo=new Circulo (80.0,40.0,30.0);
nuevoitem=new Item(nuevocirculo);
 
Lista.addItem(nuevoitem);
break;
case '1':
Rectangulo nuevorectangulo=new Rectangulo(4.0, 10.0, 20.0, 30.0);
nuevoitem=new Item(nuevorectangulo);
 
Lista.addItem(nuevoitem);
break;
case '2':
Triangulo nuevotriangulo=new Triangulo(10.0, 0.0, 20.0, 10.0, 5.0, 1.0);
nuevoitem=new Item(nuevotriangulo);
 
Lista.addItem(nuevoitem);
break;
case '3':
Rombo nuevorombo=new Rombo(5.0, 2.0);
nuevoitem=new Item(nuevorombo);
 
Lista.addItem(nuevoitem);
break;
 
default: break;
 
}
 
break;
 
}
 
}while((eleccion=='1')||(eleccion=='2')||(eleccion=='3'));
 
}
 
}

El código "va" hace casi lo que tiene que hacer, el problema es que no sé porque al agregar una figura y darle a mostrar se muestra, pero si agregamos otra esta se solapa y hace que se muestre 2 veces la figura que hemos agregado... y asi continuamente :O

¿Alguien puede decirme que hace que haga eso? Gracias.
« Última modificación: 8 Noviembre 2011, 22:12 por madpitbull_99 » En línea



"Nací siendo un virus" By Windows.
Este mensaje no es por ofender, yo uso Windows también, simplemente... es broma ;)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicios Java
Ejercicios
Lorena88 1 3,041 Último mensaje 21 Enero 2009, 01:42
por Amerikano|Cls
2 ejercicios de java
Java
kay19 1 3,094 Último mensaje 28 Agosto 2009, 20:34
por Caballero Maldito
Ejercicios Java
Java
rshocush 12 6,085 Último mensaje 10 Marzo 2010, 15:15
por Mai89
ejercicios + soluciones en java « 1 2 »
Java
bjpenn 25 5,615 Último mensaje 14 Septiembre 2011, 19:01
por bjpenn
Ejercicios en JAVA
Ejercicios
madpitbull_99 8 5,044 Último mensaje 13 Marzo 2012, 02:27
por Audioslave™
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines