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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: [1] 2
1  Informática / Hardware / Re: Elección placa de video en: 11 Julio 2011, 21:09 pm
Mira tanto ATI como Nvidia son buenas placas es como tener
AMD, Intel
yo tengo una ATI HD y andan muy bien puedo coreer el Modern warfare 2 con los graficos a ful y ni se esfuerza :)
Lo sé pero tengo que elegir entre esas dos placas, ya que como mencioné, debo trabajar con tecnología cuda
2  Informática / Hardware / Re: Elección placa de video en: 11 Julio 2011, 19:32 pm
Lo que sucede es que necesito trabajar con tecnología cuda...
3  Informática / Hardware / Elección placa de video en: 11 Julio 2011, 18:50 pm
Que tal, que tarjeta recomendarían comprar entre estas dos?

ZOTAC GeForce GTX 465
EVGA GeForce GTX 460 SE

4  Programación / Programación C/C++ / Re: [C] Split en: 19 Febrero 2011, 15:55 pm
Bien el problema radicaba en que estaba haciendo un realloc() en i+1, y luego de haber reservado la memoria, yo estaba haciendo un postincremento, con el cual asignaba a la lista una cadena en memoria que no estaba reservada... Basta cambiar el postincremento... Era cuestión de lógica  :rolleyes:
5  Programación / Programación C/C++ / Re: [?][c++]cout << fu1(5); se cierra el programa en: 19 Febrero 2011, 13:55 pm
No entiendo esta pregunta:


Citar
sabiendo que &m es la direccion de memoria de m , como se hace para la funcion?


¿Quieres saber como devolver la dirección de x con "funcion"? o ¿quieres saber la dirección de la funcion?
6  Programación / Programación C/C++ / Re: [?][c++]cout << fu1(5); se cierra el programa en: 19 Febrero 2011, 13:40 pm
Hola xafirot, compilado con g++ funciona sin problemas sólo dando el warning al retorno de la dirección...


Código
  1. #include <iostream>
  2.  
  3. char *foo( void );
  4. int foo2( void );
  5. int *dir( void );
  6.  
  7. int main()
  8. {
  9. std::cout << "foo:";
  10. std::cout << foo() << std::endl;
  11. std::cout << "foo2:";
  12. std::cout << foo2() << std::endl;
  13. std::cout << "dir:";
  14. std::cout << dir() << std::endl;
  15. }
  16.  
  17. char *foo( void )
  18. {
  19. return "HOLA MUNDO";
  20. }
  21.  
  22. int foo2( void )
  23. {
  24. return 0;
  25. }
  26.  
  27. int *dir( void )
  28. {
  29. int x = 10;
  30. std::cout << "LA DIRECCION DE x es:" << &x << std::endl;
  31. return &x;
  32. }
Código:
facu@linux:~/Escritorio$ ./a.out 
foo:HOLA MUNDO
foo2:0
dir:LA DIRECCION DE x es:0xbfe2587c
0xbfe2587c
7  Programación / Programación C/C++ / Re: [C] Split en: 19 Febrero 2011, 05:33 am
EDITADO: Gracias por la página!
Justamente, estaba tratando de hacer y luego de leer un poco sobre punteros a punteros en c, y reservación de memoria llegué al siguiente código, pero tengo un problema:


Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. char **split ( const char *s1, const char *s2) {
  6.  
  7.    char **lista;
  8.    char *aux = s1;
  9.    char *token_Ptr;
  10.    int i = 0;
  11.  
  12.    lista = (char **) malloc (sizeof (char *));
  13.    token_Ptr = strtok(aux, s2);
  14.    lista[i] = token_Ptr;
  15.    while(token_Ptr != NULL)
  16.    {
  17.        lista = (char **)realloc(lista, sizeof(char*) * (i + 1));
  18.        token_Ptr = strtok(NULL, s2);
  19.        i++;
  20.        lista[i] = token_Ptr;
  21.    }
  22.    return lista;
  23. }
  24.  
  25. int main ( int argc , char *argv[]) {
  26.  
  27.    char **MILISTA;
  28.    int i;
  29.  
  30.    if (argc==2) {
  31.        printf ("Cadena: '%s'\n",argv[1]);
  32.        MILISTA= split(argv[1]," ");
  33.        i=0;
  34.        puts("----------------TOKENS------------");
  35.        while (MILISTA[i]!=NULL) {
  36.            printf("%s, " , MILISTA[i++]);
  37.        }
  38.        printf("\n");
  39.        puts("----------------FIN---------------");
  40.    }
  41.    return 0;
  42. }

Código:
facu@linux:~/projects/spliting/bin/Debug$ ./spliting "HOLA MUNDO COMO s"
Cadena: 'HOLA MUNDO COMO s'
*** glibc detected *** ./spliting: realloc(): invalid next size: 0x09e12008 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x17c501]
/lib/libc.so.6(+0x71c6d)[0x181c6d]
/lib/libc.so.6(realloc+0xe3)[0x181f53]
./spliting[0x8048573]
./spliting[0x80485fa]
/lib/libc.so.6(__libc_start_main+0xe7)[0x126ce7]
./spliting[0x8048471]
======= Memory map: ========
00110000-00267000 r-xp 00000000 08:06 8526       /lib/libc-2.12.1.so
00267000-00269000 r--p 00157000 08:06 8526       /lib/libc-2.12.1.so
00269000-0026a000 rw-p 00159000 08:06 8526       /lib/libc-2.12.1.so
0026a000-0026d000 rw-p 00000000 00:00 0
00573000-0058d000 r-xp 00000000 08:06 251        /lib/libgcc_s.so.1
0058d000-0058e000 r--p 00019000 08:06 251        /lib/libgcc_s.so.1
0058e000-0058f000 rw-p 0001a000 08:06 251        /lib/libgcc_s.so.1
0065a000-0065b000 r-xp 00000000 00:00 0          [vdso]
007f1000-00815000 r-xp 00000000 08:06 8577       /lib/libm-2.12.1.so
00815000-00816000 r--p 00023000 08:06 8577       /lib/libm-2.12.1.so
00816000-00817000 rw-p 00024000 08:06 8577       /lib/libm-2.12.1.so
00c2d000-00d0c000 r-xp 00000000 08:06 660319     /usr/lib/libstdc++.so.6.0.14
00d0c000-00d10000 r--p 000de000 08:06 660319     /usr/lib/libstdc++.so.6.0.14
00d10000-00d11000 rw-p 000e2000 08:06 660319     /usr/lib/libstdc++.so.6.0.14
00d11000-00d18000 rw-p 00000000 00:00 0
00e86000-00ea2000 r-xp 00000000 08:06 8518       /lib/ld-2.12.1.so
00ea2000-00ea3000 r--p 0001b000 08:06 8518       /lib/ld-2.12.1.so
00ea3000-00ea4000 rw-p 0001c000 08:06 8518       /lib/ld-2.12.1.so
08048000-08049000 r-xp 00000000 08:08 262453     /home/facu/projects/spliting/bin/Debug/spliting
08049000-0804a000 r--p 00000000 08:08 262453     /home/facu/projects/spliting/bin/Debug/spliting
0804a000-0804b000 rw-p 00001000 08:08 262453     /home/facu/projects/spliting/bin/Debug/spliting
09e12000-09e33000 rw-p 00000000 00:00 0          [heap]
b7700000-b7721000 rw-p 00000000 00:00 0
b7721000-b7800000 ---p 00000000 00:00 0
b7870000-b7873000 rw-p 00000000 00:00 0
b7888000-b788b000 rw-p 00000000 00:00 0
bf834000-bf855000 rw-p 00000000 00:00 0          [stack]
Abortado

 :huh:
8  Programación / Programación C/C++ / [C] Split en: 18 Febrero 2011, 20:35 pm
Que tal, hace un tiempo trato de buscar una función split como la gente y no la encuentro... Y tampoco se me ocurre la forma de hacerla...

La elaboración de la función no es muy complicada, solo basta almacenar los tokens devueltos por strtok() o strsep() en un array... Y luego devolverlos, la cabecera de la función sería algo así:

Código
  1. char **split( const char *s1, const char *s2 );

Supongamos que en el main tenemos declarado:

Código
  1. char **tokens;

La asignación sería:

Código
  1. tokens = split( cadena, delimitador );

Pero previamente se debería haber reservado espacio para los tokens, y he aquí el problema, ya que ¿cómo sabremos la cantidad de tokens? ¿y el tamaño de cada una de ellos?... Podríamos reservar un espacio constante, pero podríamos desperdiciar memoria, o caer en un "segmentation fault" si faltase... ¿Cómo hacen otros lenguajes para hacer eficiente esta función?
9  Programación / Programación C/C++ / [C] Contar subcadena en una cadena en: 18 Febrero 2011, 19:18 pm
Qué les parece este ejercicio que me tocó hacer? Tienen alguna mejora?


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /** Algoritmo que cuenta la cantidad de cadenas
  6. dentro de otra cadena **/
  7.  
  8. typedef unsigned int ui;
  9. ui cuenta_str(const char *, const char *);
  10.  
  11. int main()
  12. {
  13.    char *cadena = "¿MUNDO? MUNDO, SOY EL DIOS DEL MUNDO, MUNDO DOMINARE";
  14.    char *subcad = "MUNDO";
  15.    ui cuenta = cuenta_str(cadena, subcad);
  16.    printf("La cantidad de veces que %s se repite en %s es: %d", subcad, cadena, cuenta);
  17.    return 0;
  18. }
  19.  
  20. ui cuenta_str(const char *s1, const char *s2)
  21. {
  22.    const char *delim = " ,.!¡¿?/-";
  23.    char *aux = malloc(sizeof(char) * strlen(s1) + 1);
  24.    char *token_Ptr;
  25.    ui cnt = 0;
  26.    if(s1 == NULL)
  27.        return 0;
  28.    strcpy(aux, s1);
  29.    token_Ptr = strtok(aux, delim);
  30.    while(token_Ptr != NULL)
  31.    {
  32.        if(strcmp(token_Ptr, s2) == 0)
  33.            cnt++;
  34.        token_Ptr = strtok(NULL, delim);
  35.    }
  36.    return cnt;
  37. }

Debería liberar la memoria de aux cierto?

EDITADO: Debería también contar MUNDO en la cadena "MUNDOROLA"? creen que sea necesario? Digamos que asumí que cadena = palabra :P
10  Programación / Programación C/C++ / Re: Problema para pasar una lista a fichero con Fwrite en: 18 Febrero 2011, 16:06 pm
Tal vez te sirva esto   ;)


Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct _nodo {
  5.   int dni;
  6.   int fecha;
  7.   struct _nodo *siguiente;
  8. } tipoNodo;
  9.  
  10. typedef tipoNodo *pNodo;
  11. typedef tipoNodo *Lista;
  12.  
  13. /* Funciones con listas: */
  14. void Insertar(Lista *l, int d, int f);
  15. void Borrar(Lista *l, int d);
  16.  
  17. int ListaVacia(Lista l);
  18.  
  19. void BorrarLista(Lista *);
  20. void MostrarLista(Lista l);
  21.  
  22. void list_fic(Lista L);
  23. void leer_fic();
  24.  
  25. int main()
  26. {
  27.   Lista lista = NULL;
  28.   pNodo p;
  29.  
  30.   Insertar(&lista, 1111, 11 );
  31.   Insertar(&lista, 2222, 22);
  32.  
  33.  
  34.   MostrarLista(lista);
  35.   list_fic(lista);
  36.   leer_fic();
  37.   return 0;
  38. }
  39.  
  40. void Insertar(Lista *lista, int d, int f)
  41. {
  42.   pNodo nuevo, anterior;
  43.  
  44.   /* Crear un nodo nuevo */
  45.   nuevo = (pNodo)malloc(sizeof(tipoNodo));
  46.   nuevo->dni = d;
  47.   nuevo->fecha = f;
  48.  
  49.   /* Si la lista está vacía */
  50.   if(ListaVacia(*lista) || (*lista)->dni > d) {
  51.      /* Añadimos la lista a continuación del nuevo nodo */
  52.      nuevo->siguiente = *lista;
  53.      /* Ahora, el comienzo de nuestra lista es en nuevo nodo */
  54.      *lista = nuevo;
  55.   }
  56.   else {
  57.      /* Buscar el nodo de valor menor a v */
  58.      anterior = *lista;
  59.      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
  60.          un valor mayor que v */
  61.      while(anterior->siguiente && anterior->siguiente->dni <= d)
  62.         anterior = anterior->siguiente;
  63.      /* Insertamos el nuevo nodo después del nodo anterior */
  64.      nuevo->siguiente = anterior->siguiente;
  65.      anterior->siguiente = nuevo;
  66.   }
  67. }
  68.  
  69. void Borrar(Lista *lista, int d)
  70. {
  71.   pNodo anterior, nodo;
  72.  
  73.   nodo = *lista;
  74.   anterior = NULL;
  75.   while(nodo && nodo->dni < d ) {
  76.      anterior = nodo;
  77.      nodo = nodo->siguiente;
  78.   }
  79.   if(!nodo || nodo->dni != d) return;
  80.   else { /* Borrar el nodo */
  81.      if(!anterior) /* Primer elemento */
  82.         *lista = nodo->siguiente;
  83.      else  /* un elemento cualquiera */
  84.         anterior->siguiente = nodo->siguiente;
  85.      free(nodo);
  86.   }
  87. }
  88.  
  89. int ListaVacia(Lista lista)
  90. {
  91.   return (lista == NULL);
  92. }
  93.  
  94. void BorrarLista(Lista *lista)
  95. {
  96.   pNodo nodo;
  97.  
  98.   while(*lista) {
  99.      nodo = *lista;
  100.      *lista = nodo->siguiente;
  101.      free(nodo);
  102.   }
  103. }
  104.  
  105. void MostrarLista(Lista lista)
  106. {
  107.   pNodo nodo = lista;
  108.  
  109.   if(ListaVacia(lista)) printf("Lista vacía\n");
  110.   else {
  111.      while(nodo) {
  112.         printf("DNI-> %d -> ", nodo->dni);
  113.         printf("FECHA-> %d -> ", nodo->fecha);
  114.         nodo = nodo->siguiente;
  115.     }
  116.     printf("\n");
  117.   }
  118. }
  119.  
  120. void list_fic(Lista L)
  121. {
  122. FILE *fp;
  123. tipoNodo *aux;
  124.  
  125. int b = 0;
  126. fp = fopen("pacientes.txt","wb");
  127. aux = L;
  128.  
  129. while(aux != NULL)
  130. {
  131.  b = fwrite(&aux,sizeof(tipoNodo),1,fp);
  132.  aux = aux->siguiente;
  133. }
  134.  
  135. fclose (fp);
  136. }
  137.  
  138. void leer_fic(){
  139. FILE *fp;
  140. tipoNodo *aux;
  141.  
  142. fp = fopen("pacientes.txt","r+b");
  143.  
  144. fread(&aux,sizeof(tipoNodo),1,fp);
  145.  
  146. fclose (fp);
  147. puts("LECTURA!");
  148. printf("DNI:%d\n",aux->dni);
  149. printf("FECHA:%d\n",aux->fecha);
  150. puts("FIN DE LECTURA");
  151. }

Código:
./listas
DNI-> 1111 -> FECHA-> 11 -> DNI-> 2222 -> FECHA-> 22 ->
LECTURA!
DNI:1111
FECHA:11
FIN DE LECTURA
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines