SlideShare una empresa de Scribd logo
1 de 11
Criba de Eratóstenes Escribir dato() CONSUMIDOR Escribir dato() NUMEROS FILTRO FILTRO Escribir dato() DATO DATO DATO Número Número Número ……….. Tratar() GeneraNumero() Tratar() Tratar() SALIDA
Código Generador de Numeros: public class Numeros extends Thread{ intinicial = 2; int_final; SuperTipo_filtro; publicNumeros(SuperTipo filtro, int ultimo){ 		_filtro = filtro; 		_final = ultimo; 	} publicvoidgenerarNumero(){ 		_filtro.escribirDato(inicial++); 	} publicvoidrun(){ 		for(int i = 2; i<=_final; i++){ generarNumero(); 		} 	}	 }
Código Generador de Numeros: public class Numeros extends Thread{ intinicial = 2; int_final; SuperTipo_filtro; publicNumeros(SuperTipo filtro, int ultimo){ 		_filtro = filtro; 		_final = ultimo; 	} publicvoidgenerarNumero(){ 		_filtro.escribirDato(inicial++); 	} publicvoidrun(){ 		for(int i = 2; i<=_final; i++){ generarNumero(); 		} 	}	 } Envía un numero al primer filtro
Código de Supertipo: Como Filtro y Consumidor se comportan de manera parecida, ambos extienden la siguiente clase: public abstract class SuperTipo extends Thread { int_dato; boolean_flag = false; 	public synchronized void escribirDato(intdato){ while(_flag) 		try{wait();}catch(InterruptedExceptionexc){;} 		_dato = dato; 		_flag = true; notify();//Solo puede haber un filtro esperando datos en el WS 	} abstractvoid tratar(); publicvoidrun(){ while(true){//Se nos va a producir una situacion de interbloqueo  //ya que los filtros se quedan esperando numeros. 			tratar(); 		} 	} }
Código de Supertipo: Como Filtro y Consumidor se comportan de manera parecida, ambos extienden la siguiente clase: public abstract class SuperTipo extends Thread { int_dato; boolean_flag = false; 	public synchronized void escribirDato(intdato){ while(_flag) 		try{wait();}catch(InterruptedExceptionexc){;} 		_dato = dato; 		_flag = true; notify();//Solo puede haber un filtro esperando datos en el WS 	} abstractvoid tratar(); publicvoidrun(){ while(true){//Se nos va a producir una situacion de interbloqueo  //ya que los filtros se quedan esperando numeros. 			tratar(); 		} 	} } Recibe un dato de otro elemento del programa. Trata el elemento almacenado
Código de Filtro public class Filtro extends SuperTipo{ int_primo = -1; SuperTipo_trabajador; 	Salida _salida; publicFiltro(SuperTipo trabajador, Salida salida){ super(); 		_trabajador = trabajador; 		_salida = salida; 	} publicsynchronizedvoid tratar(){ while(!_flag) 			try{wait();}catch(InterruptedExceptionexc){;} if(_primo == -1) {//Si es el primero 			_primo = _dato; 			_salida.mostrar(_dato); 		} else{//No es el primero if((_dato%_primo)!=0)//No es divisible por el 1er numero 			_trabajador.escribirDato(_dato); 		} 		_flag = false; notify();//Solo puede estar en el este WS el filtro anterior, esperando para escribir 	} }
Código de Filtro public class Filtro extends SuperTipo{ int_primo = -1; SuperTipo_trabajador; 	Salida _salida; publicFiltro(SuperTipo trabajador, Salida salida){ super(); 		_trabajador = trabajador; 		_salida = salida; 	} publicsynchronizedvoid tratar(){ while(!_flag) 			try{wait();}catch(InterruptedExceptionexc){;} if(_primo == -1) {//Si es el primero 			_primo = _dato; 			_salida.mostrar(_dato); 		} else{//No es el primero if((_dato%_primo)!=0)//No es divisible por el 1er numero 			_trabajador.escribirDato(_dato); 		} 		_flag = false; notify();//Solo puede estar en el este WS el filtro anterior, esperando para escribir 	} } Contiene un dato, un método para pasárselo y el método run. Mientras no hay dato: ESPERA Si el dato es el primero en llegar: es primo y lo guardamos y mostramos El dato NO es divisible por nuestro nº primo: Lo pasamos al siguiente filtro
Código Consumidor A la instancia de esta clase llegaran números cuando todos los filtros hayan calculado los primos. (Llegan los que no se han podido comprobar si son primos por que no hay suficientes filtros) publicclass Consumidor extendsSuperTipo{ publicsynchronizedvoid tratar(){ while(!_flag) 			try{wait();}catch(InterruptedExceptionexc){;} System.out.println("Posible candidato: " + _dato ); 		_flag = false; notify(); 	} }
Código Consumidor A la instancia de esta clase llegaran números cuando todos los filtros hayan calculado los primos. (Llegan los que no se han podido comprobar si son primos por que no hay suficientes filtros) Contiene un dato, un método para pasárselo y el método run. publicclass Consumidor extendsSuperTipo{ publicsynchronizedvoid tratar(){ while(!_flag) 			try{wait();}catch(InterruptedExceptionexc){;} System.out.println("Posible candidato: " + _dato ); 		_flag = false; notify(); 	} } Si tiene un dato, lo muestra por pantalla.
CodigoMain publicclass Principal { 	//Constantes para el numero de filtros y numeros a generar. 	static private final intNUMFILTROS = 15; 	static private final intULTIMO = 100; public static void main(String[] args) { SuperTipomyConsumidor = new Consumidor(); 		Salida mySalida = new Salida(); SuperTipovectorFiltros[] = new Filtro[NUMFILTROS]; vectorFiltros[NUMFILTROS-1] = new Filtro(myConsumidor,mySalida); for(inti=NUMFILTROS-2; i>= 0; i--) vectorFiltros[i] = new Filtro(vectorFiltros[i+1],mySalida); NumerosmyNumeros = new Numeros(vectorFiltros[0],ULTIMO); myNumeros.start(); myConsumidor.start(); for(inti=0; i < NUMFILTROS; i++) vectorFiltros[i].start(); } }
CodigoMain publicclass Principal { 	//Constantes para el numero de filtros y numeros a generar. 	static private final intNUMFILTROS = 15; 	static private final intULTIMO = 100; public static void main(String[] args) {  Salida mySalida = new Salida(); SuperTipomyConsumidor = new Consumidor(); SuperTipovectorFiltros[] = new Filtro[NUMFILTROS]; vectorFiltros[NUMFILTROS-1] = new Filtro(myConsumidor,mySalida); for(inti=NUMFILTROS-2; i>= 0; i--) vectorFiltros[i] = new Filtro(vectorFiltros[i+1],mySalida); NumerosmyNumeros = new Numeros(vectorFiltros[0],ULTIMO); myNumeros.start(); myConsumidor.start(); for(inti=0; i < NUMFILTROS; i++) vectorFiltros[i].start(); } } Creamos el consumidor, los filtros (pasándole a cada uno el siguiente[al ultimo se le pasa el consumidor]) y el generador de números, pasándole el 1er filtro. Ejecutamos los filtros, el consumidor y el generador de números.

Más contenido relacionado

La actualidad más candente

Ejemplos de estructura de control semestre 2
Ejemplos de estructura de control semestre 2Ejemplos de estructura de control semestre 2
Ejemplos de estructura de control semestre 2K Manuel TN
 
Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009mtemarialuisa
 
Jerarquía de clases de awt
Jerarquía de clases de awtJerarquía de clases de awt
Jerarquía de clases de awtBoris Salleg
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresChristian Lara
 
53692670 arduino-programacion
53692670 arduino-programacion53692670 arduino-programacion
53692670 arduino-programacionCesar Castelo
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisorSoraya Lara
 
Ejercicio 8
Ejercicio 8Ejercicio 8
Ejercicio 8ismaxmax
 
Tecladomatricial
TecladomatricialTecladomatricial
Tecladomatricialsystemgil
 
Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Andres Garcia Garcia
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CDiego Santimateo
 

La actualidad más candente (20)

Ejemplos de estructura de control semestre 2
Ejemplos de estructura de control semestre 2Ejemplos de estructura de control semestre 2
Ejemplos de estructura de control semestre 2
 
Prac 1 nequiz
Prac 1 nequizPrac 1 nequiz
Prac 1 nequiz
 
Prac 1 alda
Prac 1 aldaPrac 1 alda
Prac 1 alda
 
Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009
 
Problema aplicativo sql
Problema aplicativo sqlProblema aplicativo sql
Problema aplicativo sql
 
Jerarquía de clases de awt
Jerarquía de clases de awtJerarquía de clases de awt
Jerarquía de clases de awt
 
Presentacion
PresentacionPresentacion
Presentacion
 
ESTRUCTURA DE JAVA
ESTRUCTURA DE JAVAESTRUCTURA DE JAVA
ESTRUCTURA DE JAVA
 
Analizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladoresAnalizador de una matriz utilizando compiladores
Analizador de una matriz utilizando compiladores
 
Guia rompecabezas
Guia  rompecabezasGuia  rompecabezas
Guia rompecabezas
 
53692670 arduino-programacion
53692670 arduino-programacion53692670 arduino-programacion
53692670 arduino-programacion
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Tema02 sqlite studio
Tema02 sqlite studioTema02 sqlite studio
Tema02 sqlite studio
 
GEOMETRIC COMPUTER PROGRAMA DE BD
GEOMETRIC COMPUTER PROGRAMA DE BDGEOMETRIC COMPUTER PROGRAMA DE BD
GEOMETRIC COMPUTER PROGRAMA DE BD
 
Ejercicio 8
Ejercicio 8Ejercicio 8
Ejercicio 8
 
Tecladomatricial
TecladomatricialTecladomatricial
Tecladomatricial
 
Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5
 
In 21
In 21In 21
In 21
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
 

Destacado

Destacado (10)

Quem foi hiparco e quais suas contribuições à trigonometria
Quem foi hiparco e quais suas contribuições à trigonometria  Quem foi hiparco e quais suas contribuições à trigonometria
Quem foi hiparco e quais suas contribuições à trigonometria
 
Euclides
EuclidesEuclides
Euclides
 
Hiparco de nicea
Hiparco de niceaHiparco de nicea
Hiparco de nicea
 
Hiparco de nicea
Hiparco de niceaHiparco de nicea
Hiparco de nicea
 
Euclides (presentacion slideshare)
Euclides (presentacion slideshare)Euclides (presentacion slideshare)
Euclides (presentacion slideshare)
 
euclides
euclideseuclides
euclides
 
Euclides En Clase Presentacion
Euclides En Clase PresentacionEuclides En Clase Presentacion
Euclides En Clase Presentacion
 
ArquíMedes
ArquíMedesArquíMedes
ArquíMedes
 
TRÁNSITO DE LA EDAD MEDIA A LA EDAD MODERNA
TRÁNSITO DE LA EDAD MEDIA A LA EDAD MODERNATRÁNSITO DE LA EDAD MEDIA A LA EDAD MODERNA
TRÁNSITO DE LA EDAD MEDIA A LA EDAD MODERNA
 
Aristoteles
AristotelesAristoteles
Aristoteles
 

Similar a Explicacion

la estruturas de la programacion basicas de las POO
la estruturas de la programacion basicas de las POOla estruturas de la programacion basicas de las POO
la estruturas de la programacion basicas de las POOAmado Arcaya
 
Tdd y clean code SG campus
Tdd y clean code SG campusTdd y clean code SG campus
Tdd y clean code SG campusSoftware Guru
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)Videoconferencias UTPL
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Carlos Posada
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Juan Cardona
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosmellcv
 
Prueba programacion
Prueba programacionPrueba programacion
Prueba programacionMarti Matura
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++Riki Tapia
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datosRiki Tapia
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2xjordi
 
Ejercidos resueltos en java para el portafolio
Ejercidos resueltos en java para el portafolioEjercidos resueltos en java para el portafolio
Ejercidos resueltos en java para el portafolioJesica Pérez
 

Similar a Explicacion (20)

la estruturas de la programacion basicas de las POO
la estruturas de la programacion basicas de las POOla estruturas de la programacion basicas de las POO
la estruturas de la programacion basicas de las POO
 
Tdd y clean code SG campus
Tdd y clean code SG campusTdd y clean code SG campus
Tdd y clean code SG campus
 
algoritmos distribuidos
algoritmos distribuidosalgoritmos distribuidos
algoritmos distribuidos
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
 
Twig
TwigTwig
Twig
 
P1
P1P1
P1
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
 
Prueba programacion
Prueba programacionPrueba programacion
Prueba programacion
 
MéTodos Java
MéTodos JavaMéTodos Java
MéTodos Java
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Metodologia de la Programción
Metodologia de la ProgramciónMetodologia de la Programción
Metodologia de la Programción
 
Practicas
PracticasPracticas
Practicas
 
Ejemploc de caso
Ejemploc de casoEjemploc de caso
Ejemploc de caso
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2
 
Trabajo1
Trabajo1Trabajo1
Trabajo1
 
Ejercidos resueltos en java para el portafolio
Ejercidos resueltos en java para el portafolioEjercidos resueltos en java para el portafolio
Ejercidos resueltos en java para el portafolio
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
 

Explicacion

  • 1. Criba de Eratóstenes Escribir dato() CONSUMIDOR Escribir dato() NUMEROS FILTRO FILTRO Escribir dato() DATO DATO DATO Número Número Número ……….. Tratar() GeneraNumero() Tratar() Tratar() SALIDA
  • 2. Código Generador de Numeros: public class Numeros extends Thread{ intinicial = 2; int_final; SuperTipo_filtro; publicNumeros(SuperTipo filtro, int ultimo){ _filtro = filtro; _final = ultimo; } publicvoidgenerarNumero(){ _filtro.escribirDato(inicial++); } publicvoidrun(){ for(int i = 2; i<=_final; i++){ generarNumero(); } } }
  • 3. Código Generador de Numeros: public class Numeros extends Thread{ intinicial = 2; int_final; SuperTipo_filtro; publicNumeros(SuperTipo filtro, int ultimo){ _filtro = filtro; _final = ultimo; } publicvoidgenerarNumero(){ _filtro.escribirDato(inicial++); } publicvoidrun(){ for(int i = 2; i<=_final; i++){ generarNumero(); } } } Envía un numero al primer filtro
  • 4. Código de Supertipo: Como Filtro y Consumidor se comportan de manera parecida, ambos extienden la siguiente clase: public abstract class SuperTipo extends Thread { int_dato; boolean_flag = false; public synchronized void escribirDato(intdato){ while(_flag) try{wait();}catch(InterruptedExceptionexc){;} _dato = dato; _flag = true; notify();//Solo puede haber un filtro esperando datos en el WS } abstractvoid tratar(); publicvoidrun(){ while(true){//Se nos va a producir una situacion de interbloqueo //ya que los filtros se quedan esperando numeros. tratar(); } } }
  • 5. Código de Supertipo: Como Filtro y Consumidor se comportan de manera parecida, ambos extienden la siguiente clase: public abstract class SuperTipo extends Thread { int_dato; boolean_flag = false; public synchronized void escribirDato(intdato){ while(_flag) try{wait();}catch(InterruptedExceptionexc){;} _dato = dato; _flag = true; notify();//Solo puede haber un filtro esperando datos en el WS } abstractvoid tratar(); publicvoidrun(){ while(true){//Se nos va a producir una situacion de interbloqueo //ya que los filtros se quedan esperando numeros. tratar(); } } } Recibe un dato de otro elemento del programa. Trata el elemento almacenado
  • 6. Código de Filtro public class Filtro extends SuperTipo{ int_primo = -1; SuperTipo_trabajador; Salida _salida; publicFiltro(SuperTipo trabajador, Salida salida){ super(); _trabajador = trabajador; _salida = salida; } publicsynchronizedvoid tratar(){ while(!_flag) try{wait();}catch(InterruptedExceptionexc){;} if(_primo == -1) {//Si es el primero _primo = _dato; _salida.mostrar(_dato); } else{//No es el primero if((_dato%_primo)!=0)//No es divisible por el 1er numero _trabajador.escribirDato(_dato); } _flag = false; notify();//Solo puede estar en el este WS el filtro anterior, esperando para escribir } }
  • 7. Código de Filtro public class Filtro extends SuperTipo{ int_primo = -1; SuperTipo_trabajador; Salida _salida; publicFiltro(SuperTipo trabajador, Salida salida){ super(); _trabajador = trabajador; _salida = salida; } publicsynchronizedvoid tratar(){ while(!_flag) try{wait();}catch(InterruptedExceptionexc){;} if(_primo == -1) {//Si es el primero _primo = _dato; _salida.mostrar(_dato); } else{//No es el primero if((_dato%_primo)!=0)//No es divisible por el 1er numero _trabajador.escribirDato(_dato); } _flag = false; notify();//Solo puede estar en el este WS el filtro anterior, esperando para escribir } } Contiene un dato, un método para pasárselo y el método run. Mientras no hay dato: ESPERA Si el dato es el primero en llegar: es primo y lo guardamos y mostramos El dato NO es divisible por nuestro nº primo: Lo pasamos al siguiente filtro
  • 8. Código Consumidor A la instancia de esta clase llegaran números cuando todos los filtros hayan calculado los primos. (Llegan los que no se han podido comprobar si son primos por que no hay suficientes filtros) publicclass Consumidor extendsSuperTipo{ publicsynchronizedvoid tratar(){ while(!_flag) try{wait();}catch(InterruptedExceptionexc){;} System.out.println("Posible candidato: " + _dato ); _flag = false; notify(); } }
  • 9. Código Consumidor A la instancia de esta clase llegaran números cuando todos los filtros hayan calculado los primos. (Llegan los que no se han podido comprobar si son primos por que no hay suficientes filtros) Contiene un dato, un método para pasárselo y el método run. publicclass Consumidor extendsSuperTipo{ publicsynchronizedvoid tratar(){ while(!_flag) try{wait();}catch(InterruptedExceptionexc){;} System.out.println("Posible candidato: " + _dato ); _flag = false; notify(); } } Si tiene un dato, lo muestra por pantalla.
  • 10. CodigoMain publicclass Principal { //Constantes para el numero de filtros y numeros a generar. static private final intNUMFILTROS = 15; static private final intULTIMO = 100; public static void main(String[] args) { SuperTipomyConsumidor = new Consumidor(); Salida mySalida = new Salida(); SuperTipovectorFiltros[] = new Filtro[NUMFILTROS]; vectorFiltros[NUMFILTROS-1] = new Filtro(myConsumidor,mySalida); for(inti=NUMFILTROS-2; i>= 0; i--) vectorFiltros[i] = new Filtro(vectorFiltros[i+1],mySalida); NumerosmyNumeros = new Numeros(vectorFiltros[0],ULTIMO); myNumeros.start(); myConsumidor.start(); for(inti=0; i < NUMFILTROS; i++) vectorFiltros[i].start(); } }
  • 11. CodigoMain publicclass Principal { //Constantes para el numero de filtros y numeros a generar. static private final intNUMFILTROS = 15; static private final intULTIMO = 100; public static void main(String[] args) { Salida mySalida = new Salida(); SuperTipomyConsumidor = new Consumidor(); SuperTipovectorFiltros[] = new Filtro[NUMFILTROS]; vectorFiltros[NUMFILTROS-1] = new Filtro(myConsumidor,mySalida); for(inti=NUMFILTROS-2; i>= 0; i--) vectorFiltros[i] = new Filtro(vectorFiltros[i+1],mySalida); NumerosmyNumeros = new Numeros(vectorFiltros[0],ULTIMO); myNumeros.start(); myConsumidor.start(); for(inti=0; i < NUMFILTROS; i++) vectorFiltros[i].start(); } } Creamos el consumidor, los filtros (pasándole a cada uno el siguiente[al ultimo se le pasa el consumidor]) y el generador de números, pasándole el 1er filtro. Ejecutamos los filtros, el consumidor y el generador de números.