Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Alien-Z

#11
Java / Re: No entiendo planteamiento de un Thread
11 Septiembre 2013, 12:11 PM
CitarMi pregunta esta en el Runnable de el bucle while, porque hace:

Código (java) [Seleccionar]
Runnable nuevoCliente = new HiloDeCliente(charla, cliente);
         Thread hilo = new Thread(nuevoCliente);


No sería mas directo hacer:

Código (java) [Seleccionar]
HiloDeCliente nuevoCliente = new HiloDeCliente(charla, cliente);

Y extender la class HiloDeCliente de Thread?

Es decir porque implementa un Runnable y la pone "dentro" de un Thread puediendo lanzar un Thread directamente.

Te lo pone en el comentario:

Código (java) [Seleccionar]
HiloDeCliente.java
// Implementa Runnable para poder ser lanzada en un hilo aparte
public class HiloDeCliente implements Runnable
{
  ...
}


Tiene que implementar la interfaz Runnable para poder ser lanzada en un hilo distinto. Esta manera de crear el hilo...

Código (java) [Seleccionar]
Runnable nuevoCliente = new HiloDeCliente(charla, cliente);
         Thread hilo = new Thread(nuevoCliente);


...se debe a que la clase Thread tiene un constructor que acepta como parámetro un objeto de tipo Runnable:

Código (java) [Seleccionar]
Thread(Runnable target) {
  ...
}


Por tanto aplica polimorfismo para poder crear un hilo con ese parámetro. Aún así, el polimorfismo ya se utiliza internamente, aqui no es necesario; esto también funcionaria:

Código (java) [Seleccionar]
HiloDeCliente nuevoCliente = new HiloDeCliente(charla, cliente);
         Thread hilo = new Thread(nuevoCliente);


Le mandamos un objeto de tipo "HiloDeCliente" pero el constructor debe recibir "Runnable", como "HiloDeCliente" implementa la interfaz "Runnable" (es un tipo padre) se aplica polimorfismo y tenemos el mismo resultado.

Saludos.
#12
Java / Re: Suma de vector
11 Septiembre 2013, 11:45 AM
CitarVale muchas gracias, voy a mirar con calma lo que me dices. El problema que tengo es que quiero hacer lo mismo que he hecho para consola pero con arrays y en una GUI.

No hay ninguna direferencia en las operaciones, sean manejadas desde la consola o desde una interfaz; las cálculos, el contenido de las variables, etc. son exactamente los mismos. Lo único que tienes que cambiar es el modo de mostrar la informacion por pantalla, la introduccion de datos por parte del usuario, etc. y esos aspectos no afectan a la funcionalidad de tu programa.

Interfaces gráficas:
http://eui.upm.es/~jbobi/jbobi/LibroJava/193-246.pdf
https://www.fdi.ucm.es/profesor/balta/traspasjava/12swing_gui.pdf

Aqui no estás indicando los índices:

Código (java) [Seleccionar]
       for (i=0; i<10;i++){
           System.out.print ("Introduce numero x: ");
           vectorx=sc.nextInt();
       }
     
          for (j=0; j<vectory.length;j++){
          System.out.print ("Introduce numero y: ");
           vectory[j]=sc.nextInt();
          }
     
         
          for (i=0; i<vectorx.length;i++){
          System.out.printf("%d\n",vectory);
           }


Seria así:

Código (java) [Seleccionar]
       for (i=0; i < vectorx.length; i++){
           System.out.print ("Introduce numero x: ");
           vectorx[i] = sc.nextInt();
       }
     
          for (j=0; j < vectory.length; j++){
          System.out.print ("Introduce numero y: ");
           vectory[j]=sc.nextInt();
          }
     
         
          for (i=0; i<vectorx.length; i++){
          System.out.printf("%d\n",vectory[i]);
           }


*Revisa todo el código

¿Por qué en el último bucle utilizas el tamaño de "vectorx" como condición de fin pero trabajas con "vectory"?; aunque el tamaño sea el mismo debes poner el que corresponda en cada momento para futuras modificaciones.

Código (java) [Seleccionar]
int xy1= vectorx[0]*vectory[0];    
int xy2= vectorx[1]*vectory[1];
int xy3= vectorx[2]*vectory[2];
int xy4= vectorx[3]*vectory[3];
int xy5= vectorx[4]*vectory[4];
int xy6= vectorx[5]*vectory[5];
int xy7= vectorx[6]*vectory[6];
int xy8= vectorx[7]*vectory[7];
int xy9= vectorx[8]*vectory[8];
int xy10= vectorx[9]*vectory[9];

System.out.print("xy es: "+ xy1 + "\n");
System.out.print("xy es: "+ xy2 + "\n");
System.out.print("xy es: "+ xy3 + "\n");
System.out.print("xy es: "+ xy4 + "\n");
System.out.print("xy es: "+ xy5 + "\n");
System.out.print("xy es: "+ xy6 + "\n");
System.out.print("xy es: "+ xy7 + "\n");
System.out.print("xy es: "+ xy8 + "\n");
System.out.print("xy es: "+ xy9 + "\n");
System.out.print("xy es: "+ xy10+ "\n");


Esto se puede simplificar:

Código (java) [Seleccionar]
for(int i = 0; i < N; i++)
  System.out.println("Posicion XY" + i + ": " + vectorx[i]*vectory[i]);


Creas un montón de variables que solo utilizas para mostrar su valor por pantalla, es un uso incorrecto de la memoria; debes imprimir directamente:

Código (java) [Seleccionar]
System.out.println(var1 + var2 + var3...);

CitarEn vez de escribir 20 veces todo quiero usar bucles y en vez de consola introducir los 20 valores por dos textfield ( uno para X y otro para Y ) y meterlos en un array, luego hacer operaciones con esos valores introducidos. Es la variante de puntuaciones directas del coeficiente de correlación de Pearson.

Para el coeficiente de correlación de Pearson no necesitas más que 3 variables:
-Una para almacenar la covarianza entre X e Y.
-Otra para guardar la desviación típica de X.
-Y otra para la desviación típica de Y.

Crea un método al que le pases los vectores X e Y y te devuelva su covarianza. Del mismo modo implementa un método que calcule la desviación tipica de una variable aleatoria cuantitativa. Con los 3 valores que te devuelven esas funciones puedes calcular el coeficiente de correlación.

Utiliza las etiquedas GeSHi y manten el sangrado en todo el programa para que el código quede más claro de cara a otros foreros.

Un saludo.
#13
Programación C/C++ / Re: N alumnos con clases
10 Septiembre 2013, 11:38 AM
Citarahora quiero que sea para n alumnos pero no se bien como

Crea un objeto de la clase "calificaciones" por cada alumno. Si sabes cuántos alumnos van a haber como máximo (N) almacénalos en un array:

Código (cpp) [Seleccionar]
calificaciones arrayCalificaciones [N];

Pero si es el usuario el que te dirá la cantidad de alumnos en tiempo de ejecución (mientras el programa está corriendo) deberás hacerlo con memoria dinámica (una lista o un array dinámico por ejemplo).

Código (cpp) [Seleccionar]
...
goto flag;
...


Esta instrucción está prohibidísima; puedes hacer exactamente lo mismo con un bucle externo.


Otras cosas:

-iostream (input output stream) es una librería de C++ y no lleva la extensión ".h", es decir, se incluye así: #include <iostream>
-No utilices conio.h: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
-Procura crear variables con identificadores más significativos: c1, c2, c3...
-Las normas standard de correcta programación señalan que todos los identificadores empiezan por minúscula excepto el de una clase: Calificaciones

Un saludo.
#14
Java / Re: Suma de vector
9 Septiembre 2013, 22:46 PM
¿No consigues obtener los elementos que has introducido en el vector o cuál es tu duda exactamente?.

Para consultarlos utiliza la operación get(i) donde i es la posición del vector a la que quieres acceder. Por ejemplo:

Código (java) [Seleccionar]
vecClientes.get(5); //Devuelve el quinto cliente del vector
vecClientes.get(3).setInversion(1050.8); //Utilizamos la operación "setInversion()" del tercer cliente pasándole como parámetro "1050.8"
verCliente.get(3).varPublica; //Accedemos a la variable "varPublica" del sexto cliente


Aqui tienes todas las operaciones que puedes utilizar:
- Java 6: http://docs.oracle.com/javase/6/docs/api/java/util/Vector.html
- Java 7: http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html

Un saludo.
#15
La herramienta que necesitas es: Patrones.

Por internet encontrarás muchísima información, pero ten en cuenta un par de pasos: primero busca "programación de patrones" independientemente del lenguaje; con esto te quedarás con las ideas principales y las directrices para diseñar tu aplicación ya que siempre será igual en un lenguaje u otro; y después busca información acerca del manejo de patrones en java. El campo es tan grande que si te metieras directamente a diseñar en java te costaría la vida.

Saludos.
#16
Hay otros mecanismos para crear la aplicación que propone samirllorente sin necesidad de depender del sistema de ficheros del SO. Por ejemplo un autorun que detecte cuándo el usuario intenta abrir un fichero/carpeta y que siga un criterio para permitir ésta operación (logueado como administrador, introducir una contraseña, etc.). En general cualquier API tiene instrucciones para realizar estas tareas sin muchas complicaciones.

Pero si, también está la opción de hacerlo con las carácterísticas del sistema ficheros aunque a mi parecer lo que intenta samirllorente es mucho más sencillo, de hecho se puede hacer desde la consola de comandos con unas cuantas instrucciones (cambiando permisos lectura-escritura-ejecución (rwx), carpeta oculta permanente (no se puede ver de ninguna manera desde la interfaz de usuario), etc.).

¿Por dónde empezar?, según cómo lo quieras hacer:

Si es para un SO específico te recomiendo operaciones de consola de comandos (que por supuesto puedes incluir en tu aplicación C++); en cambio si no quieres que dependa de ningún SO busca una API multiplataforma.

Saludos.
#17
Ejecuta el programa desde la consola de comandos y olvídate de la IDE, para ello dirígete a la carpeta donde se encuentra la aplicación compilada desde la consola y usa:

./nombrePrograma 1 2 3 4 5 6

Los números son los parámetros que le quieres pasar al programa, se almacenarán en el array "argv"; puedes insertar la cantidad que quieras.

Esto no está bien:

Código (cpp) [Seleccionar]
...
cout<<"\n"<<argv<<"\n";
...
n=atoi(argv);
...


Debes indicar la posición a la que quieres acceder:

Código (cpp) [Seleccionar]
...
cout<<"\n"<<argv[i]<<"\n";
...
n=atoi(argv[i]);
...


Esto no debería funcionarte en Debian:

system("PAUSE");

Saludos.
#18
Debes crear un evento asociado a un temporizador:

Paso 1: El temporizador avisa cada intervalo de tiempo.
Paso 2: Cada vez que avise el temporizador salta el evento.
Paso 3: El evento se encargará de actualizar los elementos que componen tu videojuego (posiciones, estados, etc.) y no tendrás que esperar a que se presione una tecla.

Evento de temporizador con WinAPI: http://support.microsoft.com/kb/180736/es

Hay cosas que puedes hacer sin complicar tanto el código, por ejemplo, la imagen de la nave la puedes imprimir con un simple bucle sin usar esa cantidad de matrices, incluso si te aclaras mejor con arrays crea uno bidimensional y no siete para cada caso:

Código (cpp) [Seleccionar]
//Avión que se pintara cuando se desplace hacia la derecha
char avion_x1_1[5][7] =
{'-',' ',' ',' ',0
'*','-',' ',' ',0
'*','*','-',' ',0
'*','*','*','*',0
'*','*','-',' ',0
'*','-',' ',' ',0
'-',' ',' ',' ',0};


No uses conio.h: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Un saludo.
#19
La idea está perfectamente planteada, pero te dejo una anotación:

Si estás trabajando en C++ existe una técnica especialmente diseñada para lo que intentas hacer: sobrecarga de operadores. Esto permite que al crear un tipo nuevo, para utilizar con él operaciones primitivas, defines tú mismo la implementación de los operadores; aqui tienes una explicación completa y con ejemplos: http://c.conclase.net/curso/?cap=022

En C lamentablemente no existe tal cosa y hay que hacerlo con funciones.

Un saludo.
#20
Para ese tipo de aplicaciones debes tener un conocimiento de nivel medio-alto de un lenguaje de programación y utilizar una librería/API; te va ser imposible si solo lo conoces por encima, así que lo que yo te recomiendo es que primero te dediques a aprender dicho lenguaje más a fondo. Con C++ tienes muchísimas API's generales entre las que puedes encontrar funcionalidades para redes:

-QT
-wxWidgets
-WinAPI (solo funcionaría en Windows).

O librerías específicas para aplicaciones red:

http://www.alhem.net/Sockets/
http://netlinksockets.sourceforge.net/

Saludos.