Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - h0oke

#1
Ingeniería Inversa / OllyDbg
29 Mayo 2010, 17:00 PM
Dónde se encuentra la opción para ver los Flags?

Supongamos que tenga lo siguiente:

Código (asm) [Seleccionar]
mov al, 0FFH
add al, 1


Quisiera fijarme que CF esté en 1
#2
ASM / MASM - Error A1000
28 Mayo 2010, 15:39 PM
Código (asm) [Seleccionar]
TITLE ADDSUB
; this program adds and substract integers

.386
.MODEL flat, stdcall
.STACK 4096
ExitProcess PROTO, dwExitCode: DWORD
DumpRegs PROTO

.code
main PROC

   mov eax, 10000h
   add eax, 40000h
   sub eax, 20000h
   call DumpRegs

   INVOKE ExitProcess, 0

main ENDP
END main

CitarAssembling: C:\Projectos\pru.asm
MASM : fatal error A1000: cannot open file : C:\Projectos\pru.asm
El volumen de la unidad C es Programas
El n£mero de serie del volumen es: 249C-05D7

Directorio de C:\Projectos

28/05/2010  10:23               309 pru
              1 archivos            309 bytes
              0 dirs   3.452.473.344 bytes libres

Estoy ensamblando en una máquina virtual, será ese el problema?

One of the following may be a cause:

The file does not exist. El archivo existe

The file is in use by another process. No está siendo usado por otro

The filename is not valid. No se ha que se refiere, creo que no tiene nada extraño el filename

A read-only file with the output filename already exists.La carpeta está vacía, solo con el pru.asm

The current drive is full. Quedan 3gb

The current directory is the root and is full. Root? No podré compilar en C?

The device cannot be written to. Si se puede escribir

The drive is not ready. Creo que si lo está


EI: juntando mensajes.

Al parecer era un problema de MASM... Me he pasado a Rad ASM, y por lo menos ensambla bien. Ahora, quiero linkearlo pero aparecen errores que seguramente son de librerías:

plus.obj : error LNK2001: unresolved external symbol _ExitProcess@4
plus.obj : error LNK2001: unresolved external symbol _DumpRegs@0


Sigue siendo el mismo source anterior.

EDITADO:

Se solucionó el tema de ExitProcess, pero aún falta dumpregs.
#3
Seguridad / DUDA - Puertos abiertos
25 Mayo 2010, 16:56 PM
Hola, a través de la herramiento de red de ubuntu hice lo siguiente, averigüé mi ip pública XXX.XXX.XXX.XXX y en el explorador de puertos me salieron los siguientes puertos abiertos: 80, telnet, 30005. Buscando por internet:

http://www.vsantivirus.com/backdoor-jz.htm

Lo raro es que lo anterior es sólo para windows, no creo poder haberme infectado con tal cosa en nix.

Ahora bien, cuando puse en el explorador localhost, sólo me salió abierto el 631.

Estoy confundido, cuál es la realidad?
#4
Hola, tengo el siguiente programa para "depurar":

#include <stdio.h>

int main(){
   int *a, b;
   b = 5;
   a = &b;
   printf("El valor es:%d",*a);
   return 0;
}


Ahora bien, cuando hago el build del source, y luego trato de depurar, tengo el siguiente mensaje en la consola:

Citaraviso: GDB: Failed to set controlling terminal: Operación no permitida

¿A qué se debe?
#5
Programación C/C++ / C/C++ Dudas parámetros
23 Mayo 2010, 16:00 PM
He visto que en C los pasos por referencia se hacen de la siguiente manera:

int funcion(int *a, int *b);

En C++, he visto que se puede utilizar directamente:

Código (cpp) [Seleccionar]
int funcion(int &a, int &b);

En C++ es optativo utilizar cualquiera de las dos? Es decir, queda a disposición de la comodidad del programador?
#6
Programación C/C++ / [C] - Duda punteros
23 Mayo 2010, 02:02 AM
Tengo lo siguiente

int *lista;
...
lista = (int *)(malloc(sizeof(int) * (n + 1)));
...



Aquí si me paso de n(N), me debería dar un segmentation fault verdad?


void ingreso(int *L, int N){
  int i;
  for(i = 0; i < N; i++){
    puts("Elemento >");
    scanf("%d",L);
    L++;
  }
}


Acaso malloc, no me reservaría n espacios de sizeof(int), y si asigno algo a un n + 1, debería fallar verdad?
#7
Programación C/C++ / [C] - Duda salida gcc
22 Mayo 2010, 21:05 PM
A que se debe el siguiente mensaje?

Citargcc Agenda.c
/tmp/ccL3qioR.o: In function `main':
Agenda.c:(.text+0x7b): undefined reference to `data_new_write'
collect2: ld returned 1 exit status

Parte del code:

...
void data_new_write(st_p, char *, int *);
...
int main(){
...
data_new_write(*user, path, &e);
...
}
void data_write(st_p P, char *path, int *error){
  FILE *f;
  *error = 0;
  f = fopen(path, "w+");
  if(f)
   fprintf(f, "%s%s%s%u", P.name, P.dir, P.phone, P.age);
  else
    *error = 1;
  close(f);
}
#8
Hola alguno de ustedes ha podido configurar Kdevelop 4.0 para que soporte C y no por defecto su superconjunto que es C++?
#9
Programación C/C++ / [C] - Duda estructuras
20 Mayo 2010, 23:32 PM
¿Cuál es el método utilizado en C para el ingreso de una estructura de datos? Me refiero a que si se deben leer las variables de la estructura por apartey luego asignarlas a los miembros de la esctructura... o bien, si se deben asignar directamente a cada miembro de la esctructura luego de un scanf().
#10
Si quisiera armar un array, pero sólo utilizando punteros, siendo ésta la función:

void _ingreso(int *Lista, int *Cnt);

En la declaración debería reservar memoria para ingresar un elemento verdad?, entiéndase por esto, malloc(), luego de esto, recién podría leer stdin para asignar el valor leído a un puntero inicial, si no me equivoco.

_____________________________________________________________________________________________________

#include <stdio.h>
/* Posible solución, pero que al colocar el último elemento trae consigo un error */
#define SIZE 10

int main(){
  int *lista;
  int i;
  lista = malloc(sizeof(int)*10);
  for(i = 0; i < SIZE; i++){
    printf("Ingrese elemento N %d\n",i);
    scanf("%d", lista);
    *lista++;
  }
  free(lista);
  puts("Terminado");
  return 0;
}

#11
Hola, tengo una duda, gcc me lanza el siguiente warning:

gcc puntero1.c
puntero1.c: In function 'main':
puntero1.c:34: warning: parameter names (without types) in function declaration



Este es el código:

Código (c,34) [Seleccionar]
#include <stdio.h>

/* Practica para ordenar arreglos
1- Utilizando una funcion con un argumento array
2- Utilizando una funcion con un argumento puntero
*/


int Ord_Array(int Lista[], int Cant);
int Ord_Point(int *Lista, int Cant);

int main()
{
//Declaracion de variables
int miLista[10];
int *miPuntero;
int i;

int _max = 10;
//Inicializacion de array

puts("\t\t Ingreso de lista");
for(i = 0; i < 10; i++)
{
printf("Elemento n %d:",i);
scanf("%d",&miLista[i]);
}
puts("Terminado");

//Inicializamos el puntero
miPuntero = &miLista[0];

//Ordenamos
int Ord_Point(miLista, _max);

//Mostramos
for(i = 0; i < 10; i++)
{
printf("Elemento n %d \t %d\n",i,miLista[i]);
printf("Elemento n %d \t %d\n",i,*(miPuntero + i));
}
return 0;
}

int Ord_Array(int Lista[], int Cant)
{
int i, j, aux;
for(i = 0; i < Cant; i++)
{
for(j = i + 1; i < Cant + 1; i++)
{
if(Lista[i] > Lista[j])
{
aux = Lista[i];
Lista[i] = Lista[j];
Lista[j] = aux;
}
}
}
}

int Ord_Point(int *Lista, int Cant)
{
int i, j, aux;
for(i = 0; i < Cant; i++)
{
for(j = i + 1; i < Cant + 1; i++)
{
if(*(Lista + i) > *(Lista + j))
{
aux = *(Lista + i);
*(Lista + i) = *(Lista + j);
*(Lista + j) = aux;
}
}
}
}


   

   
#12
Hola, existe alguna página donde pueda conseguir stickers(pegatinas, calcomanías...etc) de software libre?
#13
Hola, tengo una máquina algo vieja:

1- Athlon 1.6
2- RAM: 370mb
3- HD: 3,2 gb

Qué distro se podría instalar? Lo que se necesitaría es:

1- Internet(mozilla o chrome) + adobe flash
2- Cliente para msn

#14
Scripting / Python Interfaces
1 Abril 2010, 23:49 PM
Qué recomendarían? Python + QT o Python + TCL/TK.

Sé que la principal diferencia es que el primero debe ser compilado, y el segundo es interpretado, con la que estaría muy en juego la velocidad...
#15
Scripting / Python - Duda Algoritmo
27 Marzo 2010, 15:57 PM
Código (python) [Seleccionar]
import math

def menor(a,b):
   return a if(a <= b) else b

def raiz2(a,b):
   c = a//b
   if(math.fabs(b - c) <= 1):
       return menor(b,c)
   else:
       raiz2(a,(b + c)//2)
       
   

a = 170000
b = raiz2(a,3)
print(b)


¿Por qué razón no devuelve el valor que es 412?

PD: Depuré hasta que llega al printf y ahí no hallo el error.
#16
Java / Parámetros
24 Marzo 2010, 23:31 PM
En java como paso variables por referencia?
#17
Java / Ubuntu - Instalar Eclipse
22 Marzo 2010, 02:06 AM
Hola, me baje el .tar.gz de eclipse pero no tengo idea como instalarlo  :xD Alguien tiene idea?
#18
Scripting / Python - Algoritmo de compresión
15 Noviembre 2009, 01:40 AM
CitarEl algoritmo de compresión lz77 pertenece a la familia de compresores sin pérdida, también llamados compresores de texto, a los cuales se les llama así porque no omiten información del archivo al comprimirlo, al contrario que los compresores que utilizan algoritmos del tipo lossy, que omiten algo de información pero que disminuyen considerablemente el tamaño del archivo original, el cual es el caso de los archivos MP3, MPG, jpeg, etc.
Los compresores basados en algoritmos sin pérdida se utilizan cuando la información a comprimir es crítica y no se puede perder información, por ejemplo en los archivos ejecutables, tablas de bases de datos, o cualquier tipo de información que no admita pérdida.

El modelo lz77 es muy usado porque es fácil de implementar y es bastante eficiente.

En 1977 Abraham Lempel y Jacob Ziv presentaron su modelo de compresión basado en diccionario, para compresión de texto –compresión de texto se refiere a compresión sin pérdida para cualquier tipo de datos–. Hasta la fecha todos los algoritmos de compresión desarrollados eran básicamente compresores estáticos. El nuevo modelo fue llamado lz77 (por razones obvias). La salida consistía siempre en desplazamientos o corrimientos y tamaños del texto visto anteriormente. También se incluía en la salida el siguiente byte después de una coincidencia, porque el contexto (últimos bytes vistos) de este byte es la frase, y si no era parte de la frase (la coincidencia), luego tal vez no se había comprimido, así que, ¿Para que desperdiciar tiempo tratando de encontrar una coincidencia (o espacio) para él?

En 1982 James Storer y Thomas Szymanski basados en el trabajo de Lempel y Ziv, presentaron su modelo, el lzss. La diferencia principal es en la salida, lz77 siempre daba un para desplazamiento/tamaño, aún si la coincidencia era de un solo byte (en cuyo caso usaban más de ocho bits para representar un byte) de manera que el LZSS usa otro truco para mejorarlo: usa banderas (flags), que ocupan un solo bit y nos informan de lo que viene luego: una literal o un par desplazamiento/tamaño y este algoritmo es el que actualmente usamos, pero el lzss es comúnmente llamado lz77, así que lo llamaremos lz77 de este punto en adelante, pero es importante recordar que también puede ser llamado LZSS. LZSS también puede usar árboles binarios o árboles de sufijos para hacer búsquedas más eficientes.

La teoría es muy simple e intuitiva. Cuando se haya una coincidencia (también llamada frase o conjunto de bytes que ya han sido vistos en el archivo de entrada) en lugar de escribir dichos bytes se escribe el desplazamiento o tamaño de la repetición: dónde está y su longitud.

Éste es un modelo basado en diccionario, porque se mantiene un diccionario (que en este caso se conoce como “Ventana Corrediza”) y se hace referencia a ella con pares desplazamiento/tamaño. Esta versión de lz77, usa una ventana corrediza, la cual tiene un tamaño máximo, de manera que la ventana no puede ser el archivo completo, en su lugar, la ventana corrediza mantiene los últimos bytes “vistos”.

Imaginemos que estamos comprimiendo el texto “ab ab”, leemos hasta “ab ” y lo escribimos sin comprimir, luego leemos “ab” y escribimos lo siguiente: con el “desplazamiento” de 0 se halló una coincidencia de dos bytes repetidos.

Bien, aqui la implementación en python:

Compresor :

Código (python) [Seleccionar]

#Autor: determx
#Fecha: 14/11/2009
#Version : 1.0.0
import os
import string
   
#Funcion que devuelve el archivo de texto en una lista
def Leer_Fichero(Ruta):
   if os.path.exists(Ruta):
       archivo = open(Ruta)
       datos = []
       for linea in archivo:
           datos.append(linea)
       archivo.close()
       return datos

#Funcion para escribir texto comprimido en archivo
def Escribe_Fichero(Ruta,Texto,lInsp,lMem):
   archivo = open(Ruta,"w")
   archivo.write(str(lInsp) + '\n')
   archivo.write(str(lMem) + '\n')
   archivo.write(Texto)
   archivo.close()

#Function para codificar
def _encode(prim,cnt):
   aux = '(' + str(hex(prim))[2:] + ',' + str(hex(cnt))[2:] + ')'
   return aux
   
#Cadena con espacios
def _blancos(Cad,Cantidad):
   Cad = Cad + " " * Cantidad
   return Cad

#Inserta blancos al frente
def _fblancos(Cad,Cantidad):
   Cad = " " * Cantidad + Cad
   return Cad

#Mueve caracteres a la ventana de inspeccion
def _toshift(Vdel,Vins,cantidad):
   Vins = Vins[cantidad:] + Vdel[:cantidad]
   Vdel = Vdel[cantidad:]
   return Vdel,Vins

#Funcion para buscar coincidencias
def _matches(mem,insp):
   while insp != '':
       pos = string.find(mem,insp)
       if pos != -1:
   break
else:
   insp = insp[:-1]
   return pos,len(insp)

#Funcion que devuelve un texto comprimido
def Comprimir(Texto,TamInsp,TamMem):
   V_Mem = ''
   V_Insp = ''
   V_Mem = _blancos(V_Mem,TamMem)
   V_Insp = _blancos(V_Insp,TamInsp)
   Comprimido = [] #Array donde junto el texto a guardar
   for L in Texto:
cant = len(L)
cont = 1
shcant = cont
       L_Comp = "" #Linea a comprimir
       L, V_Insp = _toshift(L,V_Insp,szInsp)#Inicializo mi ventana insp  
L = _blancos(L,szInsp)
       while cont < cant:
           inicio,fin = _matches(V_Mem,V_Insp)
   #Unicamente se codificaran las coincidencias
   #mayores a la codificacion
   if (fin - inicio) < len(str(szMem)*2)+3:
L_Comp = L_Comp[:] + V_Insp[0]
               #Muevo un solo caracter del texto a inspeccion
               shcant = 1
               cont += shcant
           else:
L_Comp = L_Comp[:] + _encode(inicio,fin)
shcant = fin
               cont += shcant
   V_Insp, V_Mem = _toshift(V_Insp,V_Mem,shcant)
   V_Insp = _fblancos(V_Insp,shcant)
           L, V_Insp = _toshift(L,V_Insp,shcant)
   L = _blancos(L,szInsp)
Comprimido.append(L_Comp)
   return '\n'.join(Comprimido)                

#Main
Ruta = raw_input('Ruta de archivo a comprimir>')
Dest = raw_input('Ruta destino de compresion>')
Documento = Leer_Fichero(Ruta);
szInsp = int(raw_input('Tamaño ventana inspeccion>'))
szMem = int(raw_input('Tamaño ventana memoria>'))
if Documento != None:  
   Txt_Comp = Comprimir(Documento,szInsp,szMem)
   Escribe_Fichero(Dest,Txt_Comp,szInsp,szMem)
   print ('GOOD!')
else:
   print "NO EXISTE EL ARCHIVO/ARCHIVO VACIO"


Descompresor:

Código (python) [Seleccionar]

#Autor: determx
#Fecha: 14/11/2009
#Version : 1.0.0

import os
import string

#Funcion que devuelve el archivo de texto en una lista
def Leer_Fichero(Ruta):
   if os.path.exists(Ruta):
       archivo = open(Ruta)
       datos = []
       for linea in archivo:
           datos.append(linea)
       archivo.close()
       return datos

#Funcion para escribir texto comprimido en archivo
def Escribe_Fichero(Ruta,Texto):
   archivo = open(Ruta,"w")
   archivo.write(Texto)
   archivo.close()
   
#Funcion que devuelve inicio y fin en enteros
def _decode(Coded):
   poscoma = string.find(Coded,',')
   if poscoma != -1:
       try:
           ini = int(Coded[1 : poscoma],16)
       except:
           return 0,0
       try:
           fin = int(Coded[poscoma + 1: len(Coded)-1],16)
       except:
           return 0,0
       return ini,fin
   else:
       return 0,0
   
#Cadena con espacios
def _blancos(Cad,Cantidad):
   Cad = Cad + " " * Cantidad
   return Cad

def Descomprime(Texto):
   szInsp = int(Texto[0])
   szMem = int(Texto[1])
   Texto = Texto[2:]
   l_Descomp = []
   V_Mem =''
   V_Mem = _blancos(V_Mem,szMem)  
   for l in Texto:
       s_Descomp = ''
       while l != '\n' and l!= '':
           if l[0] != '(':
               V_Mem = V_Mem[1:] + l[0]
               s_Descomp = s_Descomp + l[0]
               l = l[1:]
           else:
               PosFin = string.find(l,')')
               Encoded = l[0:PosFin+1]
               i,f = _decode(Encoded)
               if (i != 0 or f !=0):
                   s_Descomp = s_Descomp + V_Mem[i:i+f]
                   V_Mem = V_Mem[f:] + V_Mem[i:i+f]
                   l = l[PosFin+1:]
               else:
                   V_Mem = V_Mem[1:] + l[0]
                   s_Descomp = s_Descomp + l[0]
                   l = l[1:]
       l_Descomp.append(s_Descomp)
   return '\n'.join(l_Descomp)

#MAIN
Path = raw_input('Ingresa ruta archivo comprimido>')
Dest = raw_input('Ruta destino de compresion>')
Documento = Leer_Fichero(Path)
toArchivo = Descomprime(Documento)
Escribe_Fichero(Dest,toArchivo)
print('GOOD!')


Por supuesto, hacen falta muchas mejoras, me gustaría su opinión.
#19
Scripting / Python - Problema
14 Noviembre 2009, 16:15 PM
Hola tengo la siguiente función:

Código (python) [Seleccionar]
#Funcion para buscar coincidencias
def _matches(mem,insp):
    while insp != "":
        pos = mem.index(insp)
        if pos != -1:
            break
        else:
            insp = insp[:-1]
    return pos,len(insp)


Por ejemplo :

memo = 'HOLA QUE TAL'
inspo = 'HOLA QUE TAL'


Me devuelve 0,12. Pero en el caso:

memo = 'HADES'
inspo = 'HADESASO'


Directamente me larga un error que no deja continuar buscando, ValueError : substring not found

¿Cómo puedo hacer para siga buscando y pueda comparar pos != -1?
#20
Scripting / [?] Python - String Matching
8 Noviembre 2009, 21:25 PM
Qué métodos conocen en python para búsquedas de strings, se que existe "find e index" pero estos solo encuentran la primera ocurrencia. Quisiera saber si es que existen otros métodos.
#21
Scripting / [?]Python - Parámetros
27 Octubre 2009, 16:12 PM
Hola, quisiera saber si he entendido bien como pasar parámetros por referencia en python:

Código (python) [Seleccionar]
def cambia(uno,dos):
aux = dos
dos = uno
uno = aux
return uno,dos

x = raw_input("UNO>")
y = raw_input("DOS>")
x,y = cambia(x,y)
print str(x) + " " + str(y)


Es la única manera para tipos simples de datos?
#22
Scripting / Duda Batch [Solucionado]
14 Octubre 2009, 02:43 AM
¿Por qué razón cuando ingreso un numero del 0 al 9 el código no abre la carpeta correspondiente?

Código (dos) [Seleccionar]

@echo off

echo "************************"
echo "* 1-Facu              *"
echo "* 2-Algoritmia         *"
echo "* 3-Assembly           *"
echo "* 4-C++                *"
echo "* 5-Python             *"
echo "************************"

:bucle
set /p var = Introduzca opcion:

if %var% == 1 goto:facu
if %var% == 2 goto:algo
if %var% == 3 goto:asm
if %var% == 4 goto:c
if %var% == 5 goto:pyth

:facu
start d:\BuckUp\EBOOKS\facu
:algo
start d:\BuckUp\EBOOKS\Algoritmia
:asm
start d:\BuckUp\EBOOKS\Assembly
:c
start d:\BuckUp\EBOOKS\C++
:pyth
start d:\BuckUp\EBOOKS\Python
#23
Programación Visual Basic / Duda - Strings
19 Septiembre 2009, 18:35 PM
Hola, resulta que tengo que resolver lo siguiente: Tengo una texto, el cual posee signos de puntuación, lo que tengo que lograr es que después de cada signo, aparezca un solo espacio en blanco. Quisiera recibir opiniones sobre como resolverlo.
#24
Scripting / Dudas Batch
4 Septiembre 2009, 03:47 AM
Hola estas son mis dudas:

1-Como leer una entrada de datos de tipo cadena
2-Como hace uso de la estructura de control if sobre la anterior, es decir comparando cadenas, junto al else.

Gracias.
#25
Miren:



WTF?!
#26
Electrónica / ALGEBRA DE BOOLE
4 Agosto 2009, 23:50 PM
He visto, que ha algunos les interesó la electrónica y sobre todo la parte de lógica digital.

He decidido poner en este post, los fundamentos del algebra de boole, y el por que de cada una de las operaciones que se encuentran en él.

Espero que les sirva de ayuda, me ha costado mucho la verdad.

ALGEBRA DE BOOLE

ALGEBRA DE BOOLE

Postulados:

Operaciones conmutativas:

A*B=B*A
A+B=B+A

Elemento neutro:

A*1=A
A+0=A

Propiedad distributiva:


A*(B+C)=(A*B)+(A*C)
A+(B*C)=(A+B)*(A+C)

Complementos:

A+Ã=1
A*Ã=0

TEOREMAS:

DUALIDAD: Dada una identidad de los postulados del álgebra de boole, por lo tanto válida, se obtiene otra identidad igualmente válida para la operación * en la operación +, y viceversa. Cada operación se reemplaza por otra, al igual que sus elementos neutros.

IDEMPOTENCIA:

A*A=A
A+A=A

Demostración:

A+A=(A+A)*1
         (A+A)*(A+Ã)
         A+(A*Ã)
         A+0
         A
Dual para la operación *


ABSORCIÓN:
A+1=1
A*0=0
Demostración:

1=A+Ã
   A+(Ã*1)
   (A+Ã)*(A+1)
   1*(A+1)
   (A+1)*1
   A+1

Dual para A*0

Primera ley de redundancia:
A+(A*B)=A
A*(A+B)=A

A=A*1
    A*(B+1)
    (A*B)+(A*1)
    (A*1)+(A*B)
    A+(A*B)

Dual para A*(A+B)

Unicidad del complemento:

Supondremos que:

Ã=X ^ Ã=Y // Es decir supondremos 2 complementos posibles para Ã

Si existiera lo anterior, entonces tendríamos:

(A+Ã=A+X=A+Y=1) ^ (A*Ã=A*X=A*Y=0)

Demostración:

X=X*1
    X*(A+Y)
    (X*A)+(X*Y)
    0+(X*Y)
    (A*Y)+(X*Y)
    Y*(A+X)
    Y*1
     Y

INVOLUCION:

A=Ẫ

Demostración:
Ã=E
Ẽ = A

A*E=0
A+E=1

Reemplazando en E:
A*Ã=0
A+Ã=1


ASOCIATIVA:

A+(B+C)=(A+B)+C
A*(B*C)=(A*B)*C

Supondremos:

A+((A*B)*C)=A+((A*(B*C))
Ã+((A*B)*C)=A+((A*(B*C))

DEMOSTRAREMOS:
A+((A*B)*C)=A+((A*B)*C)
A+((A*B)*C)=A
        A*(A*C)
        A+(A*B)+(A+C)
        A+((A*B)*C)

DEMOSTRAREMOS: Ã+((A*B)*C)=Ã+((A*B)*C)

Ã+(A*(B*C)) = (Ã+A) * (Ã+(B*C))
                             1 * (Ã+(B*C))
                             (Ã+B) * (Ã+C)
                             1 * (Ã+B) * (Ã+C)
                             (Ã+A) *  (Ã+B) * (Ã+C)
                            Ã+(A*B) * Ã+C
                            Ã+((A*B)*C)

Y CON ELLO:

(A+((A*B)*C))* (Ã+((A*B)*C)))  =(A+(A*(B*C)) *(Ã+(A*(B*C))

Al primer miembro lo minimizaremos:

(A+((A*B)*C))* (Ã+((A*B)*C))  

(A*Ã)+((A*B)*C)

0 + ((A*B)*C))          I



(A+(A*(B*C)) *(Ã+(A*(B*C))

(A+Ã)+(A*(A*B))

0+(A*(A*B))   II

Para terminar:
I=II         
(A*B)*C=A*(A*B)   

PRIMERA LEY DE DEMORGAN:

_____
(A+O) = Ã*Õ
_____
(A*O) = Ã+Õ

Demostración:
   
(A+O) + (Ã*Õ) = 1   

(A+O)*Ã + (A+O)*Õ

(A*Ã)+O + (O*Õ)+A

1+O + 1+A

1+1

1

SEGUNDA LEY DE DEMORGAN

Dual al anterior

SEGUNDA LEY REDUNDANCIA

A*(Ã+B) = A*B
A+(Ã*B) = A+B

A*(Ã+B) = (A*Ã) + (A*B)
                       0    +   (A*B)
                    (A*B)

Dual al anterior para demostrar : A+(Ã*B) = A+B
#27
Electrónica / Algebra de boole - Duda
3 Agosto 2009, 21:38 PM
Debo resolver esta función:

(xΘy)(xΘz)(xΘ~z)

Por tablas puedo obtener la FND, pero analíticamente no puedo hallarla  :-\
#28
ASM / Duda - Ensamblado
31 Julio 2009, 14:07 PM
Hola, este este es mi primer intento de código en ASM, de seguro tiene millones de errores, o seguramente carece de sentido  :-[.

Código (asm) [Seleccionar]
TITLE fibonnacci-10n

Include Irvine32.inc
.data
i byte 1
j byte 0
t byte 0
.code
main PROC
mov cx,10   ;counter=10
lblLooop1:
       mov ax,i
       add ax,j
       mov bx,t
       add bx,ax
       mov i,j
       mov j,t
       mov dx,j
       call DUMPREGS  
       loop lblLoop1
main ENDP
END main


Esto creo que no es correcto verdad?:
        mov i,j
        mov j,t


Lo tengo en el editor de MASM, tengo la duda de como ensamblarlo.
#29
Hola será que estoy ciego?
Mi duda es si existe una parte para listar "amigos", así como existe una opción para la lista de ignorados.
Pregunto porque el foro es muy activo, y la verdad he conocido a excelentes user's que me gustaría tener agregados.
#30
ASM / Duda - Tutorial ASM
28 Julio 2009, 17:02 PM
Hola me he decidido por estudiar algo de ASM. Para ello me baje The Art of Assembly, y MASM32.

Mi duda es el tema de los compiladores y como diferenciar la sintaxis. En este caso necesito saber si los ejemplos puedes ser compilados tranquilamente con MASM32, ejemplo que dan en el libro:

Código (asm) [Seleccionar]
if( eax = 0 ) then

      stdout.put( "error: NULL pointer encountered", nl );

else

      stdout.put( "Pointer is valid", nl );

endif;


program NumsInColumns;

Código (asm) [Seleccionar]
#include( "stdlib.hhf" )

var
   i32: int32;
   ColCnt: int8;

begin NumsInColumns;

   mov( 96, i32 );
   mov( 0, ColCnt );
   while( i32 > 0 ) do

      if( ColCnt = 8 ) then

         stdout.newln();
         mov( 0, ColCnt );

      endif;
      stdout.puti32Size( i32, 5, ' ' );
      sub( 1, i32 );
      add( 1, ColCnt );

   endwhile;
   stdout.newln();

end NumsInColumns;


Me parece medio rara la sintaxis, ya que cuando trabajé con MPLAB no utilizaba ";" "()"  :-\
#31
Programación Visual Basic / Calculadora-Duda
17 Julio 2009, 01:08 AM
Hola, analizando ayer la calculadora de windows me ha quedado una duda para hacer una implementación en vb.

Pareciera que mi cerebro está algo congelado peor no logro entender la siguiente lógica:

Para realizar las operaciones, uno ingresa un número, escoge la operación, y luego ingresa otro número,..., todo esto N veces. Bien, la calculadora no borra nunca la pantalla entre un número y otro número; lo que yo pienso es que existe una bandera que cambia a un TRUE cuando se escoge una operación, luego cuando se ingresa el próximo número, se analiza si esta bandera está en TRUE, si es así guarda el resultado en una variable, limpia el textbox y uno sigue escribiendo normalmente, ¿esto es correcto?
#32
Tengo una función que obtiene los procesos del sistema y luego según uno vaya seleccionando en un textbox coloca: "VB6.exe" "svchost.exe",etc. ¿A partir de ello se puede obtener el PID?
#33
Ejercicios / Pascal-Agenda
13 Julio 2009, 04:37 AM
Hola aqui les dejo una parte de la agenda que estoy haciendo:
Código (Pascal) [Seleccionar]

program Untitled;

uses
    crt;
type
    Persona=
    record
          Nombre:string[10];
          Telefono:string[10];
    end;
var
   option:integer;
   Friend:Persona;
   Fichero:file of Persona;
   nameFile:string;
   buscado:integer;
   adato:Persona;

begin
repeat
//Menu
clrscr;
nameFile:='c:\AGENDA.txt';
writeln('1) Agregar persona');
writeln('2) Buscar persona');
writeln('3) Salir de agenda');
//Validar opcion
          repeat
               writeln('Elige opcion:');
               readln(option);
          until (option>0) and (option<=3);
          case option of
               1:
                 begin
                      writeln('AGREGANDO PERSONA');
                      writeln('INGRESA NOMBRE:');
                      readln(Friend.Nombre);
                      writeln('INGRESA TELEFONO:');
                      readln(Friend.Telefono);
                      Assign(Fichero,nameFile);
                      Reset(Fichero);
                      Write(Fichero,Friend);
                      Close(Fichero);
                 end;
               2:
               begin
                    writeln('BUSCANDO');
                    readln(buscado);
                    Assign(Fichero,nameFile);
                    reset(Fichero);
                    seek( fichero, buscado );
                    read(fichero,adato);
                    writeln('Nombre:',adato.Nombre);
                    writeln('Telefono:',adato.Telefono);
                    close(Fichero);
               end;
               3:writeln('Seleccionaste salir')
          end;
          readln();
until option=3;
end.

Un saludo
#34
Programación Visual Basic / Duda GetCursorPos
29 Junio 2009, 03:41 AM
Hola... Estoy en un proyecto donde utilizo la función mencionada, con el fin de mostrar en una etiqueta la posición exacta del mouse a medida que se va moviendo. El problema es que lo utilizo de la siguiente manera:

Código (vb) [Seleccionar]
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   GetCursorPos pt
   Label3.Caption = "X:" & Str$(pt.x) & " Y:" + Str$(pt.y)
End Sub


Ciertas veces, es medio "lenta" la letura y cuando muevo el mouse tarda un segundo y medio en refrescar. Será mejor colocar un timer?
#35
Tengo una duda. Quiero comenzar a leer y escribir procesos pero todavía no se muy bien sobre las funciones para editar memoria. Son las mismas que en windows? Me refiero a readprocessmemory,writeprocessmemory? Y con respecto a las ventanas? Ya no puedo utilizar seguramente findwindowsex, como sería en linux?
#36
Programación Visual Basic / Show_Hide_Desktop
14 Junio 2009, 19:39 PM
Hola hace unas 2 horas se me dio la idea de hacer un programita para ocultar y mostrar el escritorio.

A algunos seguro les será bienvenido a otros no, pero es sólo para compartir experiencia.

Código (vb) [Seleccionar]
Option Explicit
Private Declare Function SetErrorMode Lib "kernel32" (ByVal wMode As Long) As Long
Private Declare Sub InitCommonControls Lib "Comctl32" ()
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
   ByVal hWnd1 As Long, _
   ByVal hWnd2 As Long, _
   ByVal lpsz1 As String, _
   ByVal lpsz2 As String) As Long
Private Declare Function ShowWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal nCmdShow As Long) As Long
Private Const SW_SHOW = 5
Private Const SW_HIDE = 0
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_RBUTTONUP = &H205
Private Const KEY_TOGGLED As Integer = &H1
Private Const KEY_PRESSED As Integer = &H1000
Private Type NOTIFYICONDATA
   cbSize As Long
   hwnd As Long
   uId As Long
   uFlags As Long
   ucallbackMessage As Long
   hIcon As Long
   szTip As String * 64
End Type
Dim sysTray As NOTIFYICONDATA

Private Sub Command1_Click()
   MsgBox " Hacer Doble click en el ícono para reestaurar el Form", vbInformation, "SH_DEKTOP"
   Call Colocar_Tray(1000)
End Sub

Private Sub Command2_Click()
   Call Quitar_Systray
End Sub
Sub Colocar_Tray(Intervalo As Integer)
    With sysTray
       .cbSize = Len(sysTray)
       .hwnd = Me.hwnd
       .uId = 1&
        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
       .ucallbackMessage = WM_LBUTTONDOWN
       .hIcon = Image1.Picture
   End With
   
   Call Shell_NotifyIcon(NIM_ADD, sysTray)
   
   Me.Hide
   Timer1.Interval = Intervalo
End Sub
Sub Quitar_Systray()
   With sysTray
       .cbSize = Len(sysTray)
       .hwnd = Me.hwnd
       .uId = 1&
   End With
   Call Shell_NotifyIcon(NIM_DELETE, sysTray)
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Form_Initialize()
   Call SetErrorMode(2)
   Call InitCommonControls
   Me.Caption = "SH_DEKTOP"
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Dim msg
   msg = X / Screen.TwipsPerPixelX
   If msg = WM_LBUTTONDBLCLK Then
       mnuMostrar_Click
   ElseIf msg = WM_RBUTTONUP Then
       Me.PopupMenu mnuPopup
   End If
End Sub

Private Sub mnuMostrar_Click()
   Timer1.Interval = 0
   Me.Show
End Sub

Private Sub mnuSalir_Click()
   Unload Me
End Sub
Private Sub Timer1_Timer()
   sysTray.hIcon = Image1.Picture
   Call Shell_NotifyIcon(NIM_MODIFY, sysTray)
End Sub
Private Sub Form_Load()
   Image1.Visible = False
   Command1.Caption = " Colocar en el systray "
   Command2.Caption = " Quitar del sysTray "
   Command3.Caption = "Salir"
   Timer2.Enabled = True
   Timer2.Interval = 100
End Sub

Private Sub Form_Unload(Cancel As Integer)
   Quitar_Systray
   End
End Sub

Private Sub Timer2_Timer()
If GetKeyState(vbKeyF10) And KEY_PRESSED Then
   Dim HWND_Escritorio As Long
   On Error Resume Next
   HWND_Escritorio = FindWindowEx(0&, 0&, "Progman", vbNullString)
   Call ShowWindow(HWND_Escritorio, SW_HIDE)
ElseIf GetKeyState(vbKeyF11) And KEY_PRESSED Then
   On Error Resume Next
   HWND_Escritorio = FindWindowEx(0&, 0&, "Progman", vbNullString)
   Call ShowWindow(HWND_Escritorio, SW_SHOW)
End If
End Sub



#37
Variables Simples.

Problema 1: Diseñe un diagrama para resolver una ecucación cuadrática.

Problema 2: N! se define como n!=1*2*3*4...*(n-1)*n, diseñe un algoritmo que calcule n! con n>=0.

Problema 3:Dada una lista de N números, desarrollar un algoritmo que permita determinar el más grande.

Problema 4: Diseñe un programa para encontrar el segundo número más grande de N números distintos.

Problema 5: Diseñe un programa que permita descomponer un número N en sus dígitos individualmente.


Problema 6: Dado un número real mostrar la cantidad de dígitos de la parte entera y luego la cantidad que posee la parte decimal.

Problema 7: Dado un número NUM que se encuentra en base B con 1<B<10, mostrar todos los enteros entre 0 y NUM en base B.

Ejemplo: NUM=10 B=2 Mostrar: 0 1 10
             NUM=22 B=3 Mostrar: 0 1 2 10 11 12 20 21 22

Problema 8: Desarrollar un algoritmo para generar los primeros K primeros números primos de la serie Fibonacci.

Ejemplo:

K=6
1 2 3 5 13 89

Problema 9: Diseñar un diagrama que dado un número lo descomponga en sus factores primos, informando la cantidad de veces que dicho factor primo integra el número.


La idea es ir resolviendo los problemas de a poco en distintos lenguajes.

Se permitirán diagramas y pseudocódigo.





#38
Como hago para que no aparezca esto?:

#39
Ejercicios / Ejercicios con arrays
5 Junio 2009, 00:38 AM
Ejercicio: Se posee un mazo de cartas españolas sin comodines, de dicho mazo sacar 1 carta a la vez, hasta obtener 3 números iguales sin importar el palo, indicar la secuencia de cartas obtenidas y la cantidad de cartas ingresadas sobre el proceso.

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int mi_mazo[100],secuencia[100];

int main()
{
bool e=0;
int i=0;
int j,k,AUX,n;
while(!e)
{
i++;
cout<<"Ingrese carta: "<<endl;
cin>>mi_mazo[i];
secuencia[i]=mi_mazo[i];
n=i;
for(j=2;j<=n;j++)
{
AUX=mi_mazo[j];
mi_mazo[0]=AUX;
k=j-1;
while(AUX<mi_mazo[k])
{
mi_mazo[k+1]=mi_mazo[k];
k--;
}
mi_mazo[k+1]=AUX;
}
for(j=1;j<=n;j++)
{
if((mi_mazo[j]==mi_mazo[j+1])&&(mi_mazo[j]==mi_mazo[j+2]))
{
e=1;
}
}
}
cout<<"Cantidad de cartas"<<endl;
cout<<"Secuencia"<<endl;
for(i=1;i<=n;i++)
{
   cout<<secuencia[i]<<",";
}
system("PAUSE");
return 1;
}



#40
Aver si por aqui me pueden ayudar:

El enunciado consiste en borra los numeros de una lista que posean mayor cantidad de digitos pares que impares.

El problema que tengo es el siguiente:

N=4
array={1,2,3,4}
array con eliminaciones={1,3}


N=10
array={1,2,3,4,5,6,7,8,9,10}
array con eliminaciones={1,3,4,6,7,9}
cuando tendria que ser:
array con eliminaciones={1,3,5,7,9,10}

Y otro error:
array={2,2,5}
array con eliminaciones={2,5}
Es decir cuando existen posiciones iniciales consecutivas, no asi en

array={5,2,2}
array con eliminaciones={5}


Código (vb) [Seleccionar]
Private Sub Form_Load()
cnt_p = 0
cnt_i = 0
Dim lista(100) As Integer
Dim elim(100) As Integer
Label1.Caption = "" 'Array
Label2.Caption = "" 'Array con eliminaciones
Label3.Caption = "" 'Posiciones a eliminar
MsgBox "Inicializacion", vbOKOnly
k = 0
cant = InputBox("Cantidad: ")
N = Val(cant)
For i = 1 To N
   entero = InputBox("Numero: ")
   num = Val(entero)
   lista(i) = num
Next
For i = 1 To N
   Label1.Caption = Label1.Caption & lista(i) & ","
Next
For i = 1 To N
   d_num = lista(i) 'Separo los digitos
   While d_num <> 0
       dig = d_num Mod 10
       If dig Mod 2 = 0 Then 'Compruebo si son multiplos pares
           cnt_p = cnt_p + 1
       End If
       If dig Mod 2 <> 0 Then
           cnt_i = cnt_i + 1
       End If
       d_num = d_num \ 10
   Wend
   If cnt_p > cnt_i Then 'Si la cantidad de digitos pares es mayor a las impares
       k = k + 1
       elim(k) = i 'Array que contiene las posiciones
   End If
   cnt_p = 0
   cnt_i = 0
   
Next
For i = 1 To k
   Label3.Caption = Label3.Caption & elim(i) & ","
Next
For i = 1 To k
   pos = elim(i)
   For j = pos To (N - 1)
       lista(j) = lista(j + 1)
   Next
   N = N - 1
Next
For i = 1 To N
   Label2.Caption = Label2.Caption & lista(i) & ","
Next
End Sub