• Martes 20 de Mayo de 2025, 06:49

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

Páginas: 1 ... 37 38 [39] 40 41 ... 100
951
GNU/Linux / Re: Dudas de librerias y programas
« en: Sábado 13 de Junio de 2009, 21:25 »
Cita de: "az00smx"
compilo este archivo y se crea un archivo nuevo con la forma de "./nombresalida" exactamente que es este archivo
Supondré que estás preguntando, porque si no no entendería el párrafo  :lol: Ese fichero es el ejecutable :P (el equivalente al .exe en Windows). Linux no usa extensiones para saber qué tipo de fichero se trata, aunque si lo tiene lo usará  ^_^ En estas pequeñas cosas es donde se nota la diferencia entre un SO bien hecho y una cutrería.

Cita de: "az00smx"
para correr ese programa en otra maquina con linux, pero que carece de esa libreria como le hago (si es que hay forma)
Tienes dos opciones:

  • Instalar la librería en el equipo en que vayas a ejecutarlo; poner esta librería como dependencia obligatoria
  • Enlazar la librería al programa de manera estática, de manera que la librería esté incluída en el ejecutable y no vaya aparte. Ojo, esto puede incrementar el tamaño del fichero de manera muy significativa. Quien avisa no es traidor  :D

Cita de: "az00smx"
o acaso funcionarai tomando ese archivo "./nombresalida" copiarlo pegarlo en la otra maquina y correrlo a ver que pasa
Si el sistema tiene la librería, funcionará. Si la librería está enlazada estáticamente, funcionará. Si no, nada.

Cita de: "az00smx"
o como es el metodo para hacer que un programa corra en otra maquina sin usar las librerias
:blink: Eso no puede ser, es código que usa tu programa: no librería, no funciones de la librería. Si le quitas todas las funciones que llamas de la librería, funcionará sin librería.

Cita de: "az00smx"
o hacer un executable para windows
Primero una aclaración: no importa que lo ejecutes en Windows o Linux: sin librería, nada de nada. Dicho esto, para compilar para Windows desde gcc necesitas las librerías de Windows y especificarlo como plataforma destino (target platform).

952
GNU/Linux / Re: Problema con IP
« en: Sábado 13 de Junio de 2009, 21:11 »
Pon route add default como root.

953
Visual Basic para principiantes / Re: ¿Como hago un software para cajero?
« en: Sábado 13 de Junio de 2009, 21:09 »
Bueno, este foro es de VB6 :P

Cita de: "trogua_z"
el 1 fue con C++ (no me gusto para nada)
:lol: al principio es normal, ya aprenderás a valorarlo como se merece, como C  ;)

954
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Sábado 13 de Junio de 2009, 21:05 »
Código: Text
  1. almacenar_salida:
  2.     la $a0,encode1
  3.     la $a1,encode2
  4.     la $a3,encode
  5.  
:ph34r:  :ph34r:  :ph34r:  veo que no quieres comprender cómo pasar parámetros a las funciones. Esto no va aquí, sino en la llamada a la función. Pero bueno, si no quieres hacer caso, tú mismo :P

Cita de: "manurodri189"
Y es a la hora de imprimir encode, y solo encode, porque los numeros me los imprime como caracteres extraños

Tienes una ligera confusión sobre caracteres y valores. Lo que has escrito en encode1 son caracteres, independientemente de que representen números, letras, puntuaciones o ideogramas chinos. Pero en la memoria lo que tienes no es una 'A' o una '@', evidentemente, sino números, valores. En caso de los caracteres es el código ASCII. Por tanto la llamada del sistema de impresión de cadenas de caracteres relaciona cada código con el carácter que el corresponda (un dibujo al fin y al cabo) y lo imprime. Si queremos podemos cambiar las correspondencias código-carácter e incluso usar otros caracteres en vez de los estándar.

Pero si usamos encode2 en la llamada al sistema de impresión de cadenas de caracteres, tenemos un problema, porque lo que hay en memoria son números, no caracteres. Si le sumas a cada elemento de encode2 0x30 antes de imprimirlo, verás cómo sí que funciona bien  :blink:  A ver si sabes por qué...  ;)

PD: y lo que dices que se ve 00 02 en los cuadraditos... ¡qué misterio! :lol: Son caracteres Unicode para los que tu sistema no encuentra fuente, por tanto te pone el código. Y como puedes ver son los números, pero no los caracteres (como te he explicado más arriba).

955
C/C++ / Re: como creo un executable con "wb"
« en: Sábado 13 de Junio de 2009, 20:47 »
:hola:

Primero un consejo: usa nombres de variables que se entiendan, no j, k, h... no hay quien sepa qué es eso :P Por ejemplo, el descriptor de fichero puedes ponerle una f seguida de algo explicativo como por ejemplo fentrada o fsalida.

Cita de: "proxy_lainux"
que estoy haciendo mal
Tu problema radica en los buffers (o almacenamientos intermedios, pero es muy largo  :lol: ). Tú usas char g[10000] como buffer, que te almacena como máximo 10000 carácteres, o lo que es lo mismo, bytes. Por tanto (si quieres compruébalo ;)) el tamaño máximo de fichero que podrás manejar será de ese mismo tamaño, esto es, 10.000 bytes o ~9.75 KB.

El código que has hecho:

Código: C
  1. j = fopen("hola","rb");
  2.  
  3. while(!feof(j)){
  4.     fgetc(j);
  5.     i++;
  6. }
  7.  
Te falta inicializar la variable con i=0, que no lo veo por ninguna parte :P Aquí obtienes el tamaño del fichero en i, pero a costa de recorrerlo entero. Esto es inútil lento ya que el SO ya sabe el tamaño exacto del fichero  ;) . Como bien te dijeron, el tamaño del fichero lo obtienes asÍ:

Código: Text
  1. pos = ftell(j);
  2. fseek(j,0,seek_end);
  3. len = ftell(j);
  4.  
Ahora tienes en len (del inglés length, longitud o tamaño), que corresponde con tu i. Pero tú usas un buffer de tamaño fijo, es decir, si el fichero es más grande no cabrá en tu buffer. Tienes tres soluciones:

[list type=3]
[li]Limitar tu programa a que sólo copie ficheros de un determinado tamaño o menor (es una opción  :lol: )[/li]
[li]Hacer un buffer gigantesco en previsión, con el consiguiente gasto de memoria: peor solución que la anterior  :D [/li]
[li]Copiar el fichero a cachos en un buffer pequeño. Por cada buffer lleno lo escribimos en el fichero de salida.[/li][/list]

¿Se te ocurre cómo podrías implementar esta última solución?  :comp:

956
C/C++ / Re: colocar un arreglo en el siguiente codigo
« en: Sábado 13 de Junio de 2009, 20:13 »
Un arreglo... ¿de qué tipo? ¿para qué? etc etc...

957
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Sábado 13 de Junio de 2009, 20:11 »
Cita de: "manurodri189"
Y es a la hora de imprimir encode, y solo encode, porque los numeros me los imprime como caracteres extraños
Esto ya lo comentamos  :lol: Estás usando la llamada al sistema 4, que es para imprimir cadenas de caracteres, no vectores de números.

958
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Sábado 13 de Junio de 2009, 15:30 »
:huh:  :P

Sigues haciendo los mismos errores <_< . Cargas punteros y los usas como caracteres, especificas mal las entradas de función (y eso que ni siquiera estamos usando la pila :P), te haces un lío con los registros, lees en vez de escribir en memoria, te olvidas de que la instrucción siguiente a los saltos se ejecuta antes que el salto (y eso que lo acabamos de hablar :P ). Las instrucciones están bien planteadas, pero tienes que estar más al loro de que estás haciendo mal. No hacer lo primero que se te ocurra, probarlo, y si no funciona, esperar a que yo te ponga la corrección. Si no funciona, mira a ver por qué, ejecuta paso a paso y ve viendo qué hace tu código y cómo debería hacerlo en realidad. Así es como realmente se aprende, y sí, aprender requiere un esfuerzo  :brickwall:

A ver, primero vamos a suponer que la función es (estilo C, que mola más  B) ): void decodificar(const char* caracteres, const BYTE* frecuencias, const char* cadena_decodificada), siendo evidentemente caracteres = encode1 cargado en $a0, frecuencias = encode2 cargado en $a1, cadena_decodificada = decode cargado en $a2, y no devuelve ningún valor (void), así que no hace falta cargar $v0 (el registro en el que ponen el valor de retorno) con ningún valor. Estos parámetros los recibe la función cuando empieza, y trabaja suponiendo que están bien cargados antes de ser llamada. decodificar() es una función, por tanto los parámetros se le pasan y no hay que cargarlos. Así si queremos utilizar la función con otros parámetros no tenemos que modificar la función en sí (aunque esto creo que ya lo he dicho... :D ). Espero haberme explicado mejor esta vez sobre cómo crear y usar funciones en ensamblador MIPS  ^_^

Por tanto el inicio de la función tendría que ser directamente la carga del primer carácter de encode1 (o caracteres como definimos en C), que debe estar ya cargado en $a0. Además fíjate que caracteres y frecuencias están definidos como const en el prototipo de la función, así que no debemos modificar esas cadenas. Aparte, tampoco es necesario modificar los valores de los registros $aX, así que los usaremos sólo para leer (como te indiqué en el post anterior).

Código: Text
  1. decodificar:
  2.     # cargamos los parámetros en otros registros
  3.     or $t0,$zero,$a0   # encode1
  4.     or $t1,$zero,$a1   # encode2
  5.     or $t2,$zero,$a2   # decode
  6.  
Cargamos cada $aX en su $tX correspondiente, así no tenemos que modificar los $aX para nada, y podemos decir que nuestra función mantiene esos registros sin modificar.
       
Código: Text
  1.     lbu $t3,0($t0)  # Carácter de "encode1" -> T3    
  2.     addiu $t0,$t0,1  # Avanzamos puntero
  3.  
Cargamos el carácter del puntero móvil de encode1 a $t3.

Código: Text
  1. decod_while1:    
  2.     beq $t3,$zero,fin_dec_while1  # Mientras no sea fin de cadena
  3.     nop
  4.     lbu $t4, 0($t1)  # Número de repeticiones del carácter
  5.     addiu $t1,$t1,1  # Avanzamos de elemento
  6.  
Aquí vamos recorriendo los carácteres de encode1 hasta encontrar el carácter de fin de cadena 0.

Código: Text
  1. decode_while2:
  2.     beq $t4,$zero,fin_dec_while2  # Mientras el número de caracteres no sea cero
  3.     nop
  4.     sb $t3, 0($t2)   # Escribimos el carácter en decode
  5.     addiu $t2,$t2,1  # Avanzamos el puntero móvil de decode
  6.     beq $zero,$zero dec_while2  # Repetimos
  7.     addiu $t4,$t4,-1  # Restamos uno al número de caracteres
  8.  
Mientras queden repeticiones, escribimos el caracter consecutivamente en la cadena decode.
   
Código: Text
  1. fin_dec_while2:    
  2.     lbu $t3,0($t0)  # Carácter de "encode1" -> T3    
  3.     beq $zero,$zero,decode_while1
  4.     addiu $t0,$t0,1  # Avanzamos puntero
  5.  
Siguiente carácter de encode1

Código: Text
  1. fin_dec_while1:
  2.     sb $zero, 0($t2)   # Escribimos el carácter de fin de cadena
  3.     jr $ra
  4.     nop
  5.  
No hay que olvidar poner un final de cadena en decode, porque si no no es una cadena de caracteres válida ;)

No lo he probado, hazlo tú (ve paso a paso y fíjate bien los valores que hay en memoria y los registros), y asegúrate de que le pasas bien los parámetros a la función en los registros $aX.

Si puedes decirme dónde fallaba tu código, estaría bien también, así analizas qué has hecho mal.

 :hola:

959
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Viernes 12 de Junio de 2009, 17:16 »
Intenta usar sólo los registros $aX (preferiblemente sólo lectura) y $tX (puedes hacer con ellos lo que quieras) dentro de las funciones  ;)

Primero, se supone que el número de elementos de encode1 y encode2 es el mismo, y no vamos a verificar esto. Resumidamente: por cada carácter de encode1, escribirlo en decode tantas veces veces como indique el elemento correspondiente en encode2. El pseudo-código sería por tanto:

Código: Text
  1. Cargamos dirección de "encode1", "encode2" y "decode"
  2. Cargamos carácter de "encode1" y avanzamos puntero
  3. Mientras no sea fin de cadena
  4.     Cargamos número de caracteres de "encode2" y avanzamos puntero
  5.     Mientras número de caracteres sea distinto de 0
  6.         Escribe carácter en decode y avanza puntero
  7.         Restar 1 al número de caracteres
  8.     Repetir
  9.     Cargamos carácter de "encode1" y avanzamos puntero
  10. Repetir
  11.  

960
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Viernes 12 de Junio de 2009, 15:00 »
Cita de: "manurodri189"
Me has dicho que codificar funciona, pero creo que el almacenamiento en encode, no porque lo imprimo y no hace nada.
Funciona bien codificar y almacenar. Míra los valores en la memoria. Por tanto tienes mal el procedimiento de impresión.

Cita de: "manurodri189"
También he puesto el nop debajo de beq, porque tambien consume 8 al igual que jal.
Todos los saltos son así.

¿Qué tal si me pones qué debes hacer para descodificar? En pseudocódigo, para ver.

961
C/C++ / Re: como creo un executable con "wb"
« en: Viernes 12 de Junio de 2009, 14:44 »
Cita de: "proxy_lainux"
como puedo crear un archivo executable...
Lo que tú quieres es copiar ficheros  :P

Por ejemplo:
Código: C
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5.  
  6.     FILE *fentrada, *fsalida;
  7.     char un_byte;    
  8.  
  9.     fentrada = fopen("hola","rb");
  10.     fsalida = fopen("hola2","wb");
  11.  
  12.     while(!feof(fentrada)){
  13.         fread(&un_byte,1,1,fentrada);        
  14.         fwrite(&un_byte,1,1,fsalida);
  15.     }
  16.  
  17.     fclose(fentrada);
  18.     fclose(fsalida);
  19.  
  20.     return 0;
  21. }
  22.  
Sin probar, pero debería funcionar.

Saludos

962
C/C++ / Re: programa en c movimientos de un alfil
« en: Viernes 12 de Junio de 2009, 14:24 »
Usa las etiquetas de código.

963
C/C++ / Re: problema al rellenar vectores que forman una matriz
« en: Viernes 12 de Junio de 2009, 14:22 »
De hecho, puedes poner directamente = 0 en vez de = ''.

Saludos

964
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Viernes 12 de Junio de 2009, 14:19 »
Cita de: "manurodri189"
Corregido de la siguiente maner:
:huh: Mal again: add $a1,$zero,$v0 no se ejecuta antes de saltar a la función, sino una vez ejecutada...  &lt;_&lt;

Cita de: "manurodri189"
Tiene que haber más errores
Sí, hay unos cuantos, pero sinceramente no te voy a hacer todo y me estoy cansando un poco... La de codificar funciona, así que vuelve a mirar las funciones que has hecho, sobre todo la de decodificar. Sólo tiene que hacer el proceso inverso a codificar, así que es sencillo. La vas a tener que hacer tú solito :brickwall:

PD: repites siempre los mismos errores, concéntrate en lo que haces y déjate de prisas  ;)

965
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Viernes 12 de Junio de 2009, 14:10 »
En

Código: Text
  1.     add $a0,$zero,$s1  #El carácter en $a0
  2.     jal almacenar     # Llamamos a la función almacenar()
  3.     add $a1,$zero,$v0  # Ponemos el número de caracteres en $a1
  4.  
Ten en cuenta que $v0 lleva el número de caracteres repetidos tras el primero leído, por tanto el número de caracteres iguales es $v0 + 1.

966
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Viernes 12 de Junio de 2009, 13:58 »
Así a primera vista, te veo un error muy gordo: la instrucción que va después de los jal se ejecuta siempre, y la dirección de retorno es jal + 8, por tanto:

Código: Text
  1. fin:
  2.  
  3.     jal almacenar_salida
  4.  
  5.     #Imprimir la matriz de salida codificada
  6.     # Número de syscall
  7.     ori $v0,$zero,4
  8.     # $a0 = buffer a imprimir
  9.     la $a0,encode
  10.     syscall
  11.  
está mal, puesto que ori $v0,$zero,4 se ejecuta antes de jal almacenar_salida, y al volver de la función caes en la $a0,encode. Y así todos los siguientes.

967
ASM (Ensamblador) / Re: RLE en ensamblador MIPS
« en: Viernes 12 de Junio de 2009, 13:24 »
Bueno, vamos por pasos.

La verdad es que lo que has hecho de 2 buffers, copiar uno a otro, aparte de que está mal, no tiene mucho sentido utilizar Entranceaux. Aún así, el puntero a Entranceaux+1 sobra. Además, ¿para qué sumas 1 a a0 si tienes un carácter? Tienes que concentrarte un poco más en lo que estés haciendo...  :P

Yo como soy de funciones, voy a hacer una función que sustituya el carácter 0xA (el molesto enter) por un 0 (final de cadena :)):

Código: Text
  1. # void EliminarEnter(char* entrada)
  2. eliminar_enter:
  3.     li $t1,0xA
  4. ee_bucle:
  5.     lbu $t0,0($a0)
  6.     beq $t0,0xA,fin_ee
  7.     addiu $a0,$a0,1
  8.     beq $zero,$zero,ee_bucle
  9.     nop
  10. fin_ee:
  11.     jr $ra
  12.     sb $zero,-1($a0)
  13.  
Y para llamar a la función (evidente, pero lo pongo iwalmente):

Código: Text
  1. la $a0,entrance
  2. jal eliminar_enter
  3. nop
  4.  
Teniendo en cuenta que hemos guardado la cadena en entrance y no en entranceaux, que como ya te dije, sobra.

Otra cosilla: los while se hacen con instrucciones branch, no jump ;)

968
GNU/Linux / Re: Problema con IP
« en: Miércoles 10 de Junio de 2009, 17:44 »
:huh:

¿Y el comando route?

969
GNU/Linux / Re: Problema con IP
« en: Miércoles 10 de Junio de 2009, 10:10 »
Prueba ping 127.0.0.1, a ver qué te da...

970
C/C++ / Re: Limitar longitud de rnd
« en: Martes 9 de Junio de 2009, 18:37 »
int random (int n); devuelve un número desde 0 hasta n-1. Usa randomize() antes para usar una semilla aleatoria.

Saludos

971
C/C++ / Re: grafos matriz de adyasencia
« en: Martes 9 de Junio de 2009, 18:35 »

972
Cita de: "sneider822"
A mi manera si que funciona, de hecho lo hace perfecto, pero no es la manera mas correcta de hacerlo
Me refería a cómo quieres hacerlo, no cómo lo estás haciendo :P

Si llamamos a todos los TextBox simplemente TextB, y son digamos 20, nos quedaría algo tan sencillo como:

Código: Visual Basic
  1. Dim i as Integer
  2.  
  3. For i = 0 To 19
  4.     TextB(i) = vbNullString
  5. Next i
  6.  
que supongo es lo que quieres.

Saludos

973
ASM (Ensamblador) / Re: como trabajo con con el mouse en ASM ???
« en: Martes 9 de Junio de 2009, 17:49 »
¿Arquitectura? ¿Sistema operativo? ¿Tengo pinta de adivino?  :lol:

974
Sí, pero no se puede hacer tal y como lo has hecho tú. Tienes que declarar un vector de TextBox. Ponle el mismo nombre a todos los TextBox y te dirá si quieres crear una matriz de controles. Aceptas y ya los puedes recorrer como un vector cualquiera.

Saludos

975
C/C++ / Re: Error con iterador
« en: Martes 9 de Junio de 2009, 14:09 »
Usa las etiquetas de código y pon algo coherente (error: pasar âconst empleadoâ como el argumento âthisâ de âvoid empleado::setIde(const std::string&, const int&)â descarta a los calificadores  :wacko: )

Cita de: "Sankara"
setIde es una función que devuelve void y modifica el identificador de una clase empleado.
Mejor pon el prototipo del método.

Páginas: 1 ... 37 38 [39] 40 41 ... 100