|
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
« en: Sábado 13 de Junio de 2009, 21:25 »
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  Ese fichero es el ejecutable  (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. 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
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. o como es el metodo para hacer que un programa corra en otra maquina sin usar las librerias  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. 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
« en: Sábado 13 de Junio de 2009, 21:11 »
Pon route add default como root.
953
« en: Sábado 13 de Junio de 2009, 21:09 »
Bueno, este foro es de VB6  el 1 fue con C++ (no me gusto para nada)  al principio es normal, ya aprenderás a valorarlo como se merece, como C
954
« en: Sábado 13 de Junio de 2009, 21:05 »
almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode
 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  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  A ver si sabes por qué... PD: y lo que dices que se ve 00 02 en los cuadraditos... ¡qué misterio!  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
« en: Sábado 13 de Junio de 2009, 20:47 »
Primero un consejo: usa nombres de variables que se entiendan, no j, k, h... no hay quien sepa qué es eso  Por ejemplo, el descriptor de fichero puedes ponerle una f seguida de algo explicativo como por ejemplo fentrada o fsalida. que estoy haciendo mal Tu problema radica en los buffers (o almacenamientos intermedios, pero es muy largo  ). 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: Te falta inicializar la variable con i=0, que no lo veo por ninguna parte  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Í: pos = ftell(j); fseek(j,0,seek_end); len = ftell(j);
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  )[/li] [li]Hacer un buffer gigantesco en previsión, con el consiguiente gasto de memoria: peor solución que la anterior  [/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?
956
« en: Sábado 13 de Junio de 2009, 20:13 »
Un arreglo... ¿de qué tipo? ¿para qué? etc etc...
957
« en: Sábado 13 de Junio de 2009, 20:11 »
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  Estás usando la llamada al sistema 4, que es para imprimir cadenas de caracteres, no vectores de números.
958
« en: Sábado 13 de Junio de 2009, 15:30 »
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  ), 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  ). 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 A ver, primero vamos a suponer que la función es (estilo C, que mola más  ): 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...  ). 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). decodificar: # cargamos los parámetros en otros registros or $t0,$zero,$a0 # encode1 or $t1,$zero,$a1 # encode2 or $t2,$zero,$a2 # decode
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. lbu $t3,0($t0) # Carácter de "encode1" -> T3 addiu $t0,$t0,1 # Avanzamos puntero
Cargamos el carácter del puntero móvil de encode1 a $t3. decod_while1: beq $t3,$zero,fin_dec_while1 # Mientras no sea fin de cadena nop lbu $t4, 0($t1) # Número de repeticiones del carácter addiu $t1,$t1,1 # Avanzamos de elemento
Aquí vamos recorriendo los carácteres de encode1 hasta encontrar el carácter de fin de cadena 0. decode_while2: beq $t4,$zero,fin_dec_while2 # Mientras el número de caracteres no sea cero nop sb $t3, 0($t2) # Escribimos el carácter en decode addiu $t2,$t2,1 # Avanzamos el puntero móvil de decode beq $zero,$zero dec_while2 # Repetimos addiu $t4,$t4,-1 # Restamos uno al número de caracteres
Mientras queden repeticiones, escribimos el caracter consecutivamente en la cadena decode. fin_dec_while2: lbu $t3,0($t0) # Carácter de "encode1" -> T3 beq $zero,$zero,decode_while1 addiu $t0,$t0,1 # Avanzamos puntero
Siguiente carácter de encode1fin_dec_while1: sb $zero, 0($t2) # Escribimos el carácter de fin de cadena jr $ra nop
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.
959
« 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: Cargamos dirección de "encode1", "encode2" y "decode" Cargamos carácter de "encode1" y avanzamos puntero Mientras no sea fin de cadena Cargamos número de caracteres de "encode2" y avanzamos puntero Mientras número de caracteres sea distinto de 0 Escribe carácter en decode y avanza puntero Restar 1 al número de caracteres Repetir Cargamos carácter de "encode1" y avanzamos puntero Repetir
960
« en: Viernes 12 de Junio de 2009, 15:00 »
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. 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
« en: Viernes 12 de Junio de 2009, 14:44 »
como puedo crear un archivo executable... Lo que tú quieres es copiar ficheros Por ejemplo: #include <stdio.h> #include <string.h> int main(){ FILE *fentrada, *fsalida; char un_byte; fentrada = fopen("hola","rb"); fsalida = fopen("hola2","wb"); fread(&un_byte ,1,1,fentrada ); } return 0; }
Sin probar, pero debería funcionar. Saludos
962
« en: Viernes 12 de Junio de 2009, 14:24 »
Usa las etiquetas de código.
963
« en: Viernes 12 de Junio de 2009, 14:22 »
De hecho, puedes poner directamente = 0 en vez de = ' '.
Saludos
964
« en: Viernes 12 de Junio de 2009, 14:19 »
Corregido de la siguiente maner:  Mal again: add $a1,$zero,$v0 no se ejecuta antes de saltar a la función, sino una vez ejecutada... 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 PD: repites siempre los mismos errores, concéntrate en lo que haces y déjate de prisas
965
« en: Viernes 12 de Junio de 2009, 14:10 »
En add $a0,$zero,$s1 #El carácter en $a0 jal almacenar # Llamamos a la función almacenar() add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1
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
« 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: fin: jal almacenar_salida #Imprimir la matriz de salida codificada # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,encode syscall
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
« 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... 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  ): # void EliminarEnter(char* entrada) eliminar_enter: li $t1,0xA ee_bucle: lbu $t0,0($a0) beq $t0,0xA,fin_ee addiu $a0,$a0,1 beq $zero,$zero,ee_bucle nop fin_ee: jr $ra sb $zero,-1($a0)
Y para llamar a la función (evidente, pero lo pongo iwalmente): la $a0,entrance jal eliminar_enter nop
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
« en: Miércoles 10 de Junio de 2009, 17:44 »
¿Y el comando route?
969
« en: Miércoles 10 de Junio de 2009, 10:10 »
Prueba ping 127.0.0.1, a ver qué te da...
970
« 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
« en: Martes 9 de Junio de 2009, 18:35 »
972
« en: Martes 9 de Junio de 2009, 18:12 »
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 Si llamamos a todos los TextBox simplemente TextB, y son digamos 20, nos quedaría algo tan sencillo como: Dim i as Integer For i = 0 To 19 TextB(i) = vbNullString Next i
que supongo es lo que quieres. Saludos
973
« en: Martes 9 de Junio de 2009, 17:49 »
¿Arquitectura? ¿Sistema operativo? ¿Tengo pinta de adivino?
974
« en: Martes 9 de Junio de 2009, 17:02 »
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
« 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  ) 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
|
|
|