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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
281  Foros Generales / Dudas Generales / (Duda matemática) Cuestión sobre los números primos en: 6 Mayo 2016, 02:50 am
Hola, muy buenas. Tengo una duda que se podría catalogar como matemática más que duda de programación.

El caso es que la manera que he visto más eficiente para saber si un número es primo en C es la siguiente:
(Código corregido)
Código
  1. unsigned int is_prime = 1, numero_a_comprobar = 2453564567U;
  2.  
  3. for(j = 2; is_prime == 1 && j*j <= numero_a_comprobar; j++)
  4.    is_prime = numero_a_comprobar%j != 0;
  5.  
  6. // Ahora 'is_prime' almacena si 'numero_a_comprobar' es primo

Mi duda es: ¿Por qué solo comprobamos los posibles divisores del número a comprobar con la condición 'j*j <= numero_a_comprobar'? Seguro que tiene una respuesta matemática, pero no la se...

Muchas gracias
282  Programación / Programación C/C++ / Re: [Ayuda] Reemplazar String en un archivo en: 5 Mayo 2016, 22:19 pm
Ahora que me doy cuenta, mi función estaba hecha una pena XDD.

Versión mejorada:
Código
  1. void insertar(FILE * archivo, unsigned int pos, const char *nueva_cadena, unsigned int longitud_cadena) {
  2.    char *buffer = malloc(longitud_cadena);
  3.  
  4.    while(feof(archivo) != 0) {
  5.        fseek(archivo, pos, SEEK_CUR); // Nos movemos por el archivo hasta la posición 'pos'
  6.        fread((void *)buffer, sizeof(char), longitud_cadena, archivo);
  7.        clearerr(archivo); // Por si hemos llegado al final del archivo...
  8.        fseek(archivo, pos, SEEK_CUR);
  9.        fwrite((const void *)nueva_cadena, sizeof(char), longitud_cadena, archivo);
  10.        pos += longitud_cadena;
  11.    }
  12.  
  13.    free(buffer);
  14. }
283  Programación / Programación C/C++ / Re: [Ayuda] Reemplazar String en un archivo en: 5 Mayo 2016, 21:12 pm
Aunque ya se solucionó pongo otra alternativa: Mapear el archivo en la memoria.

saludos.

Eso ya se había propuesto, pero pensamos que si el archivo es demasiado grande, había que buscar otra solución
284  Programación / Programación C/C++ / Re: Ayuda en trabajo de Arreglos/Matrices en: 5 Mayo 2016, 20:50 pm
Es sencillo. Puedes ver el patrón restando la posición del carácter que estás escribiendo menos la fila y la columna en la que esté el 0. El valor de la casilla será el mayor valor de esas dos restas. Por supuesto, tendrás que hacer el valor absoluto si no quieres números negativos
285  Programación / Programación C/C++ / Re: C vs C++ [Civil War] en: 5 Mayo 2016, 00:05 am
Lo que más me gusta de C++, con diferencia, es la sobrecarga y el paso por referencia... Cuando digo sobrecarga, digo tanto sobrecarga de operadores como de funciones
286  Programación / Programación C/C++ / Re: [Ayuda] Reemplazar String en un archivo en: 4 Mayo 2016, 20:23 pm
Es cierto. Se me olvidó mencionarlo. La basura se crearía cuando hay saltos de línea en archivos de texto, pues Windows usa salto de carro y salto de línea, mientras que otros sistemas operativos usan solo el salto de línea
287  Programación / Programación C/C++ / Re: [Ayuda] Reemplazar String en un archivo en: 4 Mayo 2016, 19:49 pm
Yo tampoco sé mucho sobre C, también estoy aprendiendo xD.

Creo que una forma fácil de implementar este algoritmo sería:
Código
  1. void insertar(FILE * archivo, unsigned int pos, const char *nueva_cadena, unsigned int longitud_cadena) {
  2.    char *buffer = malloc(longitud_cadena);
  3.  
  4.    fseek(archivo, pos, SEEK_CUR); // Nos movemos por el archivo hasta la posición 'pos'
  5.    fread((void *)buffer, sizeof(char), longitud_cadena, archivo);
  6.    clearerr(archivo); // Por si hemos llegado al final del archivo...
  7.    fseek(archivo, pos, SEEK_CUR);
  8.    fwrite((const void *)nueva_cadena, sizeof(char), longitud_cadena, archivo);
  9.  
  10.    if(feof(archivo) != 0)
  11.        insertar(archivo, pos+longitud_cadena, buffer, longitud_cadena);
  12.  
  13.    free(buffer);
  14. }

¡OJO! El código no lo he probado. Si alguien ve algun error (lo cual es muy posible), por favor, avise
288  Programación / Programación C/C++ / Re: [Ayuda] Reemplazar String en un archivo en: 4 Mayo 2016, 18:33 pm
Como mucho, si solo vas a reemplazar una linea de un archivo muy grande, creo que lo más eficiente sería leer el archivo desde la posición que quieres reemplazar, guardarlo todo en un búfer, sobreescribir desde la posición a reemplazar, y volver a escribir todo el búfer con fwrite... No se me ocurre nada más D:



Creo que si el archivo es demasiado grande para la RAM, se podría hacer esto:
* Obtenemos la cadena del archivo desde la posición que quieras con longitud de la nueva cadena con, por ejemplo, fread.
* Reemplazamos desde la posición deseada con la cadena con, por ejemplo, fwrite.
* Obtenemos la siguiente cadena desde la posición original con un desplazamiento (offset) de la longitud de la cadena que has reemplazado antes. Es fácil pues la función seek permite poner desplazamientos.
* Reemplazamos la cadena que acabamos de leer con la cadena que obtuvimos antes del archivo con, por ejemplo, fread
* Hacemos esto hasta que hayamos llegado al final del archivo
289  Programación / Programación C/C++ / Re: C vs C++ [Civil War] en: 4 Mayo 2016, 16:36 pm
Eso me pasa por las prisas xD En cualquier caso, es muy sencillo usar sprintf para concatenar cadenas
290  Programación / Programación C/C++ / Re: C vs C++ [Civil War] en: 4 Mayo 2016, 15:27 pm
Para concatenar cadenas, ¿no puedes usar sscanf?
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines