Ejercicios prácticos Java

Iniciado por Superplay, 7 Noviembre 2011, 15:17 PM

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

Superplay

Cita de: s00rk en  7 Noviembre 2011, 21:46 PM
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


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

s00rk

Cita de: Superplay en  8 Noviembre 2011, 14:54 PM
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

Superplay

#12
Cita de: s00rk en  8 Noviembre 2011, 15:01 PM
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:

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++;
           }
           }
       }


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

Superplay

#13
Ahora viene lo jodido de localizar:

Tenemos el siguiente código:

Código (java) [Seleccionar]
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étodos abstractos, sólo tienen declaració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 área
{
    double varea;
    varea = 3.1416 * radio * radio;
    return varea;
}

void muestra() //Redefinido, muestra la figura
{
    System.out.println("Cí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 área
{
    double varea;
    varea = (x2-x1) * (y2-y1);
    return varea;
}

void muestra()  //Redefinido muestra la figura
{
    System.out.println("Rectángulo esquina (" + x1 + ","+ y1 +") y ("+ x2 +","+ y2 +")");
}
}//fin clase rectá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 área
    {
        double varea;
        varea = ((x2-x1)*(y2-y1))/2;
        return varea;
    }
   
    void muestra()  //Redefinido, muestra la figura
    {
            System.out.println("Triángulo esquina (" + x1 + "," + y1 + "),(" + x2 + "," + y2 + "),(" + x3 + "," + y3 +")");
        }
    }//fin clase triángulo

class Rombo extends Figura
{
    double diagonalmayor,diagonalmenor;
   
    Rombo (double a, double b)  //Constructor
    {
        diagonalmayor = a;
        diagonalmenor = b;
    }
   
    double area()   //Redefinido, calcula el á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 área de todas las figuras\n");
System.out.println("3-Crear una nueva figura en una posició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("¿Desea salir? Introduzca un 1 si lo desea: ");
salir=System.in.read(); //Lee el número que introduzca el usuario

if(salir!=1){
    System.exit(0);//Sale del programa
}
break;
case '1':
System.out.println("A continuación mostraremos todas las figuras: \n\n");
Lista.moveFirst();

do{
a=Lista.moveNext();
((Figura)Lista.activo.objeto).muestra();
}while(a==true);

break; //Salimos opción 1

case '2':
System.out.println("A continuación calculamos el área de todas las figuras: \n\n");
Lista.moveFirst();

do{
a=Lista.moveNext();
System.out.println("El área del objeto es: " + ((Figura)Lista.activo.objeto).area());
}while(a==true);
break;  //Salimos opción 2

case '3':
System.out.println("Seleccione la figura que desea crear\n");
System.out.println("0-Círculo\n");
System.out.println("1-Rectángulo\n");
System.out.println("2-Triá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.


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