|
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 ... 84 85 [86] 87 88 ... 100
2126
« en: Sábado 18 de Octubre de 2008, 17:24 »
Usa las etiquetas de código, nen IF ( (mem[fseg:fofs+Ord(txt[i])*16+j] SHL k) AND 128) > 0
Vayamos por partes: esto supongo que está claro, es el código ASCII del carácter txt.
trivial. sumamos la expresión anterior al puntero de segmento. mem[fseg:fofs+Ord(txt[i])*16+j]
direccionamos la memoria ( mem[]), especificando como segmento fseg y segmento la expresión anterior. mem[fseg:fofs+Ord(txt[i])*16+j] SHL k
movemos los bits k posiciones hacia la izquierda (o lo que es lo mismo, multiplicamos el contenido de la dirección por 2^k). Y llegamos al final: mem[fseg:fofs+Ord(txt[i])*16+j] SHL k) AND 128
¿por qué 128? 128 = 0x80 (hexadecimal) = 1000 0000 en binario, es decir, se hace una operación AND sobre el contenido de la memoria con 1000 0000. El objetivo de esta operación es comprobar si el bit más alto de la palabra está a 1 ó 0, dado que el resultado de la operación será 0 si el bit más alto es 0: 0xxx xxxx <- Contenido de la memoria 1000 0000 <- 128 --------- 0000 0000 <- 0
o bien 128 si ese bit es 1: 1xxx xxxx <- Contenido de la memoria 1000 0000 <- 128 --------- 1000 0000 <- 128
independientemente del resto de bits de la palabra. Así que al haber hecho un SHL k sobre la memoria, nos encontramos que en realidad es el bit que se encuentra k posiciones antes del más alto el que en realidad estamos comprobando. De esta manera se pueden comprobar todos los bits de la palabra direccionada haciendo un FOR i:=0 TO 15. P.D: No hay molestia
2127
« en: Sábado 18 de Octubre de 2008, 15:47 »
Creo que no es necesario usar sobrecarga de operadores Si necesario nada es, ni siquiera programar  Como ya dije anteriormente, estoy repasando la sintaxis de C++ y por tanto QUIERO usar operadores y no métodos. Gracias a los dos, saludos!!
2128
« en: Sábado 18 de Octubre de 2008, 07:01 »
nadie llama a delete por este new: aux = new cColaEnteros; ¿Cómo no? Ese objeto se asigna a la vuelta de la función (en este caso a cola3) y se llama a su destructor. ¿O me estoy equivocando? Si usaras punteros no habria problema Lo sé, el reto es hacerlo sin  jeje. EDIT: efectivamente, la depuración dice que sí se destruye. Es la misma dirección de memoria (del pCabecera) la que se la asigna a aux en el operador que a la hora de destruir cola3. ¡Por fin!
2129
« en: Sábado 18 de Octubre de 2008, 01:56 »
Vamos ahora con un ejemplo práctico a la par que sencillo: nmap -sS -P0 -O -v http://www.######.es- -sS: escaneo SYN
- -P0: no hacer ping previo al escaneo, asumir que existe el equipo remoto
- -O: adivinar sistema operativo
- -v: ¡sé elocuente!
y obtenemos: Starting Nmap 4.76 ( http://nmap.org ) at 2008-10-18 01:50 Hora estándar romance Initiating Parallel DNS resolution of 1 host. at 01:50 Completed Parallel DNS resolution of 1 host. at 01:50, 0.03s elapsed Initiating SYN Stealth Scan at 01:50 Scanning ###.###.###.### [1000 ports] Discovered open port 80/tcp on ###.###.###.### Discovered open port 22/tcp on ###.###.###.### Discovered open port 443/tcp on ###.###.###.### Discovered open port 9001/tcp on ###.###.###.### Discovered open port 500/tcp on ###.###.###.### Discovered open port 9050/tcp on ###.###.###.### Discovered open port 9000/tcp on ###.###.###.### Completed SYN Stealth Scan at 01:50, 4.45s elapsed (1000 total ports) Initiating OS detection (try #1) against ###.###.###.### Warning: Hostname http://www.######.es resolves to 2 IPs. Using ###.###.###.### Retrying OS detection (try #2) against ###.###.###.### Host ###.###.###.### appears to be up ... good. Interesting ports on###.###.###.###: Not shown: 993 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https 500/tcp open isakmp 9000/tcp open unknown 9001/tcp open unknown 9050/tcp open tor-socks Aggressive OS guesses: Linux 2.6.5 - 2.6.9 (96%), Aladdin eSafe security gateway (runs Linux 2.4.21) (92%), Linux 2.6.5 - 2.6.8 (91%), Linux 2.6.5-7.283-smp (SuSE Enterprise Server 9, x86) (91%), Linux 2.4.21 - 2.4.33 (91%), Linux 2.4.31 w/grsec (x86) (91%), Linux 2.4.32 (x86) (91%), QLogic SANbox2-8 FC switch or Sharp Zaurus PDA (Linux 2.4.18) (91%), Linux 2.6.5 - 2.6.19 (90%), Linux 2.6.9 - 2.6.20 (90%) No exact OS matches for host (test conditions non-ideal). Uptime guess: 21.136 days (since Fri Sep 26 22:34:46 2008) Network Distance: 6 hops TCP Sequence Prediction: Difficulty=198 (Good luck!) IP ID Sequence Generation: All zeros
Read data files from: K:Archivos de programaNmap OS detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 9.46 seconds Raw packets sent: 1143 (51.816KB) | Rcvd: 1146 (47.416KB)
Tenemos el listado de los puertos abiertos (sólo ha probado los puertos por defecto, los servicios más comunes, se pueden espcificar los puertos con -p) y la lista de posibles SOs con su correspondiente porcentaje de compatibilidad.
2130
« en: Sábado 18 de Octubre de 2008, 01:49 »
¡Ahora sí que va! cColaEnteros &cColaEnteros::operator + (cColaEnteros &cola) { cColaEnteros * aux; tNodoCola * paux; aux = new cColaEnteros; paux = this->pCabecera->primero; while (paux) { aux->Insertar_Elemento_Ultimo(paux->valor); paux = paux->sig; } paux = cola.pCabecera->primero; while (paux) { aux->Insertar_Elemento_Ultimo(paux->valor); paux = paux->sig; } return *aux; }
Gracias de nuevo, Eternal Idol
2131
« en: Sábado 18 de Octubre de 2008, 01:32 »
Creo que sé lo que pasa. Haciendo una inspección, me doy cuenta de que cola1 y cola3 hacen referencia a la misma memoria, por tanto al destruirse cola3 se destruye también cola1, pero luego se vuelve a llamar al destructor de cola1, con el consiguiente desastre. El problema supongo que vendrá del operador = que no está definido para esta clase. Voy a crearlo y te sigo comentando. Por cierto, ¡gracias Eternal Idol! EDIT: en realidad habría que cambiar el operador + también. Me estoy dando cuenta de lo mal hecho que está...
2132
« en: Sábado 18 de Octubre de 2008, 01:19 »
Sí, tienes razón, sí que funciona mejor con el & (no sé cómo demonios lo puse antes  ), pero da otro error de puntero corrupto al ejecutar el destructor de cola3 (sé que es cola3 porque primero pasa por cola1 y cola2): [attachment=0:29zbsbz5]captura2.JPG[/attachment:29zbsbz5]
2133
« en: Sábado 18 de Octubre de 2008, 00:57 »
1. Compilo y ejecuto, sale el output de arriba. 2. Descomento el destructor, salen numeros hasta que me canso y le doy a ctrl+c. 3. Agrego las referencias mencionadas, sale el output de arriba. Pues a mí no me funciona así... Yo también me lo he tenido que bajar de aquí mismo porque lo hice en otro PC. Con el destructor, no funciona ni como lo puse yo ni con el operador de dirección (&) que has comentado. Aquí está el error: [attachment=0:1ff37riq]captura18-10-08.JPG[/attachment:1ff37riq] Debido a que las referencias a memoria están mal y por tanto el acceso a la memoria aux->valor no está permitido. EDIT: Ahora que lo pienso, es posible que a ti te salgan los números raros porque te accede a una memoria accesible por tu proceso, y en el mío no, ya que los valores que pueden tomar las referencias erróneas diferirán en cada PC.
2134
« en: Sábado 18 de Octubre de 2008, 00:35 »
cColaEnteros & operator + (cColaEnteros &cola); cColaEnteros & cColaEnteros::operator + (cColaEnteros &cola) { //la operación es *this + cola tNodoCola * aux; //aux nos va a servir para recorrer cola aux = cola.pCabecera->primero; //mientras aux no sea NULL (no haya siguiente) while (aux) { //insertamos el elemento de cola al final de *this this->Insertar_Elemento_Ultimo(aux->valor); //pasamos al siguiente elemento aux = aux->sig; } //devolvemos el resultado return *this; }
No hay ningún cambio al ponerlo así, Eternal Idol. Aquí la tienes comentada, EL_UNI
2135
« en: Viernes 17 de Octubre de 2008, 22:44 »
Excelente explicación Pero la cuestión es cómo lo haría para sumar sin usar punteros
2136
« en: Viernes 17 de Octubre de 2008, 21:23 »
Utilizas un Office legal?? Es del trabajo, y sí, es legal con su licencia, claro (Office XP). Probaste registrando las dll(s) de el Office ? o reintalando/reparando el puro Office Nada, nada, eso no funcionó. Es algo que nunca me había pasado...  En fin, qué se puede esperar de esos...
2137
« en: Viernes 17 de Octubre de 2008, 21:20 »
2138
« en: Viernes 17 de Octubre de 2008, 21:18 »
A mi no me ha dado error ninguno ¿Descomentaste el destructor? por usar parametros por valor Precisamente, si los paso por valor, ¿por qué los devuelve modificados?
2139
« en: Viernes 17 de Octubre de 2008, 15:09 »
Sí , claro, no hay problema en pasarte el código completo, sólo estoy frikeando con él P.D: Uso VC++. Las tripas del destructor están comentadas.
2140
« en: Viernes 17 de Octubre de 2008, 14:43 »
¿Alguien le ha encontrado alguna vez la lógica a por qué Windows usa el fichero de paginación de memoria virtual cuando hay memoria física libre? ¿Y por qué usa un fichero de paginación dentro del sistema de ficheros (con la lentitud que ello conlleva) en vez de usar una partición de intercambio y pasar de las llamadas al sistema de ficheros?
2141
« en: Viernes 17 de Octubre de 2008, 14:40 »
Después de buscar en todos los foros habidos y por haber, y preguntarle a 5 gurús como mínimo, nadie tiene la respuesta. El caso es que format c: y reinstalar y ya funciona... Misterios de MicroSoft.
2142
« en: Viernes 17 de Octubre de 2008, 14:36 »
Hmmm, pero las colas funcionan perfectamente si dejo sólo el destructor por defecto (el que no hace nada, vamos). Aquí te dejo el constructor y los métodos de inserción de elementos que uso en main(): cColaEnteros::cColaEnteros(void) { pCabecera = new tCabeceraCola; pCabecera->primero = NULL; pCabecera->ultimo = NULL; pCabecera->numelementos = 0; } // Inserta un elemento al principio de la cola void cColaEnteros::Insertar_Elemento_Primero(int elemento) { tNodoCola * aux; //Creamos el nuevo elemento aux = new tNodoCola; aux->valor = elemento; aux->ant = NULL; //Si la cola no tiene ningún elemento if(this->Esta_Vacia()) { aux->sig = NULL; pCabecera->primero = aux; pCabecera->ultimo = aux; } //Si ya hay alguno else { pCabecera->primero->ant = aux; aux->sig = pCabecera->primero; pCabecera->primero = aux; } pCabecera->numelementos++; } // Inserta un elemento al final de la cola void cColaEnteros::Insertar_Elemento_Ultimo(int elemento) { tNodoCola * aux; //Creamos el nuevo elemento aux = new tNodoCola; aux->valor = elemento; aux->sig = NULL; //Si la cola no tiene ningún elemento if(this->Esta_Vacia()) { aux->ant = NULL; pCabecera->primero = aux; pCabecera->ultimo = aux; } //Si ya hay alguno else { pCabecera->ultimo->sig = aux; aux->ant = pCabecera->ultimo; pCabecera->ultimo = aux; } pCabecera->numelementos++; }
Y ya que estamos, main(): int main(void) { cColaEnteros cola1, cola2, cola3; int i; for (i=0;i<=15;i++) { cola1.Insertar_Elemento_Ultimo(i); cola2.Insertar_Elemento_Primero(i+10); } cola3 = cola1 + cola2; cola3.Imprimir_Elementos(); return 0; }
2143
« en: Viernes 17 de Octubre de 2008, 14:15 »
Hola chavales, ¿qué onda? Estoy refrescando mi memoria en POO (y de paso aprendiendo la sintaxis de C++ de una vez  ) y he implementado una cola de enteros doblemente enlazada: struct tNodoCola { int valor; tNodoCola * sig; tNodoCola * ant; }; struct tCabeceraCola { tNodoCola *primero, *ultimo; int numelementos; }; class cColaEnteros { tCabeceraCola * pCabecera; public: //Constructor cColaEnteros(void); //Destructor ~cColaEnteros(void); //Operadores cColaEnteros operator + (cColaEnteros cola); //Métodos // Aquí van varios métodos... //Colegas friend class cColaEnteros; };
El desctructor y el operador + implementados tal que así: cColaEnteros::~cColaEnteros(void) { tNodoCola * aux1, * aux2; if (!this->Esta_Vacia()) { aux1 = pCabecera->ultimo; while (aux1) { aux2 = aux1->ant; delete aux1; aux1 = aux2; } delete pCabecera; } } cColaEnteros cColaEnteros::operator + (cColaEnteros cola) { tNodoCola * aux; aux = cola.pCabecera->primero; while (aux) { this->Insertar_Elemento_Ultimo(aux->valor); aux = aux->sig; } return *this; }
Sin embargo, me da error de violación de segmento  en la línea (en main()): Si imprimo los valores en el interior del operador, la cola this queda con los nuevos valores concatenados de cola, pero al salir del operador y querer imprimirlo en main(), veo que los valores de la cola son todos incorrectos, con punteros corruptos. Si comento el destructor funciona bien, así que el problema es el destructor, ya que suprime los valores de ambas colas al salir del operador + (porque son variables locales al método). Pero necesito usar el destructor para liberar la memoria usada una vez finalizado el programa, y tampoco quiero que se tenga que llamar a un método de descarga cada vez que se deje de usar una cola, que para eso están los destructores. ¿Alguna idea de cual es el error? ¡Gracias de antemano!
2144
« en: Viernes 17 de Octubre de 2008, 09:19 »
Es != y no =!  Además, lo puedes poner así: while(!p[j].getPrestado())
2145
« en: Viernes 17 de Octubre de 2008, 09:16 »
Aquí no se hace la tarea... Si tienes algo hecho y no te funciona o tienes alguna duda concreta, se puede ver. De todas formas lo que pretendes es bastante sencillo, piénsatelo un poco, vaguete
2146
« en: Viernes 17 de Octubre de 2008, 09:11 »
Postea por favor el código de las declaraciones que uses.
Recuerda también declarar la función main() como int main() y hacer un return 0; al final de ésta.
2147
« en: Jueves 16 de Octubre de 2008, 16:35 »
Hmm, no sé si estoy ciego  , pero sigo sin encontrar la definición de lista...
2148
« en: Jueves 16 de Octubre de 2008, 16:08 »
Sí, claro, entonces los programadores nos quedaríamos sin curro
2149
« en: Jueves 16 de Octubre de 2008, 16:05 »
¡Bienvenido al foro 123celes!
Deberías usar las etiquetas de código para que te quede más legible.
Primero debes comprender que este es un código de 16 bits, por tanto se ejecuta en el modo real de los procesadores Intel (y clones) ¿Sabes cómo se referencia la memoria en modo real (segmento:desplazamiento)?
¡Saludos!
2150
« en: Jueves 16 de Octubre de 2008, 16:01 »
Mi opinión es que lo haces algo sencillo de una manera excesivamente complicada... ¿Puedes explicarme qué pretendes con lo siguiente? int(*pfunc[])(lista l)= { leer_notas, escribir_nota, escribir_trabajo, total_tp, fin, };
Páginas: 1 ... 84 85 [86] 87 88 ... 100
|
|
|