|
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 - manurodri189
1
« en: Lunes 13 de Septiembre de 2010, 20:04 »
Gracias por la respuesta, he buscado y no he encontrado nada al respecto. Pero he estado mirando esas librerías, y no he visto que se podían dibujar grafos, ¿Es posible con alguna de esas librerias? Gracias. Me refiero a algo de este estilo:  Salu2
2
« en: Lunes 6 de Septiembre de 2010, 20:39 »
Hola,
Necesito una libreria para poder dibujar grafos (con sus nodos y arcos) desde php, ya sea con javascript, flash, html5, o cualquier otro.
Conoceis alguna que me pueda servir? necesitaria que fuera visualmente agradable, y al ser posible personalizable.
A ver si me podeis echar una mano, muchas gracias.
Salu2
3
« en: Domingo 30 de Mayo de 2010, 00:26 »
Hola, tengo una dudilla de principiante, a ver si me podéis echar una mano.
Tengo un formulario de struts2, con un select. Tengo que hacer que cuando seleccione, una opción del select, aparezca un select rellenado dependiendo de la opcion que se escogió en el primero.
Lo hago con ajax, y se hacer todo, pero ahora lo que no se, es si tengo que crear el select antes de ejectutar el ajax, o en el mismo ajax.
Si tengo que crearlo antes, la pregunta es como relleno la lista del select de strut2 con ajax. Y si lo creo en el mismo ajax, he provado con crear un div en el formulario, tanto un <div>, como un <s:div> y usando innerHTML, y nada.
A ver si me echáis una mano en esto, y si necesitáis que os explique algo más, me decis. Muchas gracias.
Salu2
4
« en: Jueves 18 de Marzo de 2010, 09:38 »
Gracias tio, al final lo solucione mandando el JFRAME en el contructor del jpanel, y llamando al dispose, pero me vendrá bien saber lo de esa función, sabia que tenia que haber alguna. Muchas gracias.
Un Saludo.
5
« en: Lunes 15 de Marzo de 2010, 11:26 »
Bueno, he leido un tutorial que me he bajado muy chulo, y he hecho lo siguiente: CREATE OR REPLACE TRIGGER up_km AFTER UPDATE OF distancia_k, distancia_m ON distancias FOR each ROW BEGIN IF UPDATING ('distancia_k') THEN UPDATE distancias SET distancia_m=:NEW.distancia_k*0.621371; ELSIF UPDATING ('distancia_m') THEN UPDATE distancias SET distancia_k=:NEW.distancia_m*1.609344; END IF; END up_km; /
Pero al hacer un set, da problemas de tablas mutantes, ahi si que no tengo ni idea de como solucionarlo. Salu2
6
« en: Lunes 15 de Marzo de 2010, 09:58 »
Muchas gracias, ya entendí todo eso, o eso creo  Ahora intento lo siguiente: CREATE TABLE distancias(ruta VARCHAR(10), distancia_k INTEGER, distancia_m INTEGER, PRIMARY KEY(ruta)); Tabla creada. CREATE OR REPLACE TRIGGER up_km AFTER UPDATE ON distancias ON distancia_k FOR each ROW BEGIN UPDATE transaccion SET distancia_m=:NEW.distancia_k*0.621371; END up_km; /
Este trigger lo que hace es si se actualiza la distancia en km automaticamente lo pone en millas. Pero no se como acceder en esta linea al altributo de la tabla: AFTER UPDATE ON distancias ON distancia_k
Se supone que si inserto una nueva fila con km o millas, tiene que actualizar el otro atributo, eso si que no se por donde cogerlo. Muchas gracias. Salu2
7
« en: Miércoles 10 de Marzo de 2010, 18:53 »
Gracias por tu respuesta.
Salu2
8
« en: Martes 9 de Marzo de 2010, 18:37 »
Pues a ver si alguno de vosotros me echa una mano con esto. Tengo 2 tablas, y se trata de hacer un trigger que si se actualiza una, tenga que hacer un registro en otra, con la hora de modificación, el valor anterior y el nuevo, y poco más. Pero he hecho el trigger, y me dice errores de compilación, osea que está mal. Me vuelvo loco con esto, y tiene pinta de ser chorrada, pero no doy con la tecla. Hasta ahora he hecho esto, pero vamos que parece que no funciona el trigger. CREATE TABLE Cuenta (nro_cuenta VARCHAR(10), balance INTEGER, PRIMARY KEY(nro_cuenta)); CREATE TABLE Transaccion(nro_cuenta VARCHAR(10), hora_mod DATE, id_cliente VARCHAR(10), ant_balance INTEGER, act_balance INTEGER, PRIMARY KEY(nro_cuenta,hora_mod)); CREATE OR REPLACE TRIGGER actualizar AFTER UPDATE ON Cuenta BEGIN INSERT INTO Transaccion (hora_mod, ant_balance, act_balance) VALUES(SYSDATE, OLD.balance, NEW.balance) END actualizar;
Salu2
9
« en: Jueves 4 de Marzo de 2010, 14:00 »
Llevo mucho tiempo mirando esto, y no doy con la tecla, he usado muchas funciones que he encontrado por internet, el dispose, el CLOSE, he pasado como parametro al jpanel el mismo frame, y en el frame puse un metodo que me lo cierra, y desde el jpanel lo llamo, y nada.
Vamos que no se cerrar un Jframe desde el jpanel que lo contiene, creo que debe de ser una chorrada pero no doy con ello, a ver si alguien sabe como hacerlo. Gracias.
Salu2
10
« en: Miércoles 20 de Enero de 2010, 19:22 »
Hola tengo un problemilla o una duda, a ver si me podéis ayudar.
Tengo que crear una base de datos con MySQL, y manejarla desde un programa en java, pero esto es lo de menos, porque se supone que se.
Antiguamente, en windows xp, usaba un programa que era el FoxServ o el EasyPHP, el primero me gustaba más, que tenia PHP, APACHE y MySQL, y era un gestor muy sencillito de usar, arrancaba apache, y me hacia mi base de datos en MySQL y poco más.
Ahora vuelvo a necesitarlo, pero uso Windows7, alguna herramienta parecida, y fácil de configurar?
He estado probando lo siguiente:
Me he descargado mysql-connector-odbc-5.1.6-winx64 y mysql-workbench-oss-5.2.11-beta-win32, pues bien, digamos que no se como linkar una BBDD a ODBC con estas herramientas, que supongo o espero conozcáis, a ver si alguien me explica como funciona, o donde puedo encontrar un tutorial.
Cualquiera de las dos vías me valdrá, necesito algo sencillo y rápido de configurar, tampoco me quiero complicar la vida para lo que es. Gracias por vuestra ayuda.
Salu2
11
« en: Lunes 16 de Noviembre de 2009, 18:58 »
Alguien tiene información acerca del lenguaje de programación Planer? es de Inteligencia artificial, si teneis algo me vendrá bien, algo de información, codigo lo que sea. Gracias.
Salu2
PD: lo he puesto aqui, porque no he visto otro sitio mejor donde ponerlo.
12
« en: Domingo 14 de Junio de 2009, 12:49 »
Pues ya funciona perfectamente tio!!! Me alegro, aunque no estoy muy seguro de si sabes cómo funciona...
Por cierto no me respondiste si eras de las pedroñeras xDDDDD Jajajaja, no, qué va, soy marroquí
¡Saludos y suerte!
Creo que aunque es la primera vez, le estoy cogiendo la dinámica, y creo que me he enterado de todo. Seguro que si tengo que volver a hacer un programa en MIPS, me costaría menos que esta vez. Se lo envié ayer al profesor, y dice que esta muy contento con el trabajo, y que si estoy interesado en proyectos de este tipo, una vez que vuelva a España, que podemos trabajar juntos, hacer publicaciones y demás. Pero vamos aunque la idea no me disgusta, cuando vuelva a España tengo muchas cosas que hacer, así que lo rechazaré por el momento, en el futuro quien sabe. Salu2
13
« en: Sábado 13 de Junio de 2009, 21:40 »
Dios!!! estoy en la parra.
Pues ya funciona perfectamente tio!!!. Ahora solo me falta traducirlo al ingles y listo.
Te vuelvo a dar las gracias por todo.
Por cierto no me respondiste si eras de las pedroñeras xDDDDD
Venga crack!!! estamos para lo que quieras, si necesitas cualquier cosa ya sabes donde encontrarme.
Salu2
14
« en: Sábado 13 de Junio de 2009, 21:22 »
Cierto tio, me cuesta aprender, no es que no te haga caso xDDDD ahora lo cambio. Si le sumo 0x30 a cada numero antes de almacenarlo dices que lo imprime, tiene que ser porque en Hexadecimal el 32, es el 2, y el 36, el 6 y así, no? Solamente tendria que meter la sentencia addiu aqui? beq $t3,$zero,finwhile #si es el caracter vacio acabo nop addiu $t4,$zero,0x30 #sumo 30 para luego poder imprimirlo sb $t4,0($t2) #cargo el primer numero en encode addiu $t2,$t2,1 #avanzo el puntero de encode sb $t3,0($t2) #cargo el caracter en encode
La salida es esta: Entrance String: aaaabbbccc
String encode like: 0a0b0c
String decode like: aaaabbbccc Porque me imprime 0s cuando tiene que imprimr los numeros correspondientes? supongo que la 0x30 no se puede sumar asi, verdad? como se le suma? Salu2
15
« en: Sábado 13 de Junio de 2009, 20:22 »
Lo comentamos pero no me cuadra, si yo quiero que sean caracteres?
Como habria que hacer para imprimirlo entonces? un bucle que imprimar caracter a caracter? o como?
Salu2
Edito: me refiero a que si yo en vez de letras meto numeros, tal que 22233 la codificacion se imprimiria como:
#2#3 siendo la# caracter extraño
y la decodificacion me la hace bien, y tambien imprime numeros.
16
« en: Sábado 13 de Junio de 2009, 18:12 »
Tienes toda la razon, tio. De hecho ya he acabado el programa, y se que funciona, gracias a la ejecucion paso a paso, y a lo que me pone en los registros. El almacenar_salida, como preveia estaba mal y como se supone que entendí el código que me pasaste de decodificar, pues he visto que cometia los mismos errores que comentabas antes, lo de leer en vez de escribir y demas. Aqui pongo el codigo que me ha quedado de almacenar_salida, pero ya te digo que funciona, porque lo he probado. almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode or $t0,$zero,$a0 # encode1 or $t1,$zero,$a1 # encode2 or $t2,$zero,$a3 # encode while: lbu $t3,0($t0) # Carácter de "encode1" -> T3 addiu $t0,$t0,1 # Avanzamos puntero lbu $t4,0($t1) # Numero de "encode2" -> T4 beq $t3,$zero,finwhile #si es el caracter vacio acabo nop sb $t4,0($t2) #cargo el primer numero en encode addiu $t2,$t2,1 #avanzo el puntero de encode sb $t3,0($t2) #cargo el caracter en encode #avanzo todos los punteros addiu $t1,$t1,1 addiu $t2,$t2,1 b while #llamo a while de nuevo nop
Ahora solo tengo un pequeño problemilla que no se a que se debe. Y es a la hora de imprimir encode, y solo encode, porque los numeros me los imprime como caracteres extraños, no se si será por el syscall o porque, pero solo me pasa con el encode, ya que si imprimo el decode de la misma manera funciona perfectamente. Lo imprimo así: #Imprimir la matriz de salida codificada # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,encode syscall
Y da como salida esto: Entrance String: aabbcc
String encode like: abc
String decode like: aabbcc Te pego todo el programa acabado a falta de eso: .data Entrance: .space 80 encode1: .space 40 encode2: .space 40 encode: .space 40 decode: .space 80 msg1: .asciiz "Please insert the String: " msg2: .asciiz "n" msg3: .asciiz "n String encode like: " msg4: .asciiz "n String decode like: " msg5: .asciiz "n Entrance String: " .text .globl main # # Main # main: ori $v0,$zero,4 la $a0,msg1 syscall #Almacenar el String en la matriz # Número de syscall ori $v0,$zero,8 # $a0 = buffer para guardar la cadena la $a0,Entrance # $a1 = tamaño a leer ori $a1,$zero,80 syscall la $a0,Entrance jal eliminar_enter nop ori $v0,$zero,4 la $a0,msg5 syscall #Imprimir la matriz # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,Entrance syscall ori $v0,$zero,4 la $a0,msg2 syscall # # Codificar # start: la $s0, Entrance la $s3, encode1 #almaceno la direccion de encode1 en s3, s3 es el puntero la $s4, encode2 #almaceno la direccion de encode2 en s4, s4 es el puntero or $a3,$zero,$s3 or $a2,$zero,$s4 sig_carac: lbu $s1, 0($s0) beq $s1, $zero, fin # Si es el carácter de final de cadena, ya terminamos add $a0,$zero,$s1 # Pasando el primer parámetro a la función procesar() jal procesar # Llamamos a la función procesar() addiu $a1,$s0,1 # Pasando el segundo parámetro a la función procesar() add $a0,$zero,$s1 #El carácter en $a0 addiu $v0,$v0,1 #sumamos 1 a v0 jal almacenar # Llamamos a la función almacenar() add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1 beq $zero,$zero,sig_carac # Siguiente carácter diferente or $s0, $zero, $v1 # Actualizamos el puntero con el valor devuelto # # Exit # fin: jal almacenar_salida nop ori $v0,$zero,4 la $a0,msg3 syscall #Imprimir la matriz # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,encode syscall ori $v0,$zero,4 la $a0,msg2 syscall jal decodificar nop ori $v0,$zero,4 la $a0,msg4 syscall #Imprimir la matriz # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,decode syscall ori $v0,$zero,4 la $a0,msg2 syscall ori $v0,$zero,10 # Terminamos con exit syscall # # Procesar (habría que poner un nombre más explicativo :) # # Recibe un carácter y el puntero a una cadena # Cuenta cuántos caracteres iguales al pasado consecutivos hay en la cadena # Devuelve en $v0 el número de caracteres iguales # y en $v1 el puntero al primer carácter diferente encontrado procesar: add $v0, $zero, $zero # Inicializamos valores de retorno add $v1, $zero, $a1 add $t1, $zero, $zero # Contador de caracteres iguales consecutivos procesar_iguales: lbu $t0, 0($a1) # Cargamos el siguiente carácter a comparar bne $a0, $t0, procesar_noiguales # Si no son iguales, terminamos addiu $a1, $a1, 1 # Apuntamos al siguiente carácter beq $zero, $zero, procesar_iguales addiu $t1, $t1, 1 # Si son iguales, aumentamos el contador en uno procesar_noiguales: add $v0, $v0, $t1 # Ponemos los valores de retorno add $v1, $v1, $t1 # Volvemos de la función jr $ra nop almacenar: sb $a0,0($a3) #meto el caracter en la primera direccion de a3 sb $a1,0($a2) #meto el contador en la primera direccion de a4 #avanzo el puntero addiu $a3,$a3,1 addiu $a2,$a2,1 # Volvemos de la función jr $ra nop almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode or $t0,$zero,$a0 # encode1 or $t1,$zero,$a1 # encode2 or $t2,$zero,$a3 # encode while: lbu $t3,0($t0) # Carácter de "encode1" -> T3 addiu $t0,$t0,1 # Avanzamos puntero lbu $t4,0($t1) # Numero de "encode2" -> T4 beq $t3,$zero,finwhile #si es el caracter vacio acabo nop sb $t4,0($t2) #cargo el primer numero en encode addiu $t2,$t2,1 #avanzo el puntero de encode sb $t3,0($t2) #cargo el caracter en encode #avanzo todos los punteros addiu $t1,$t1,1 addiu $t2,$t2,1 b while #llamo a while de nuevo nop finwhile: sb $zero, 0($t2) # Escribimos el carácter de fin de cadena jr $ra nop # 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) decodificar: # cargamos los parámetros en otros registros la $a2,decode la $a0,encode1 la $a1,encode2 or $t0,$zero,$a0 # encode1 or $t1,$zero,$a1 # encode2 or $t2,$zero,$a2 # decode lbu $t3,0($t0) # Carácter de "encode1" -> T3 addiu $t0,$t0,1 # Avanzamos puntero decode_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 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, decode_while2 # Repetimos addiu $t4,$t4,-1 # Restamos uno al número de caracteres fin_dec_while2: lbu $t3,0($t0) # Carácter de "encode1" -> T3 beq $zero,$zero,decode_while1 addiu $t0,$t0,1 # Avanzamos puntero fin_dec_while1: sb $zero, 0($t2) # Escribimos el carácter de fin de cadena jr $ra nop
Saludos y muchas gracias de nuevo.
17
« en: Viernes 12 de Junio de 2009, 20:14 »
A ver que te parece la funcion: decodificar: la $a0,encode1 la $a1,encode2 la $a3,decode lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode while2: beq $a0,$zero,finwhile2 #si es el caracter vacio acabo nop lbu $a2,0($a1) #cargo el numero addiu $a1,$a1,1 #avanzo el puntero while3: beq $a2,$zero,etiqueta #salto a etiqueta si es igual a 0 nop lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode addiu $a2,$a2,-1 #a2-1 #le resto 1 al primer numero b while3 etiqueta: lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode b while2 finwhile2: # Volvemos de la función jr $ra nop
Pero creo que si mal no he entendido, que tendria que restar uno al contador ya que ya he metido uno a la matriz decode antes de entrar a los while, no es asi?. Salu2
18
« en: Viernes 12 de Junio de 2009, 15:09 »
Ok, a ver si escribo bien el pseudocodigo: Mientras encode1 no sea fin de cadena. meter el primer caracter de encode1 en decode. avanzar el puntero de decode restar 1 al primer numero de encode2 (porque ya hemos metido un caracter en el resultado) si el primer numero de encode2 es cero avanzar los punteros, encode1, encode2 y decode repetir fin mientras.
Es esto lo que quiero que haga, y creo que el procedimiento en mips es el correcto, no? creo que lo que tiene que fallar es algo de intrucciones. Por cierto como es que hago mal el proceso de impresion? Salu2
19
« en: Viernes 12 de Junio de 2009, 14:56 »
Por cierto, por más que lo miro, sigo pensando que la lógica está bien, pero falla algo de Mips que no controlo.
Salu2
20
« en: Viernes 12 de Junio de 2009, 14:45 »
Ok, tio la verdad es que llevas razon, pero aunque creo que le estoy cogiendo la dinamica a esto estoy un poco verdad, todavia. Mira he actualizado asi, para que si se ejecute ese comando: add $a0,$zero,$s1 #El carácter en $a0 addiu $v0,$v0,1 #sumamos 1 a v0 jal almacenar # Llamamos a la función almacenar() add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1
Debajo de la llamada a decodifcar, me ocurria lo mismo así que también he puesto un nop. Me has dicho que codificar funciona, pero creo que el almacenamiento en encode, no porque lo imprimo y no hace nada. También he puesto el nop debajo de beq, porque tambien consume 8 al igual que jal. almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode while: beq $a0,$zero,finwhile #si es el caracter vacio acabo nop lbu $a3,0($a1) #cargo el primer numero en encode addiu $a3,$a3,1 #avanzo el puntero de encode lbu $a3,0($a0) #cargo el caracter en encode #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 b while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop
Y en decodificar lo mismo. decodificar: la $a0,encode1 la $a1,encode2 la $a3,decode while2: beq $a0,$zero,finwhile2 #si es el caracter vacio acabo nop lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode addiu $a1,$a1,-1 #a1-1 #le resto 1 al primer numero bnez $a1,while2 #repito el while2 si $a1 es distinto de 0 nop #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 b while2 finwhile2: # Volvemos de la función jr $ra nop
La verdad es que no se por donde cogerlo, ten en cuenta que es mi primera vez, no digo que me lo hagas, si no un poco de ayuda, si no te importa, mas que nada para los conceptos, y luego yo localizo los errores y los intento arreglar, porque sigo pensando que estoy en la dinamica, o no? Salu2 Edito: acabo de modifcar lo de la instruccion de debajo porque veo que lo uso en el bnez.
21
« en: Viernes 12 de Junio de 2009, 14:14 »
Corregido de la siguiente maner: add $a0,$zero,$s1 #El carácter en $a0 jal almacenar # Llamamos a la función almacenar() addiu $v0,$v0,1 #sumamos 1 a v0 add $a1,$zero,$v0 # Ponemos el número de caracteres en $a1
Tiene que haber más errores. porque sucede lo mismo. Muchas gracias de verdad. Salu2
22
« en: Viernes 12 de Junio de 2009, 14:01 »
Ok, entiendo se me pasó poner nop detras de la instruccion, con uno seria suficiente, no?
Salu2
PD: sigue sin tirar.
23
« en: Viernes 12 de Junio de 2009, 13:44 »
Ok, gracias, pongo de nuevo todo el codigo, para que lo veas, y tener una copia de seguridad que nunca está demás .data Entrance: .space 80 encode1: .space 40 encode2: .space 40 encode: .space 40 decode: .space 80 msg1: .asciiz "Please insert the String: " msg2: .asciiz " " msg3: .asciiz "n String encode like: " msg4: .asciiz "n String decode like: " .text .globl main # # Main # main: ori $v0,$zero,4 la $a0,msg1 syscall #Almacenar el String en la matriz # Número de syscall ori $v0,$zero,8 # $a0 = buffer para guardar la cadena la $a0,Entrance # $a1 = tamaño a leer ori $a1,$zero,80 syscall la $a0,Entrance jal eliminar_enter nop #Imprimir la matriz # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,Entrance syscall # # Codificar # start: la $s0, Entrance la $s3, encode1 #almaceno la direccion de encode1 en s3, s3 es el puntero la $s4, encode2 #almaceno la direccion de encode2 en s4, s4 es el puntero or $a3,$zero,$s3 or $a2,$zero,$s4 sig_carac: lbu $s1, 0($s0) beq $s1, $zero, fin # Si es el carácter de final de cadena, ya terminamos add $a0,$zero,$s1 # Pasando el primer parámetro a la función procesar() jal procesar # Llamamos a la función procesar() addiu $a1,$s0,1 # Pasando el segundo parámetro a la función procesar() 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 beq $zero,$zero,sig_carac # Siguiente carácter diferente or $s0, $zero, $v1 # Actualizamos el puntero con el valor devuelto # # Exit # 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 jal decodificar #Imprimir la matriz de salida decodificada # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,decode syscall ori $v0,$zero,10 # Terminamos con exit syscall # # Procesar (habría que poner un nombre más explicativo :) # # Recibe un carácter y el puntero a una cadena # Cuenta cuántos caracteres iguales al pasado consecutivos hay en la cadena # Devuelve en $v0 el número de caracteres iguales # y en $v1 el puntero al primer carácter diferente encontrado procesar: add $v0, $zero, $zero # Inicializamos valores de retorno add $v1, $zero, $a1 add $t1, $zero, $zero # Contador de caracteres iguales consecutivos procesar_iguales: lbu $t0, 0($a1) # Cargamos el siguiente carácter a comparar bne $a0, $t0, procesar_noiguales # Si no son iguales, terminamos addiu $a1, $a1, 1 # Apuntamos al siguiente carácter beq $zero, $zero, procesar_iguales addiu $t1, $t1, 1 # Si son iguales, aumentamos el contador en uno procesar_noiguales: add $v0, $v0, $t1 # Ponemos los valores de retorno add $v1, $v1, $t1 # Volvemos de la función jr $ra nop almacenar: sb $a0,0($a3) #meto el caracter en la primera direccion de a3 sb $a1,0($a2) #meto el contador en la primera direccion de a4 #avanzo el puntero addiu $a3,$a3,1 addiu $a2,$a2,1 # Volvemos de la función jr $ra nop almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode while: beq $a0,$zero,finwhile #si es el caracter vacio acabo lbu $a3,0($a1) #cargo el primer numero en encode addiu $a3,$a3,1 #avanzo el puntero de encode lbu $a3,0($a0) #cargo el caracter en encode #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 b while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop decodificar: la $a0,encode1 la $a1,encode2 la $a3,decode while2: beq $a0,$zero,finwhile2 #si es el caracter vacio acabo lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode addiu $a1,$a1,-1 #a1-1 #le resto 1 al primer numero bnez $a1,while2 #repito el while2 si $a1 es distinto de 0 #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 b while2 finwhile2: # Volvemos de la función jr $ra nop # 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)
He cambiado las j por b, como me has dicho que usa branches y no jumps. Pero sigue sin ir, es posible que la logica esté mal? o son las intrucciones? aunque creo que la lógica es la correcta. Muchas gracias. Salu2
24
« en: Viernes 12 de Junio de 2009, 11:09 »
Bueno he seguido trabajando, y creo que ya he acabado el programa, pero obviamente no funciona, te pego el código. .data Entrance: .space 80 Entranceaux: .space 80 encode1: .space 40 encode2: .space 40 encode: .space 40 decode: .space 80 msg1: .asciiz "Please insert the String: " msg2: .asciiz " " msg3: .asciiz "n String encode like: " msg4: .asciiz "n String decode like: " .text .globl main # # Main # main: ori $v0,$zero,4 la $a0,msg1 syscall #Almacenar el String en la matriz # Número de syscall ori $v0,$zero,8 # $a0 = buffer para guardar la cadena la $a0,Entranceaux # $a1 = tamaño a leer ori $a1,$zero,80 syscall #quitar el ultimo caracter de entrance. la $a0,Entrance #Almaceno la entrada sin el caracter "enter" la $a1,Entranceaux #Cadena de entrada la $a2,Entranceaux+1´ #puntero al segundo caracter de la cadena de entrada recorrer: beq $a2, $zero, imprimir lbu $a0,0($a1) #meto el caracter #avanzo todos los punteros addiu $a2,$a2,1 addiu $a0,$a0,1 addiu $a1,$a1,1 j recorrer imprimir: #Imprimir la matriz # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,Entrance syscall # # Codificar # start: la $s0, Entrance la $s3, encode1 #almaceno la direccion de encode1 en s3, s3 es el puntero la $s4, encode2 #almaceno la direccion de encode2 en s4, s4 es el puntero or $a3,$zero,$s3 or $a2,$zero,$s4 sig_carac: lbu $s1, 0($s0) beq $s1, $zero, fin # Si es el carácter de final de cadena, ya terminamos add $a0,$zero,$s1 # Pasando el primer parámetro a la función procesar() jal procesar # Llamamos a la función procesar() addiu $a1,$s0,1 # Pasando el segundo parámetro a la función procesar() 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 beq $zero,$zero,sig_carac # Siguiente carácter diferente or $s0, $zero, $v1 # Actualizamos el puntero con el valor devuelto # # Exit # 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 jal decodificar #Imprimir la matriz de salida decodificada # Número de syscall ori $v0,$zero,4 # $a0 = buffer a imprimir la $a0,decode syscall ori $v0,$zero,10 # Terminamos con exit syscall # # Procesar (habría que poner un nombre más explicativo :) # # Recibe un carácter y el puntero a una cadena # Cuenta cuántos caracteres iguales al pasado consecutivos hay en la cadena # Devuelve en $v0 el número de caracteres iguales # y en $v1 el puntero al primer carácter diferente encontrado procesar: add $v0, $zero, $zero # Inicializamos valores de retorno add $v1, $zero, $a1 add $t1, $zero, $zero # Contador de caracteres iguales consecutivos procesar_iguales: lbu $t0, 0($a1) # Cargamos el siguiente carácter a comparar bne $a0, $t0, procesar_noiguales # Si no son iguales, terminamos addiu $a1, $a1, 1 # Apuntamos al siguiente carácter beq $zero, $zero, procesar_iguales addiu $t1, $t1, 1 # Si son iguales, aumentamos el contador en uno procesar_noiguales: add $v0, $v0, $t1 # Ponemos los valores de retorno add $v1, $v1, $t1 # Volvemos de la función jr $ra nop almacenar: sb $a0,0($a3) #meto el caracter en la primera direccion de a3 sb $a1,0($a2) #meto el contador en la primera direccion de a4 #avanzo el puntero addiu $a3,$a3,1 addiu $a2,$a2,1 # Volvemos de la función jr $ra nop almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode while: beq $a0,$zero,finwhile #si es el caracter vacio acabo lbu $a3,0($a1) #cargo el primer numero en encode addiu $a3,$a3,1 #avanzo el puntero de encode lbu $a3,0($a0) #cargo el caracter en encode #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 j while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop decodificar: la $a0,encode1 la $a1,encode2 la $a3,decode while2: beq $a0,$zero,finwhile2 #si es el caracter vacio acabo lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode addiu $a1,$a1,-1 #a1-1 #le resto 1 al primer numero bnez $a1,while2 #repito el while2 si $a1 es distinto de 0 #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 j while2 finwhile2: # Volvemos de la función jr $ra nop
Ahora vayamos por partes, y a ver si estoy en el buen camino de lo que se me ha ocurrido: #Almacenar el String en la matriz # Número de syscall ori $v0,$zero,8 # $a0 = buffer para guardar la cadena la $a0,Entranceaux # $a1 = tamaño a leer ori $a1,$zero,80 syscall #quitar el ultimo caracter de entrance. la $a0,Entrance #Almaceno la entrada sin el caracter "enter" la $a1,Entranceaux #Cadena de entrada la $a2,Entranceaux+1´ #puntero al segundo caracter de la cadena de entrada recorrer: beq $a2, $zero, imprimir lbu $a0,0($a1) #meto el caracter #avanzo todos los punteros addiu $a2,$a2,1 addiu $a0,$a0,1 addiu $a1,$a1,1 j recorrer
Se me ha ocurrido almacenar la entrada por teclado en una matriz auxiliar, tener 2 punteros, uno que apunte al primer caracter de esta matriz, y otro al segundo. Si el segundo puntero apunta al caracter fin de cadena, se acaba, por lo tanto no me meterá el caracter intro. almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode while: beq $a0,$zero,finwhile #si es el caracter vacio acabo lbu $a3,0($a1) #cargo el primer numero en encode addiu $a3,$a3,1 #avanzo el puntero de encode lbu $a3,0($a0) #cargo el caracter en encode #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 j while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop
Al macenar la salida es como lo he puesto antes, pero en vez de jal, j porque no necesito almacenar la direccion de salto. decodificar: la $a0,encode1 la $a1,encode2 la $a3,decode while2: beq $a0,$zero,finwhile2 #si es el caracter vacio acabo lbu $a3,0($a0) #cargo el caracter en decode addiu $a3,$a3,1 #avanzo el puntero decode addiu $a1,$a1,-1 #a1-1 #le resto 1 al primer numero bnez $a1,while2 #repito el while2 si $a1 es distinto de 0 #avanzo todos los punteros addiu $a3,$a3,1 addiu $a0,$a0,1 addiu $a1,$a1,1 j while2 finwhile2: # Volvemos de la función jr $ra nop
Y luego para decodificar, pues directamente, si el puntero a la matriz de caracter es el de final de cadena, acabo, si no, lo que hago es decrementar el primer numero de la matriz de numeros, y meter el caracter en la matriz final, avanzo el puntero de la matriz final, y vuelvo a hacer el while. Asi hasta que sea 0, entonces avanzo todos los punteros y otra vez a empezar. Como te he dicho antes, obviamente no funciona, pero creo que la idea es esa, y creo que van por ahi los tiros, creo que no debo de tener fallos muy gordos, o al menos eso espero. Tu como lo ves? Salu2 PD: luego me mandas tu direccion por privado, a la que quieres que te envie el jamon,
25
« en: Viernes 12 de Junio de 2009, 09:41 »
Por cierto para almacenar en encode la salida final, he hecho algo así: almacenar_salida: sb encode1,0($a0) sb encode2,0($a1) sb encode,0($a3) while: beq $a0, $zero, finwhile #si es el caracter vacio acabo lbu $a3,0($a1) #cargo el primer numero en encode addiu $a3,$a3,1 #avanzo el puntero de encode lbu $a3,0($a0) #cargo el caracter en encode #avanzo todos los punteros addiu $a3,$a3,1 addiu $a2,$a2,1 addiu $a1,$a1,1 jal while #llamo a while de nuevo finwhile: # Volvemos de la función jr $ra nop
Que te parece? Salu2 Edito: para almacenar la direccion hay que usar esto que se me habia pasado: almacenar_salida: la $a0,encode1 la $a1,encode2 la $a3,encode
|
|
|