Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Lorenzo31

Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 ... 20
121
Aprender a programar desde cero / Re:Ayuda con ejercicio
« en: 28 de Enero 2016, 16:00 »
Buenas tardes,

Uff que extenso, bueno vamos por partes solucionando, en el primer constructor dices, no se que poner en el DNI, el ejercicio te pide claramente que uses la funcion getDNI() para crear un DNI aleatorio. USA LA CLASE RANDOM


Ya sabes a que tienes que igualar dni en el contructor.


Segundo, el this, lo usas bien si, this hace referencia a la instancia, ESTE.DNI (el actual, el que esta vivo).

Cuando resuelvas la funcion getDNI() para que de un random y arregles los constructores avisame y seguimos arreglando.

122
Bueno,

 Sobre el primer punto, crea una matriz de [20][15] y rellenala toda con "_" significa libre.
Segundo punto, cuando se reserve, cambiarás el "_" por un "*". Y al hacer printf mostrarás los valores de la matriz en un bucle de doble for.
Código: [Seleccionar]
   for x=0..
       printf (salto de linea)
     for i=0...
         printf matriz [ x ][ i ];

Avisame cuando tengas hechas esas partes.

123
Perdona, ahora veo que lo necesitas en c
luego intento ayudarte un poco

Muy buenas,

Sirvete tu mismo, coge el código y usa lo que necesites.

https://www.aprenderaprogramar.com/foros/index.php?topic=2622.msg12253#msg12253

125
Si no te entendí mal, cuando le pasas los milisegundos, es el tiempo que deben tardar tanto PRODUCTOR como CONSUMIDOR en generar y comer la letra, es decir entre los dos juntos.

Entonces eso significa que el PRODUCTOR debe tardar la mitad de los milisegundos pasados por el usuario, y el CONSUMIDOR la otra mitad.

Entendí así cuando me lo dijiste, y que como máximo tardaran 400 ms entre los dos, osea 200 y 200.

A eso me referia con ms/2.

126
Si señor ya funciona, no necesita el milisegundo que yo le hacia dormir al consumidor antes de entrar en el bucle (pretendia retrasarlo esa milesima, que es poquisimo, pero no es necesario porque solo el start() del Thread Productor ya hace que se retrase esa milesima y unas pocas más, el Consumidor)

Voy a comentarte algo que debes tener en cuenta, se supone que el ejercicio final, solicitaras via Consola la introduccion de la cantidad de caracteres a generar, y los milisegundos totalles del delay de cada generación de letra (y consumo de la misma)

Ten en cuenta poner en los sleep de Productor y Consumidor, la mitad de ese delay general.

try {
            Thread.sleep(ms/2);
         } catch (InterruptedException e) {

127
Bueno, te dejo aquí el ejercicio ajustado, para que salga productor consumidor, No se porque (bueno si lo se, system.out.println trabaja como objeto PrintStream y limpia buffer con salto de linea, no se porque al inicio retiene dos Productores y dos Consumidores)

El resto ya sale bien, no se puede ajustar mas con Sleep ya.

Te lo dejo aquí, si logras ajustar las primeras lineas del System.out.println dimelo para yo también saber como hacerlo.

PILA
Código: [Seleccionar]
import java.util.Stack;


public class Pila {
Stack <Character> pila = new Stack<Character>();
private char c;

public synchronized char sacar(){

if(pila.empty()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

c = pila.pop();
notify();

return c;
}

public synchronized char poner(char c){
if (!pila.empty()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

pila.push(c);
    notify();

return c;

}

}

PRODUCTOR
Código: [Seleccionar]
import java.util.Random;

public class Productor extends Thread {
private Pila pila;
private String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private char c;
    private int i;
private Random random = new Random();


public Productor (Pila pila, int cant, int ms){
this.pila = pila;
}

public Productor (Pila p, int i){
this.pila = p;
this.i = i;
}

public synchronized  void run (){
   
        for(int x=1; x<i; x++){
c = alfabeto.charAt(random.nextInt(26));
pila.poner(c);
               System.out.println("Productor "+x+": "+c);
               
             try{ Thread.sleep(7); }catch(InterruptedException e){}   
            }




           }
     
}



CONSUMIDOR

Código: [Seleccionar]
public class Consumidor extends Thread {
private Pila pila;
private int i;
    private char c;

    public Consumidor (Pila pila, int i){
this.pila = pila;
this.i= i;
}

public synchronized void run (){
       
        try{ Thread.sleep(1); }catch(InterruptedException e){}
System.out.flush();
        for(int x=1; x<11; x++){
        c = pila.sacar();

               System.out.println("Consumidor "+x+": "+c);
               
              try{ Thread.sleep(7); }catch(InterruptedException e){}
            }
    }
   
  }

MAIN
Código: [Seleccionar]
public class Main {

    public static void main(String[] args) {
Pila pila = new Pila();

Productor pr = new Productor(pila, 11);
Consumidor cs = new Consumidor (pila, 11);

        pr.start();

cs.start();



          }
}

128
buenos días Alex,

  Efectivamente, esa era mi intención , la de alinear visualmente.
Tomo nota de tus consejos, h1 para texto only y prescindir de pre.

Seguiré con el curso CSS, al acabar HTML, ya Mario me aconsejó que así lo hiciera y leyéndoos después , cobra más sentido en mi cabeza el porqué.

Gracias Alex como siempre por ayudar en los detalles, que marcan la diferencia.

129
Buenas fox,

En general lo veo todo bien,  por comentarte algo, al declarar las variables tienes encima como comentario //Constructor, eso no es el constructor, es la declaración de variables de clase. El constructor es la llamada de debajo donde inicializas las variables.

Y luego cuando inicializas los String lo haces con un titulo = " "; <--- ahí hay un espacio (caracter) como texto.
Es mejor declararlo como titulo = ""; <--- en este caso no hay nada, ningún caracter.

Por lo demás bien getters, bien setters, bien todo. A seguir.

130
Técnicamente, sale antes el Productor, de lo contrario sería EMPTY el Stack(Pila) y el Consumidor no podria coger nada.

Otra cosa son los prints del sistema, copiame el codigo final, cuando lo tengas y miro de ver si sé encontrar como hacerlo

131
Y el ejercicio pide expresamente que salga por pantalla sincronizado?

132
Buenas adjunto mi respuesta al ejercicio.


Código: [Seleccionar]
<!DOCTYPE html>
<html>
     <head> <meta charset="utf-8"/> <title>Ejercicio727B_PortalBásico</title>
     <link rel="stylesheet" type="text/css" href="pruebaCSS.css"/>
</head>

<body>
     <div id="page" style="width:980px; text-align:center; margin:auto; border:2px solid gray;">
             <!--cabecera-->
       <div id="header">
     <h1>Portal, tutorial básico del Programador</h1>
</div>
<!--Contenedor-->
<br/>
<br/>
<br/>
<div id="wrapper">
     <!--Menú-->
     <div id="menu">
     <div>Menú</div>
     <hr style="color:red; background-color:red; width:50%; height:3px;"/>

     <ul>
         <li><a href="#">Portada</a></li>
     <li><a href="https://www.aprenderaprogramar.com">aprenderaprogramar.com</a></li>
     </ul>
</div>
<!--Fin Menú-->

                 <!--Cuerpo-->
<div id="body">
     <form method="POST" action="action.html" enctype="multipart/form-data">
     
<label for="nombre">Nombre</label> <input type="text" id="nombre" name="nombre"/>
<br/>
<label for="apellido">Apellido</label> <input type="text" id="apellido" name="apellido"/>
<br/>
<label for="direccion">Direccion</label> <input type="text" id="direccion" name="direccion"/>
<br/>
<label for="email">Email</label> <input type="text" id="email" name="email"/>
<br/>
<label for="telefono">Telefono</label> <input type="text" id="telefono" name="telefono"/>
<br/>
<label for="imagen">Añadir archivo</label> <input type="file" name="imagen" id="imagen"/>
<br/>
<input type="submit" value="Enviar"/>  <input type="reset" value="Eliminar todo"/>

</form>
</div>
<!--Fin Cuerpo-->
</div>
<!--Fin Contenedor-->
<br/><br/><br/>
<div id="footer"><!--Aquí va el pie--> <p>Copyright 2006-2072 aprenderaprogramar.com</p> </div>
</div>
     
</body>
</html>




¿Qué atributo ha de especificarse para el form para poder enviar archivos?

ENCTYPE


¿Qué valor ha de darse a dicho atributo?

multipart/form-data


¿Qué método de envío hay que especificar para el form si se envían archivos?

POST

133
pues ajusta los sleeps para que lo haga en 400, deberia poder hacerse.

134
Bueno, entonces, por narices has de hacer el bucle for en los Threads.

Trata de ajustar con sleep() para que de tiempo a cada uno a hacer un System.out.println en Consumidor y Productor.

Ya nos contarás que tal.

135
Bueno, despues de pasarme una hora mirando, voy a pasarte la forma correcta de hacer esto.

La clave es que al hacer un Thread.run() realmente no estas usando el Objeto Thread solo invocando al metodo run() del mismo.

Así, para actuar sobre el objeto, debes invocar al Thread.start()

Bien, lo que ocurre es que el println, no tiene una sincrinización tal como tu la pretendias, lo he podido solucionar con un sleep y el bucle conjunto.

Te dejo la solución final que yo he encontrado, y si te parece ya podemos pedir a los Administradores que cierren el hilo.

PILA
Código: [Seleccionar]
import java.util.Stack;


public class Pila {
Stack <Character> pila = new Stack<Character>();
private char c;

public synchronized char sacar(){

if(pila.empty()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

c = pila.pop();
notify();

return c;
}

public synchronized char poner(char c){
if (!pila.empty()){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

pila.push(c);
    notify();

return c;

}

}

PRODUCTOR

Código: [Seleccionar]
import java.util.Random;

public class Productor extends Thread {
private Pila pila;
private String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private char c;
    private int i;
private Random random = new Random();


public Productor (Pila pila, int cant, int ms){
this.pila = pila;
}

public Productor (Pila p, int i){
this.pila = p;
this.i = i;
}

public synchronized  void run (){
   
c = alfabeto.charAt(random.nextInt(26));
pila.poner(c);
               System.out.println("Productor "+i+": "+c);
       




           }
     
}


CONSUMIDOR

Código: [Seleccionar]

public class Consumidor extends Thread {
private Pila pila;
private int i;

    public Consumidor (Pila pila, int i){
this.pila = pila;
this.i= i;
}

public synchronized void run (){
       
        char c;

        c = pila.sacar();

               System.out.println("Consumidor "+i+": "+c);
         
    }
   
  }


MAIN

Código: [Seleccionar]
public class Main {

    public static void main(String[] args) {
Pila pila = new Pila();




for(int i=1; i<11; i++){
Productor pr = new Productor(pila, i);
Consumidor cs = new Consumidor (pila, i);

        pr.start();

cs.start();


try{ Thread.sleep(10);
  }catch(InterruptedException e){}
          }

       

}
}


136
Bueno un Stack es un LIFO last in first out. que es lo que tu necesitas ahí.

Modifica los metodos de agregar o quitar del STACK que no lo hice, fui muy rápido.

https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

Mirate los Method Sumary y sustituye add() por push() remove .... etc 
Sino dejalo como ArrayList tambien va a funcionarte. Es una tonteria con matices minimos, espero te haya servido de ayuda y mas o menos haga lo que tu querias.

Tienes si quieres en esta web un curso de java que no es que sea cojonudo, es lo siguiente de cojonudo.


Te dejo Link:
http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

137
Buenas tardes, ya lo he solucionado para que vaya como tu quieres,

Primero comentarte que no es ningun problema con los Threads, porque si te fijas las numeraciones de Productor y Consumidor son perfectamente correctas, no se come una letra distinta a la que les toque.

Por tanto es un simple problema de cordinacion con los System.out.println.

Lo que he hecho yo es unir los bucles en uno en el main y ya va perfectamente.
Y la pila, la he puesto como Stack no ArrayList que es como corresponderia.

PILA
Código: [Seleccionar]
import java.util.Stack;


public class Pila {
Stack <Character> pila = new Stack<Character>();
private char c;

public synchronized  char sacar(){

if(pila.size()==0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

c = pila.remove(0);
notify();

return c;
}

public synchronized char poner(char c){
if (pila.size()!=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

pila.add(c);
    notify();

return c;

}

}


CONSUMIDOR

Código: [Seleccionar]
public class Consumidor extends Thread {
private Pila pila;

    public Consumidor (Pila pila){
this.pila = pila;
}

public void run (int i){
        char c;
c = pila.sacar();

   System.out.println("Consumidor "+i+": "+c);
   }
}

PRODUCTOR

Código: [Seleccionar]
import java.util.Random;

public class Productor extends Thread {
private Pila pila;
private String alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private char c;
private Random random = new Random();


public Productor (Pila pila, int cant, int ms){
this.pila = pila;

}

public Productor (Pila p){
this.pila = p;;
}

public void run (int i){

c = alfabeto.charAt(random.nextInt(26));
System.out.println("Productor "+i+": "+c);
pila.poner(c);

}
}


MAIN

Código: [Seleccionar]
public class Main {

    public static void main(String[] args)  throws InterruptedException{
Pila pila = new Pila();

Productor pr = new Productor(pila);
Consumidor cs = new Consumidor (pila);

for (int i = 1; i < 11 ; i++){
pr.run(i);

cs.run(i);

        }

}
}

138
Buenas, sin ser un experto en Java, creo que debes usar el método notify() una vez despierte del wait uno de los Threads, para que avise al otro, mientras no notify() no continuará el otro Thread.

(Perdona ahora veo que has usado el notify() ya. Luego le hecho un vistazo a fondo y miro si puedo ayudarte, esta claro que el problema esta en la sincronización de los threads, eso seguro).

Un saludo.

139
Buenas tardes, dejo mi respuesta al ejercicio CU00727B:

   
Código: [Seleccionar]
   <!DOCTYPE html>
<html>
    <head> <meta charset="utf-8"/> <title>Ejercicio727B</title> </head>

<body style="border: 1px solid red; margin:auto;">
     <!-- Division CABECERA -->
     <div id="header" style="margin:5px;">
     <h1 style="color:blue; text-align:center;"> <img src="http://www.ainurblog.es/wp-content/uploads/2011/11/Ainur-chiste-informatico-3.jpg"
     alt="Imagen Mouse" width="16%"/>
     Página dedicada al Humor
     <a href="https://www.aprenderaprogramar.com/foros/" target="_blank" title="Ir al FORO de www.aprenderaprogramar.com"> <img src="http://www.chistes21.com/img/chistes/1101_infidelidad.jpg"
alt="Imagen Mouse2" width="20%"/>
</a>
</h1>

     </div>
   
     <!--CONTENEDOR -->
<div id="wrapper">
   
<!--Division CUERPO -->
<div id="body" style="margin:5px;">
     <p> Menú <br/> <hr style="height:1px; color:red;"/>
     <ol style="list-style-type:upper-roman;">
     <a href="http://aprenderaprogramar.com/index.php?option=com_content&view=section&layout=blog&id=10&Itemid=48" target="_blank">
     <li>Humor Informático</li> </a>
<a href="http://chistes.yavendras.com/negro.php" target="_blank">
     <li>Humor Negro</li> </a>
                     <a href="http://ocioaventurasitges.com/tienda/humor-amarillo/" target="_blank">
     <li>Humor Amarillo</li> </a>
<a href="http://www.rincondechistes.com/sexo/chistesverdes.html#" target="_blank">
     <li>Humor Verde</li></a>
<a href="http://www.1000chistes.com/chistes-malos" target="_blank">
     <li>Chistes Malos</li></a>
</ol>
</p>
<p>   <pre>                          CHISTE
                         - ¿Tienes wifi?
                         - Sí.
                         - ¿Y cuál es la clave?
                         - Tener dinero y pagarlo.
<pre>
</p>
<img src="http://www.fotoshumor.com/carpeta/1/original/418081282116717.jpg" width="20%"/>
   

<p>
         En la clase de Jaimito, la maestra les pide a los niños que se porten bien aquella tarde porque el director iría a visitar la clase.
Les pide específicamente que no digan: "Maestra: ¿puedo ir al baño a orinar?" Sino que digan: "Maestra:¿ puedo ir a cortar una flor?"
Pues se escucha más bonito y eso impresionaría al director. Llega la hora, y el director entra y se sienta, los niños empiezan a llamar
a la maestra...
Juanito "Maestra: ¿puedo ir a cortar una flor?", María: "¿Maestra: puedo ir a cortar una flor?" ,
Pablito "¿Maestra: puedo ir a cortar una flor?" y sale Jaimito: "Maestra,¿ me presta papel para limpiarme el florero
                 </p>
</div>
   
<!-- Division PIES -->
<div id="footer" style="margin:5px;">
<p> <img src="http://g.cdn.ecn.cl/humor/files/2015/09/chiste-corto-19.jpg" width="10%"/> &nbsp;&nbsp;&nbsp;&nbsp; www.aprenderaprogramar.com Copyright 2016-2076 
&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://aprenderaprogramar.com/">Ir a APRENDERAPRORAMAR.COM</a>
</p>
</div>
   
   </div>
</body>
</html>

 

140
Se intenta, lo importante es la máxima claridad al ver un código, sino es doble complejo.

Gracias Pedro.

Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 ... 20

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".