• Miércoles 8 de Mayo de 2024, 03:13

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 - chuidiang

Páginas: 1 ... 3 4 [5]
101
C/C++ / Re: Función Random
« en: Jueves 15 de Enero de 2004, 09:29 »
Las funciones de generar numeros aleatorios suelen generarlos entre dos limites fijos. Para flotantes, suele ser entre 0.0 y 1.0 (excluido en 1.0)
Luego tu puedes convertirlo a tu rango echando una cuenta. Si lo quieres entre -randmax y +randmax, la cuenta es algo como esto

Código: Text
  1.  
  2. aux = valor * (2 * randmax);   // Esto convierte el valor aleatorio entre 0.0 y 2*randmax
  3.  
  4. aux2 = aux - randmax;  // Esto lo convierte al rango que tu quieres.
  5.  
  6.  


Las funciones aleatorias no son aleatorias realmente. Hacen unas cuentas y obtienen un valor pseudo-aleatorio. En cada ejecución del programa, las cuentas son las mismas y obtienes los mismos numeros aleatorios.

Hay una funcion srand() en la que se da un numero inicial para empezar esas cuentas. Es necesario llamar a esta funcion pasandole un entero distinto en cada ejecucion del programa. Lo habitual es pasar el tiempo actual. Solo hay que llamar a esa función una única vez. En C para solaris el código es el siguiente

Código: Text
  1.  
  2. main ()
  3. {
  4.    srand48 (time(NULL));  // se pasa a srand la fecha-hora actual
  5.    ...
  6.  
  7.    while (...)
  8.    {
  9.        double valor = drand48();  // Numeros aleatorios
  10.        ...
  11.    }
  12. }
  13.  
  14.  

No se las funciones de fecha hora en borland, pero no te costará encontrarla.

En unix hay rand() que da un entero aleatorio y se inicializa con srand()
y hay drand48() que da un double aleatorio y se inicializa con srand48(). Mira si en borland hay varias srand() y asegurate de usar la que corresponda al rand() que estés usando.

Se buena.

102
Java / Re: Arreglo De Objetos
« en: Martes 13 de Enero de 2004, 09:17 »
No sé muy bien lo que tienes.

Lo habitual es a cada JMenuItem añadirle un ActionListener a través del método addActionListener(). Este ActionListener que añades es el que hace lo que tenga que hacer esa opción del menú.

Otra opción es añadir el mismo ActionListener a todos los JMenuItem. Luego el ActionListener debe comprobar que JMenuItem ha sido pulsado a través del ActionEvent que recibe. Me explico

Código: Text
  1.  
  2. class Accion implements ActionListener
  3. {
  4.    public void acionPerformed (ActionEvent e)
  5.    {
  6.         if (e.getSource() == Item[0])
  7.             // accion 1
  8.         else (e.getSource() == Item[1])
  9.             // accion 2
  10.         // etc, etc.
  11.    }
  12. }
  13.  
  14. ...
  15.  
  16. Accion accion = new Action();
  17. for (i=0;i<NUMERO_ITEMS;i++)
  18.    Item[i].addActionListener (accion);
  19.  
  20.  

Bueno, no sé si es esto lo que necesitas.

Se buena.

103
Java / Re: Arreglo De Objetos
« en: Lunes 12 de Enero de 2004, 10:05 »
Primero debes dar tamaño al array

Código: Text
  1.  
  2. private javax.swing.JMenu Menu[];
  3.  
  4. Menu = new javax.swing.JMenu [10];  // 10 menus
  5.  
  6.  

Ya tienes un array de 10 menus, pero cada uno de los items del array es ahora mismo null. Debes ir creando cada uno de los menus

Código: Text
  1.  
  2. int i;
  3. for (i=0; i<10;i++)
  4.    Menu[i] = new javax.swing.JMenu();
  5.  
  6.  

El array empieza con indice cero. El resto ya puedes hacer lo que estabas haciendo

Código: Text
  1.  
  2. Menu[0].setText(rs2.getString("des").substring(0));
  3. MenuBar.add(Menu[0]);
  4.  
  5.  


Se buena.

104
C/C++ / Re: Problema Con "const Struct Option Long_options[]"
« en: Lunes 12 de Enero de 2004, 09:55 »
A mi este mini-programa en C++ me compila bien

Código: Text
  1. struct option
  2. {
  3.    char *kk;
  4.    int a;
  5. };
  6.  
  7. main()
  8. {
  9.    const struct option cosa [] = {
  10.       {"help", 0},
  11.       {"output", 1} };
  12. }
  13.  

Lo único que se me ocurre es que revises un poco el código. Puedes partir de un ejemplo simple como este, ver si te compila, e ir modificandolo pcco a poco hasta convertirlo en tu codigo, para ver exactamente dónde está el fallo.

Se bueno.

105
Java / Re: Arreglo De Objetos
« en: Viernes 9 de Enero de 2004, 09:15 »
Tu array puede ser de Component

En este array puede meter cualquier clase que herede de Component, y en concreto los que mencionas.

Al recuperarlos del array, siguen siendo del tipo Component, así que deberás hacer un cast a la clase adecuada.

Código: Text
  1.  
  2. (javax.swing.JMenuItem)array[i];
  3.  

Antes de hacer el cast, suele ser conveniente verificar que el Component es realmente del tipo al que vas a hacer el cast

Código: Text
  1. if (arrray[i] instanceof javax.swing.JMenuItem)
  2.    (javax.swing.JMenuItem)array[i];
  3.  

Se buena.

106
C/C++ / Re: Atrapado En La Lectura De Un Fichero
« en: Jueves 8 de Enero de 2004, 16:10 »
La función fgets() lee una línea completa.
Luego es cuestión de evaluar la línea con sscanf() o strtok() o cualquier otra función.
Se bueno.

107
Java / Re: Manejo de decimales y equivalente a getch()
« en: Martes 30 de Septiembre de 2003, 08:24 »
No sé muy bien qué quieres, a ver si acierto.

Para leer de teclado tienes System.in, pero sólo tiene métodos para leer bytes, así que debes traducirlo. Hay un par de opciones

new DataInputStream (System.in)
Esta clase permite leer números

new BufferInputStream (System.in)
esta permite leer cadenas.

En cuanto a los decimales, echale un ojo a las clases NumberFormat y DecimalFormat, que permiten poner formato a los números.

Se bueno.

108
C/C++ / Re: URGENTE!!! problemas con ejecutables
« en: Viernes 26 de Septiembre de 2003, 09:07 »
Si no dice nada de nada, seguramente sí se está ejecutando, pero no hay ninguna salida.

Es posible que tu programa encuentre algún error y haga un exit() directamente, sin mostrar nada.

Prueba a lanzarlo con debugger o de esta manera

$truss ejecutable

truss te dará una lista de llamadas al kernel de tu programa, con lo que te puede dar una pista de por donde encuentra fallos.

Se bueno.

109
C/C++ / Re: URGENTE!!! problemas con ejecutables
« en: Jueves 25 de Septiembre de 2003, 09:18 »
No estaría de más que nos dijeras qué error te da cuando intentas ejecutarlo.

Se bueno.

110
C/C++ / Re: troyano c (server-client)
« en: Miércoles 24 de Septiembre de 2003, 14:55 »
Hay varias formas de hacerlo, como enviar una cadena especial que signifique fin de fichero.

Si quieres algo más serio, mira en www.geocities.com/chuidiang un apartado de cómo hacer mensajes para enviar por sockets. Deberías hacerte un mensaje de ida "ejecuta_comando" y un par de vuelta "toma_linea" y "fin_fichero".

Se bueno.

111
C/C++ / Re: troyano c (server-client)
« en: Miércoles 24 de Septiembre de 2003, 08:46 »
Mira a ver si tienes la funcion popen() (esta en C de linux, no se si windows la tiene.)

Esta funcion ejecuta un programa y te permite leer su salida. Algo asi como esto

FILE *salida;
salida = popen ("ejecutable.exe parametros", "r");

leyendo salida, lees la salida del ejecutable.

Esa salida tendrias que enviarsela al cliente a través del socket.

Se bueno.

112
C/C++ / manejo de directorios
« en: Lunes 22 de Septiembre de 2003, 09:04 »
Mira en www.geocities.com/chuidiang en la parte de funciones útiles. Hay algunas de manejo de directorios y ficheros en linux. Quizás te sirvan o, al menos, te den la pista de por dónde buscar con el man.

Se bueno.

113
Java / Explorador de windows
« en: Martes 2 de Septiembre de 2003, 10:12 »
Java tiene la clase JFileChooser que te permite hacer eso.
Se bueno.

114
Java / Re: añadir un paquete
« en: Martes 2 de Septiembre de 2003, 10:08 »
Bueno, mi primer consejo es que te cambies de visual j++ a otro entorno. El visual j++ no es java y yo creo que microsoft lo ha sustituido (o va a sustituirlo) por el C#.

De todas formas, contestando a tu pregunta, para coger el javax.swing tendrías que hacer lo siguiente:

Te descargas de www.java.sun el JRE del J2SE. Una vez instalado, el algún sitio tendrás un fichero rt.jar   En mi PC está en C:j2sdk1.4.0_01jrelibrt.jar

Este rt.jar es el que contiene, entre otras cosas, el javax.swing. Sólo tienes que incluir dicho fichero .jar como parte de tu proyecto (no se muy bien como se hace eso en visual J++) o en el classpath.

No sé si te dará problemas, porque nunca lo he hecho, ni si es compatible (los .class o .jar de java no se si son 100% compatibles con los de visual J++, de hecho SUN ganó un pleito a Microsoft por ese tema)

Se bueno.

115
C/C++ / system("comando") a variable
« en: Martes 2 de Septiembre de 2003, 09:04 »
Bueno, yo los ejemplos de código los hago en linux, así que sé que ahí funcionan (al menos en mi PC).
Todo el tema de sockets es muy similar para windows, los coneptos son los mismos y la sintaxis de las funciones también. Creo que la única diferencia es que hay que "abrir" la librería de winsocket.dll antes de usarla y lo demás es igual.

El ejemplo simple de socekts seguramente no compila directamente en windows, aunque las modificaciones serían mínimas.

Si tienes interés en ver si algo funciona en windows, lo único que tienes que hacer es ver si el visual c++ (o c++ builder o el que sea) tienen las funciones que utilizo en los ejemplos.

Se bueno.

116
Java / Re: como maximizar una ventana por codigo?
« en: Lunes 1 de Septiembre de 2003, 15:13 »
Bueno, yo he mirado en la api de la 1.4.0 que es la que tengo yo y efectivamente, el metodo setExtendedState() esta a partir de la 1.4
Se bueno.

117
C/C++ / Usar un array como parametro
« en: Lunes 1 de Septiembre de 2003, 09:50 »
Lo de los arrays para pasar por parámetro es un poco lio.
Si tienes
char cadena[10], el tipo es char[] y esto es lo que deberías poner como parámetro en la funcion

Si tienes cadena[10][20], etl tipo es char[][20] y eso debes poner de parámetro.

etc, etc.

En tu caso no se muy bien lo que pretendes. La declaración
char word_a[][2][40]= {"ahora","now","",""};
me resulta extraña.

Si nos atenemos a los tipos, si quieres pasar el array completo, ejec() debería coger como parámetro

int ejec (char XX[][2][40])
{
   ...
}

y llamarlo con ejec (word_a) o lo que sea

La linea que pone
if(ingl[0]=='a') { ejec(char word_a[][2]);
tampoco se muy bien que es lo que quieres. Estas llamando a ejec con una array que declaras ahi mismo (por lo de char delante) y es de tipo char [][2] y no esta inicializado. Supongo que esa linea es la que te protesta.

Espero que esto te sirva de algo.

Se bueno.

118
C/C++ / Re: gets(cadena) de otra manera
« en: Lunes 1 de Septiembre de 2003, 09:27 »
No se si en el codigo que tienes falta algo, pero los caracteres extraños al final se deben a que falta el de fin de cadena.
Tu array de cadena tiene 40 caracteres sin inicializar y luego vas leyendo hasta el n. El resto siguen sin inicializar. Cuando leas el n debes poner un justo encima o en el caracter siguiente (dependiendo de si quieres o no conservar el n).

char cadena[40];
int i=0;

do
{
cadena[ i ] =getchar();
i++;
}while (cadena[i-1] != 'n');
cadena[i-i] = '';   /*Poner el de fin de cadena */
printf ("%sn", cadena);

Otra opcion es que inicialices la cadena con todo antes de usarla.

Se bueno.

119
C/C++ / Re: system("comando") a variable
« en: Lunes 1 de Septiembre de 2003, 09:17 »
Por un socket puedes enviar una estructura de datos que quieras, siempre que al otro lado sepan que estructura están recibiendo.

Para enviar un archivo, puedes enviar el nombre del fichero para que el otro lo lea ,siempre que lo tenga accesible.

Si no lo tiene accesible, entonces debes enviar cadenas de caracteres que corresponderían a líneas de texto del archivo. Si es binario, enviarias arrays de bytes.

En www.geocities.com/chuidiang tienes un pequeño ejemplo de cómo se construyen habitualmente estas estructuras (mensajes) que circulan por los sockets.

Se bueno.

120
C/C++ / Estilo de programación: sentencia break.
« en: Viernes 29 de Agosto de 2003, 14:24 »
Hay veces que el break dentro de un bucle es necesario para no complicar demasiado el codigo.

Imaginad lo siguiente

bucle (condicion del bucle)
{
   "codigo 1" que se ejecuta
   if (tengo que salir del bucle)
      break;
   "codigo 2" que no se ejecuta
}

En este caso no puedo ponerlo en la condicion, necesito que se ejecute "codigo 1", pero si salgo, "codigo 2" no se ejecuta. Ademas, la condicion de salida puede depender del resultado de "codigo 1"

Se pueden hacer cosas como esta

if (tengo que salir)
{
  fijo condicion de salida del bucle
}
else
{
   "codigo 2"
}

pero lo veo mas liado.

Suponed tambien un bucle for para buscar algo y quiero saber el indice en el que se encuentra

for (i=0; i<n; i++)
{
   if (encontrado)
     break;
}
if (i==n)
   no se ha encontrado
else
   Se ha encontrado en posicion i

Si no ponemos el break, hay que declarar otra variable, cuando lo encontremos guardar la posicion y luego hacer i=n. Es algo mas liado. Tampoco me parece muy elegante tocar a pelo la i de un bucle for.

De todas formas un break no es un salto tan aleatorio como goto, que puede saltar desde cualquier lado a cualquier lado, asi que yo no veo mal utilizar break para abortar bucles.

Sed buenos.

121
Java / Re: como maximizar una ventana por codigo?
« en: Viernes 29 de Agosto de 2003, 14:06 »
La clase Frame tiene un metodo setExtendedState(). Para maximizar hay que hacer esto

unFrame.setExtendedState (Frame.MAXIMIZED_BOTH);


El metodo java.awt.Toolkit.isFrameStateSupported(int state) indica si se puede o no hacer eso.

Se bueno.

122
C/C++ / llamada al export de Unix desde prog C
« en: Lunes 25 de Agosto de 2003, 13:14 »
La que te dice Astor es cierto, fijar una variable de entorno desde C no la hace visible para todo el mundo. Unicamente quedaría visible para otros procesos que arranque el mismo programa de C (con un fork() o similar).

De todas formas, para fijar y ver variables de entorno desde C, tienes las funciones de C getenv() y putenv().

Se bueno.

123
Java / Re: como maximizar una ventana por codigo?
« en: Lunes 25 de Agosto de 2003, 13:07 »
La clase Toolkit tiene un metodo estatico getDefaultToolkit() y al Toolkit que te devuelve puedes preguntarle getScreenSize(). Con lo obtenido puedes hacer un setSize() al JFrame.

Se bueno.

Páginas: 1 ... 3 4 [5]