elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 ... 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 [95] 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 ... 122
941  Programación / Programación C/C++ / Re: Leer header de bmp en: 25 Noviembre 2010, 01:21 am
¡Buenas!

Aqui tienes un conjunto de estructuras y funciones que hice hace un tiempo para manipular BMPs. Entre ellas las cabeceras.

Si tienes alguna duda o no entiendes algo, preguntame por pm.

¡Saludos!
942  Programación / Programación C/C++ / Re: Programacion en C. Fallo codificar numeros primos en: 24 Noviembre 2010, 22:52 pm
¡Buenas!

En este caso si que infuye una cuenta mas que una menos. Una algoritmo es de orden O(n) y el otro de orden O(n1/2. Si tienes que s(n/k) = n/(kn1/2) y haces limite de s(n) en +infinito, te dara +infinito. Esto quiere decir que n crece mucho mas que n1/2, para numeros grandes, lo que significa que hacer comparaciones hasta la raiz cuadrada es mas eficiente que hacerlo hasta el mismo numero o hasta su mitad.

¡Saludos¡
943  Programación / Programación C/C++ / Re: Programacion en C. Fallo codificar numeros primos en: 24 Noviembre 2010, 00:28 am
¡Buenas!

Realmente llegar hasta n/2 es perder el tiempo. El mayor de los divisores mas pequeños es la raiz cuadrada, ya que si un divisor sobrepasa la raiz cuadrada es porque el otro factor es menor que la raiz cuadrada:

Si a * b = c y a2 > c entonces b2 < c, ya que de lo contrario a2 * b2) > c * c = c2 y esto impllica, tomando raices, que a * b > c, lo cual es una contradiccion. Por lo tanto b2 < c lo que es lo mismo que b < c1/2

¡Saludos!
944  Programación / Programación C/C++ / Re: ¿Por que razones no se asigna memoria? en: 24 Noviembre 2010, 00:21 am
¡Hey Eternal!

Muchas gracias por la informacion. Descargue el programa, ahora tengo que ojearlo (aun no lo he instalado...  :silbar:).

Al final reescribi todo el codigo que manejaba la memoria y localice la funcion que daba problemas. Se trataba de un realloc. No se porque al almacenar la dimension final en una variable auxiliar (para aligerar un poco el codigo), la asignacion fallaba. Lo que hice fue eliminar la variable auxiliar y asignar la memoria a partir de la expresion que calculaba la dimension final. El error desaparecio, y ya puedo asignar "toda la memoria que quiera". Lo que nunca llegare a saber, es porque siendo las dos formas equivalente, la una funcionaba y la otra no... (misterios de la vida...)

¡Un saludo y muchas gracias de nuevo!
945  Foros Generales / Foro Libre / Re: We don't speak americano (Drunk Version) en: 23 Noviembre 2010, 04:34 am
El video tiene su gracia, pero...

Prfff...

Vaya forma de destrozar un tema...

Aqui va una buena version para el disfrute de vuestros oidos.

¡Que disfruteis de los orgasmos!

PD: Esta creo que puede ser la original, pero no estoy seguro.

¡Saludos!
946  Programación / Programación C/C++ / Re: Backtracking - Laberinto en: 23 Noviembre 2010, 03:08 am
¡Buenas!

¿Dijkstra?

No conocia el metodo. Todos los dias se aprende algo. Ahora lo miro. Cuando aprendi lo que era el backtracking, el primer ejemplo de aplicacion que me pusieron fue un laberinto...

¡Saludos!
947  Programación / Programación C/C++ / Re: Problema con Malloc y cadenas de tamaño variable. en: 23 Noviembre 2010, 01:58 am
¡Buenas!

Tambien puedes asignar la memoria seguna vayas leyendo caracteres:

Código
  1. int main(int argc, char *argv[])
  2. {
  3.    char *cadenas[N_CADENAS],lector;
  4.    int i,ncaracteres;
  5.  
  6.    for(i = 0 ; i < N_CADENAS ; i++)
  7.    {
  8.        cadenas[i] = NULL;
  9.        ncaracteres = 0;
  10.  
  11.        while((lector = getchar() != '\n')
  12.        {
  13.            cadenas[i] = (char*) realloc(cadenas[i] , (ncaracteres + 2) sizeof(char));
  14.  
  15.            cadenas[ncaracteres] = lector;
  16.            cadenas[ncaracteres + 1] = '\0';
  17.  
  18.            ncaracteres++;
  19.        }
  20.    }
  21. }
  22.  

Eso si, este codigo puede dar errores si no se consigue asignar la memoria, corrige eso y listo.

¡Saludos!

PD: Es codigo lo he puesto mientras lo pensaba, asi que puede tener errores. Si los hay, no creo que sean dificiles de detectar y corregir.
948  Programación / Programación C/C++ / ¿Por que razones no se asigna memoria? en: 22 Noviembre 2010, 07:08 am
¡Buenas!

Estoy trabajando con memoria dinamica bajo Windows 7 con 4 GB de RAM. Para saber si las distintas funciones encargadas de manejarla realizan bien su trabajo estoy utilizando mensajes en forma de unsigned long. Si trabajo con fragmentos pequeños de memoria, la insercion de informacion en un punto de la memoria, el reemplazo de un fragmento por otro o la extension de un fragmento con otro funcionan bien.

El problema esta al pasar de 112 bytes. En ese momento toda operacion que conlleve el aumento de la memoria me devuelve el mensaje de que la asignacion no ha podido ser posible.

Anteriormente habia realizado un trabajo parecido bajo Windows 98 y XP y nunca me habia encontrado con este problema. Aunque tambien es verdad que he cambiado el enfoque del codigo. Ahora en lugar de que cada funcion actue sobre la memoria directamente he creado un conjunto de funciones que realizan acciones sobre la memoria y el resto de funciones utilizan estas ultimas.

¿Porque con pequeños fragmentos de memoria no tengo problema, pero cuando pasado un limite comienzan los problemas?

Dejar codigo resultaria casi imposible, porque son unos cuantos ficheros, un par con unas 450 lineas de codigo (o algo mas), con llamadas a funciones entre ellos.

Simplemente queria saber si sabiais la razon de que suceda lo descrito.

¡Saludos!

PD: No se si sera de importancia o no. Una funcion no implica una sola asignacion de memoria. En una sola llamada a las funciones que la manipulan puede haber dos o tres sentencias relacionadas con la asignacion dinamica de memoria. Lo digo por si el hecho de que se ejecuten en tan poco periodo de tiempo puede influir... Hasta ahi no llego...

¡Saludos!
949  Programación / Programación C/C++ / Re: [C] [?] Función free() y uso posterior en: 21 Noviembre 2010, 17:58 pm
¡Buenas!

El problema esta en que a la funcion que libera los datos le pasas un puntero a Tabla. A efetos practicos, ese puntero es como si fuese una variable local, por lo tanto todos los cambios que realices sobre el puntero (no sobre el objeto al que apunta), solo afectaran a esa "variable local" y no al objeto al que apunta. Es decir, si haces que ese puntero se NULL, no haras que un puntero exterior que hubieses puesto en la lista de parametros sea NULL. Recuerda el problema del intercambio:

Código
  1.  
  2. void intercambio(int *a,int *b) //para poder modificar enteros exteriores usamos punteros
  3. {
  4.    int aux;
  5.  
  6.    aux = *a;
  7.    *a = *b;
  8.    *b = aux;
  9. }
  10.  
  11.  

Lo mismo ocurre con los punteros, si quieres modificar un puntero exterior a la funcion, deberas pasar un puntero a ese puntero, y luegoya trabajar con el, asi que suponiendo que el reto de tu codigo este bien, y que a la funcion liberar le pases un puntero, tendras que cambiar la llamada de la funcion para pasar un puntero a ese puntero y cambiar el codigo dentro de la funcion asi:

Código
  1. bool tablaLibera( Tabla **tablaA ){
  2.  if(*tablaA != NULL){
  3.    free((*tablaA)->claves);
  4.    (*tablaA)->claves=NULL;
  5.    free((*tablaA)->valores);
  6.    (*tablaA)->valores=NULL;
  7.    free((*tablaA)); //Ahora si que estas modificando un puntero exterior a la funcion
  8.    (*tablaA)=NULL;//Ahora si que estas modificando un puntero exterior a la funcion
  9.    return true;
  10.  }else{
  11.    return false;
  12.  }
  13. }
  14.  


Como ves, el funcionamiento de las dos funciones es similar. En una desreferenciamos un entero, y en la segunda desreferenciamos un puntero a un puntero a Tabla, asi en la primera modificamos un entero exterior a la funcion, y en la segunda modificamos un puntero a Tabla exterior a la funcion.

¡Saludos!
950  Foros Generales / Noticias / Re: Sellado el tratado internacional para limitar la libertad en Internet en: 20 Noviembre 2010, 07:08 am
¡Buenas!

Como bien diria mi amigo Obelix: "Estos yankis estan majaretas" po no decir que estan t**tos perdidos.

¡Saludos!
Páginas: 1 ... 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 [95] 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 ... 122
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines