elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8
21  Programación / Java / Re: mejorar codigo en: 2 Enero 2015, 16:04 pm
Gracias nullpointer, miro lo de la clase envoltorio. Lo del array me parece buena idea.
22  Programación / Java / mejorar codigo en: 20 Diciembre 2014, 22:04 pm
Vereis estoy intentando sacar este enunciado:
Desarrollar un programa que simule un pluviómetro en el que se van registrando las precipitaciones a lo largo del año. En cualquier momento, se le pueden pedir las medias de un mes concreto o del año completo.

Utilizar constantes para especificar el mes.

Por último, crearemos una clase Actividad8 donde instanciaremos el pluviómetro, registraremos algunas precipitaciones para los distintos meses y mostraremos las medias de precipitación de todos los meses y del año.


Lo he logrado mas o menos, pero me parece que podria estar mucho mas optimizado. He picado demasiado codigo creo yo que repetitivo. Pero no quiero usar la clase hashtable, quiero hacerlo todo de un modo lo mas rudimentario posible, sin usar clases externas. Os pego lo que tengo para ver si alguien me puede decir como mejorarlo y optimizarlo.

Código:
public interface Meses {

public static final String ENERO = "Enero";
public static final String FEBRERO = "Febrero";
public static final String MARZO = "Marzo";
public static final String ABRIL = "Abril";
public static final String MAYO = "Mayo";
public static final String JUNIO = "Junio";
public static final String JULIO = "Julio";
public static final String AGOSTO = "Agosto";
public static final String SEPTIEMBRE = "Septiembre";
public static final String OCTUBRE = "Octubre";
public static final String NOVIEMBRE = "Noviembre";
public static final String DICIEMBRE = "Diciembre";
}

Código:
import java.util.ArrayList;

public class Pluviometro implements Meses{
ArrayList<Double> arrayEnero = new ArrayList<Double>();
ArrayList<Double> arrayFebrero = new ArrayList<Double>();
ArrayList<Double> arrayMarzo = new ArrayList<Double>();
ArrayList<Double> arrayAbril = new ArrayList<Double>();
ArrayList<Double> arrayMayo = new ArrayList<Double>();
ArrayList<Double> arrayJunio = new ArrayList<Double>();
ArrayList<Double> arrayJulio = new ArrayList<Double>();
ArrayList<Double> arrayAgosto = new ArrayList<Double>();
ArrayList<Double> arraySeptiembre = new ArrayList<Double>();
ArrayList<Double> arrayOctubre = new ArrayList<Double>();
ArrayList<Double> arrayNoviembre = new ArrayList<Double>();
ArrayList<Double> arrayDiciembre = new ArrayList<Double>();

double precipitacionEnero, precipitacionFebrero, precipitacionMarzo,
precipitacionAbril, precipitacionMayo, precipitacionJunio, precipitacionJulio,
precipitacionAgosto, precipitacionSeptiembre, precipitacionOctubre,
precipitacionNoviembre, precipitacionDiciembre;



public void setPrecipitacion(String m, double precipitacion){
if (m.equalsIgnoreCase("Enero")){
arrayEnero.add(precipitacion);
precipitacionEnero = precipitacion;}

if (m.equalsIgnoreCase("Febrero")){
arrayFebrero.add(precipitacion);
precipitacionFebrero = precipitacion;}

if (m.equalsIgnoreCase("Marzo")){
arrayMarzo.add(precipitacion);
precipitacionMarzo = precipitacion;}

if (m.equalsIgnoreCase("Abril")){
arrayAbril.add(precipitacion);
precipitacionAbril = precipitacion;}

if (m.equalsIgnoreCase("Mayo")){
arrayMayo.add(precipitacion);
precipitacionMayo = precipitacion;}

if (m.equalsIgnoreCase("Junio")){
arrayJunio.add(precipitacion);
precipitacionJunio = precipitacion;}
if (m.equalsIgnoreCase("Julio")){
arrayJulio.add(precipitacion);
precipitacionJulio = precipitacion;}

if (m.equalsIgnoreCase("Agosto")){
arrayAgosto.add(precipitacion);
precipitacionAgosto = precipitacion;}

if (m.equalsIgnoreCase("Septiembre")){
arraySeptiembre.add(precipitacion);
precipitacionSeptiembre = precipitacion;}

if (m.equalsIgnoreCase("Octubre")){
arrayOctubre.add(precipitacion);
precipitacionOctubre = precipitacion;}

if (m.equalsIgnoreCase("Noviembre")){
arrayNoviembre.add(precipitacion);
precipitacionNoviembre = precipitacion;}

if (m.equalsIgnoreCase("Diciembre")){
arrayDiciembre.add(precipitacion);
precipitacionDiciembre = precipitacion;}

}


public double getPrecipitacion(String m){
if (m.equalsIgnoreCase("Enero")){
return precipitacionEnero;}
if (m.equalsIgnoreCase("Febrero")){
return precipitacionFebrero;}
if (m.equalsIgnoreCase("Marzo")){
return precipitacionMarzo;}
if (m.equalsIgnoreCase("Abril")){
return precipitacionAbril;}
if (m.equalsIgnoreCase("Mayo")){
return precipitacionMayo;}
if (m.equalsIgnoreCase("Junio")){
return precipitacionJunio;}
if (m.equalsIgnoreCase("Julio")){
return precipitacionJulio;}
if (m.equalsIgnoreCase("Agosto")){
return precipitacionAgosto;}
if (m.equalsIgnoreCase("Septiembre")){
return precipitacionSeptiembre;}
if (m.equalsIgnoreCase("Octubre")){
return precipitacionOctubre;}
if (m.equalsIgnoreCase("Noviembre")){
return precipitacionNoviembre;}
return precipitacionDiciembre;
}

public double precipitacionMedia(String m){
double precipitacionTotal = 0;

if (m.equalsIgnoreCase("Enero")){
for (int a=0; a < arrayEnero.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayEnero.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Febrero")){
for (int a=0; a < arrayFebrero.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayFebrero.get(a);
}
return precipitacionTotal/28;}

if (m.equalsIgnoreCase("Marzo")){
for (int a=0; a < arrayMarzo.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayMarzo.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Abril")){
for (int a=0; a < arrayAbril.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayAbril.get(a);
}
return precipitacionTotal/30;}

if (m.equalsIgnoreCase("Mayo")){
for (int a=0; a < arrayMayo.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayMayo.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Junio")){
for (int a=0; a < arrayJunio.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayJunio.get(a);
}
return precipitacionTotal/30;}

if (m.equalsIgnoreCase("Julio")){
for (int a=0; a < arrayJulio.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayJulio.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Agosto")){
for (int a=0; a < arrayAgosto.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayAgosto.get(a);
}

if (m.equalsIgnoreCase("Septiembre")){
for (int a=0; a < arraySeptiembre.size(); a++){
precipitacionTotal = precipitacionTotal+ arraySeptiembre.get(a);
}
return precipitacionTotal/30;}

if (m.equalsIgnoreCase("Octubre")){
for (int a=0; a < arrayOctubre.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayOctubre.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Noviembre")){
for (int a=0; a < arrayNoviembre.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayNoviembre.get(a);
}
return precipitacionTotal/30;}

return precipitacionTotal/31;}

return precipitacionTotal/31;
}
}

Código:
public class Actividad {

public static void main(String[] args) {
Pluviometro p = new Pluviometro();
for (int a=1; a<= 31; a++){
p.setPrecipitacion(Meses.ENERO,Math.random());
System.out.println("Precipitacion dia "+a+" Enero:"+p.getPrecipitacion(Meses.ENERO));}
System.out.println("La PRECIPITACION MEDIA DEL MES DE ENERO ES: "+p.precipitacionMedia("eNero"));
System.out.println("");
for (int a=1; a<= 28; a++){
p.setPrecipitacion(Meses.FEBRERO,Math.random());
System.out.println("Precipitacion dia "+a+" Febrero:"+p.getPrecipitacion(Meses.FEBRERO));}
System.out.println("La PRECIPITACION MEDIA DEL MES DE FEBRERO ES: "+p.precipitacionMedia("febrero"));
System.out.println("");
}

}
23  Programación / Java / Re: HashTable en: 18 Octubre 2014, 22:24 pm
Me autorespondo por si a alguien interesa:

Código:
public class Parte {

private String matricula;
private String codigo;
private String descripcion;
private double importe;

public Parte (String matricula,String codigo, String descripcion, double importe){
this.matricula = matricula;
this.codigo = codigo;
this.descripcion = descripcion;
this.importe = importe;
}

public void setMatricula(String matricula){
this.matricula = matricula;
}

public void setCodigo(String codigo){
this.codigo = codigo;
}

public void setDescripcion (String descripcion){
this.descripcion = descripcion;
}

public void setImporte(double importe){
this.importe = importe;
}

public String getMatricula(){
return matricula;
}

public String getCodigo(){
return codigo;
}

public String getDescripcion(){
return descripcion;
}

public double getImporte(){
return importe;
}

}

Código:
import java.util.*;

public class GestorPartes {
Hashtable <String, ArrayList<Parte>> ht = new Hashtable<String, ArrayList<Parte>>();
Parte p;
public void crearParte(){


@SuppressWarnings("resource")
Scanner teclado = new Scanner(System.in);
System.out.println("Introduce la matricula del vehiculo: ");
String matricula = teclado.nextLine();
System.out.println("Introduce el codigo de la averia: ");
String codigo = teclado.nextLine();
System.out.println("Introduce la descripcion de la averia: ");
String descripcion = teclado.nextLine();
System.out.println("Introduce el importe de la averia: ");
double importe = teclado.nextDouble();
p = new Parte (matricula,codigo,descripcion,importe);
if (!ht.containsKey(p.getMatricula())){
ArrayList<Parte> ArrPartes = new ArrayList<Parte>();
ht.put(p.getMatricula(), ArrPartes);
ht.get(p.getMatricula()).add(p);
} else
ht.get(p.getMatricula()).add(p);
}

public void mostrar(){

if(ht.containsKey(p.getMatricula())){
ArrayList<Parte> ArrPartes = ht.get(p.getMatricula());
Iterator<Parte> itPart = ArrPartes.iterator();
while (itPart.hasNext()){
Parte p = itPart.next();
System.out.println("========");
System.out.println("Matricula: " + p.getMatricula()+ "\n" +
"Codigo: " + p.getCodigo() + "\n" +
"Descripción: " + p.getDescripcion() + "\n" +
"Importe: " + p.getImporte() + "\n");
}
} else
System.out.println("Objeto no localizado");
}

public void listar(){
Set<String> keysmatri = ht.keySet();
Iterator<String> itMatri = keysmatri.iterator();
while (itMatri.hasNext()){
itMatri.hasNext();
String matricula = itMatri.next();
ArrayList<Parte> ArrPartes = ht.get(matricula);
Iterator<Parte> itPart = ArrPartes.iterator();
while(itPart.hasNext()){
Parte p = itPart.next();
System.out.println("========");
System.out.println("Matricula: " + p.getMatricula()+ "\n" +
"Codigo: " + p.getCodigo() + "\n" +
"Descripción: " + p.getDescripcion() + "\n" +
"Importe: " + p.getImporte() + "\n");
}
}
}

public void eliminar(){
if(ht.containsKey(p.getMatricula())){
ht.get(p.getMatricula()).remove(p);
}
}
}

Código:
import java.util.*;

public class Principal {

private static GestorPartes gp = new GestorPartes();

public static void main(String[] args) {
int opcion = 0;
do{
@SuppressWarnings("resource")
Scanner teclado = new Scanner(System.in);
System.out.println("SELECCIONA UNA OPCION......");
System.out.println("[1] CREAR PARTE");
System.out.println("[2] LISTAR PARTE");
System.out.println("[3] ELIMINAR PARTE");
System.out.println("[4] LISTAR TODOS LOS PARTES");
System.out.println("[5] SALIR");
opcion = teclado.nextInt();
switch(opcion){
case 1: gp.crearParte(); break;
case 2: gp.mostrar(); break;
case 3: gp.eliminar(); break;
case 4: gp.listar();
case 5: System.out.println("Fin del Programa"); System.exit(0);
default: System.out.println("Teclea una opcion valida"); break;
}
}while (opcion != 5);

}

}
24  Programación / Java / HashTable en: 7 Junio 2014, 09:51 am
Vereis se me pide hacer el siguiente ejercicio:

Desarrollar un sistema de gestión de partes de un taller mecánico.

La información de los partes es: código, descripción e importe. Un parte irá asociado a la matrícula de un coche de manera que podamos añadir, mostrar y eliminar un parte a partir de la matrícula de coche al que está asociado.

La clase Main mostrará un menú de opciones por consola: crear, listar, mostrar y eliminar partes. También habrá una opción de salir. Utilizar alguna de las estructuras de datos dinámicos.


He estado pensando en realizarlo con HashTable, usando la matricula del vehiculo como parametro ID, y me gustaria que codigo, descripcion e importe sean el parametro VALOR de dicho ID. No se si es posible hacer eso porque nunca he trabajado con hashtable pero por lo que veo los parametros de su constructor son dos, el correspondiente a ID y el correspondiente a su VALOR asociado. Imagino que puedo crear una clase llamada Partes con un constructor en el que se introduzcan los tres valores (codigo, descripcion e importe) y luego crear un metodo tipo string que muestre los tres valores juntos. Y despues desde otra clase hashtable llamar a dicho metodo. Es esto posible o me estoy haciendo un lio?
25  Programación / Java / Re: pilas y interface en: 24 Mayo 2014, 13:36 pm
Gracias Migugami, se que el ejercicio resuelto esta en internet, pero no es ese mi objetivo, para aprender no debo mirarlo, debo desarrollarlo yo mismo, sino que gracia tendria?

Aprendo java porque me gusta la programacion, no tiene sentido copiar para no aprender nada, lo que quiero es aprender y lo mejor posible.

 Un saludo y gracias a los dos compañeros por responder, es lo que buscaba.

Una ultima duda porque creas la clase Nodo? No entiendo el porque? Sin ella el programa no podria funcionar?
26  Programación / Java / pilas y interface en: 23 Mayo 2014, 10:56 am
Estoy con el siguiente ejercicio:

Desarrollar una implementacion de una lista del tipo pila o LIFO (last input first output) y de una lista del tipo cola o FIFO (first input first output). Las implementaciones deben ser genericas, es decir, deben aceptar cualquier tipo de objeto.
Ademas definir un tipo generico Lista imponga el API generico de cualquier tipo de lista (añadir y extraer elementos).
La clase actividad4 tiene un metodo main en el que se crearan los dos tipos de lsita se les añadira los mismos elementos y en el mismo orden. Se comprobara el orden en el que se extraen los elementos en cada lista.

No es mi intencion que se me realice el ejercicio, solo pido consejo. He pensado en crear una interface llamada Pila, y luego dos clases que implementan esa interface, una se llamaria Lifo y la otra Fifo. Mi pregunta es la siguiente, cuando me dice que las implementaciones deben ser genericas y deben aceptar cualquier tipo de objeto a que se refiere? que debemos pasarle al metodo un parametro de tipo object?
TAmpoco entiendo a que se refiere cuando dice: Ademas definir un tipo generico Lista imponga el API generico de cualquier tipo de lista (añadir y extraer elementos).

Alguien puede arrojarme un poco de luz? no quiero el codigo, quiero entender lo que se me pide y como implementarlo pero sin que me deis el codigo. Un saludo.
27  Programación / Java / Re: swing binario decimal en: 19 Mayo 2014, 18:36 pm
Bueno, ya lo he solventado, tema de colocar dos botones con un condicional.
El codigo seguramente es mejorable, he usado ArrayList, cambiado varios int por long para que los valores convertibles sean mayores y modificado alguna pequeña cosa. Comparto por si a alguno le es de utilidad y aceptaria que alguien repase el codigo por si ve mejoras del tipo que sean. Una cosa que veo mejorable es que cuando intento convertir un numero decimal superior al millon en binario el resultado no me lo da como binario sino como exponencial y no se a que se puede deber.

Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;


public class BinDecimal extends JFrame implements ActionListener {



private static final long serialVersionUID = 1L;
private JLabel etiqueta,etiqueta2;
private JTextField texto,texto2,binario,binario2;
private JButton boton,boton2;
public ActionListener metodoBoton;





public BinDecimal(String titulo)
{
super(titulo);
texto=new JTextField(10);
texto2=new JTextField(10);
etiqueta=new JLabel("Escribe en binario para convertir a decimal");
etiqueta2=new JLabel("Escribe en decimal para convertir a binario");
binario=new JTextField("0",20);
binario2=new JTextField("0",20);
binario.setEditable(false);
binario2.setEditable(false);
boton=new JButton("Convertir");
boton2=new JButton("Convertir");
boton.setMnemonic(KeyEvent.VK_C);
boton.setToolTipText("Convertir a decimal");
boton2.setMnemonic(KeyEvent.VK_C);
boton2.setToolTipText("Convertir a binario");
JPanel panel=new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT,4,4));
panel.add(etiqueta);
panel.add(texto);
panel.add(boton);
panel.add(binario);
panel.add(etiqueta2);
panel.add(texto2);
panel.add(boton2);
panel.add(binario2);
getContentPane().add(panel);
boton.addActionListener(this);
boton2.addActionListener(this);

}



public void actionPerformed(ActionEvent evento)
{
ArrayList<Long> array1 = new ArrayList<Long>();
ArrayList<Long> array2 = new ArrayList<Long>();
int i = 0;
int j = 0;
long resto = 0;
long resultado1 = 0;
long resultado2 = 0;
String cadena, cadena2;

if (evento.getSource()==boton) {
long numero = Long.parseLong(texto.getText());



do{
resto = numero % 10;
array1.add(resto);
numero /= 10;
resultado1 = array1.get(i)*(long)Math.pow(2.0, i)+resultado1;
i++;
} while (numero != 0);

cadena = Long.toString(resultado1);
binario.setText(cadena);
}

if (evento.getSource()==boton2) {
long numero2 = Long.parseLong(texto2.getText());

do{
resto = numero2 % 2;
array2.add(resto);
numero2 /= 2;
resultado2 = array2.get(j)*(long)Math.pow(10.0, j)+resultado2;
j++;
} while (numero2 != 0);

cadena2 = Long.toString(resultado2);
binario2.setText(cadena2);
}
}



public static void main(String args[])
{
BinDecimal programa=new BinDecimal("Conversor Binarios y Decimales");
programa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
programa.setSize(720,120);
programa.setLocation(200,300);
programa.setVisible(true);
}
}
28  Programación / Java / swing binario decimal en: 18 Mayo 2014, 12:37 pm
Hola, vereis he estado desarrollando un programa que convierte un numero binario en decimal y otro decimal en binario. Una vez logrado por consola he intentado mejorarlo con un gui con swing. Pero como no controlo mucho tengo un error que no se donde se produce con el tema de los actionevent imagino. Os pego codigo a ver si alguien me puede echar un cable. Un saludo.
Código:
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class BinDecimal extends JFrame implements ActionListener {



private static final long serialVersionUID = 1L;
private JLabel etiqueta,etiqueta2;
private JTextField texto,texto2,binario,binario2;
private JButton boton,boton2;
public ActionListener metodoBoton;





public BinDecimal(String titulo)
{
super(titulo);
texto=new JTextField(10);
texto2=new JTextField(10);
etiqueta=new JLabel("Escribe en binario para convertir a decimal");
etiqueta2=new JLabel("Escribe en decimal para convertir a binario");
binario=new JTextField("0",10);
binario2=new JTextField("0",10);
binario.setEditable(false);
binario2.setEditable(false);
boton=new JButton("Convertir");
boton2=new JButton("Convertir");
boton.setMnemonic(KeyEvent.VK_C);
boton.setToolTipText("Convertir a decimal");
boton2.setMnemonic(KeyEvent.VK_C);
boton2.setToolTipText("Convertir a binario");
JPanel panel=new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT,4,4));
panel.add(etiqueta);
panel.add(texto);
panel.add(boton);
panel.add(binario);
panel.add(etiqueta2);
panel.add(texto2);
panel.add(boton2);
panel.add(binario2);


getContentPane().add(panel);
boton.addActionListener(this);
boton2.addActionListener(this);

}



public void actionPerformed(ActionEvent evento)
{
int[] array1 = new int[20];
int[] array2 = new int[20];
int i = 0;
int j = 0;
int resultado1 = 0;
int resultado2 = 0;
String cadena, cadena2;


int numero = Integer.parseInt(texto.getText());


do{
array1[i] = numero % 10;
numero /= 10;
resultado1 = array1[i]*(int)Math.pow(2.0, i)+resultado1;
i++;
} while (numero != 0);
cadena = Integer.toString(resultado1);
binario.setText(cadena);

int numero2 = Integer.parseInt(texto2.getText());

do{
array2[j] = numero2 % 2;
numero2 /= 2;
resultado2 = array2[j]*(int)Math.pow(10.0, j)+resultado2;
j++;
} while (numero2 != 0);
cadena2 = Integer.toString(resultado2);
binario2.setText(cadena2);
}



public static void main(String args[])
{
BinDecimal programa=new BinDecimal("Convertir de binario a decimal");
programa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
programa.setSize(600,120);
programa.setLocation(400,450);
programa.setVisible(true);
}
}
29  Programación / Programación C/C++ / Re: Registro en C en: 9 Enero 2014, 18:39 pm
Segun he leido lo unica idea que me surje es que como regCreateKey es una funcion descatalogada deba usar regCreateKeyEx, y lo he hecho, he modificado el source pasandole los parametros y ni por esas he logrado incluir la entrada de registro. He ejecutado el .exe como administrador y tampoco ha creado la entrada en el registro. No se que hago mal.
30  Programación / Programación C/C++ / Registro en C en: 9 Enero 2014, 15:57 pm
Alguien sabe porque este codigo no crea una entrada en el registro corriendo un S.O. win7?

Código:
int test_key(void)
{
   int check;
   HKEY hKey;
   char path[BUFSIZE];
   DWORD buf_length=BUFSIZE;
   int reg_key;

   reg_key=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_QUERY_VALUE,&hKey);
   if(reg_key!=0)
   {
       check=1;
       return check;
   }

   reg_key=RegQueryValueEx(hKey,"svchosts",NULL,NULL,(LPBYTE)path,&buf_length);

   if((reg_key!=0)||(buf_length>BUFSIZE))
       check=2;
   if(reg_key==0)
       check=0;

   RegCloseKey(hKey);
   return check;
}

int create_key(char *path)
{
       int reg_key,check;

       HKEY hkey;

       reg_key=RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey);
       if(reg_key==0)
       {
               RegSetValueEx((HKEY)hkey,"svchosts",0,REG_SZ,(BYTE *)path,strlen(path));
               check=0;
               return check;
       }
       if(reg_key!=0)
               check=1;

       return check;
}
Páginas: 1 2 [3] 4 5 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines