|
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 - JoRDi-18
1
« en: Miércoles 8 de Diciembre de 2004, 21:37 »
Sí! Ya lo vi antes de que se borrara.
Bueno, ya se me ha acabado el tiempo, ahora hasta que no tenga otro rato no lo volveré a retomar, aunque está prácticamente acabado.
El único problema se encuentra en la "bisección sobre una semirrecta de enteros", que no encuentro un algoritmo bueno (y mira que he probado). He posteao el problema del algoritmo en un par de páginas de Mates, y si no le preguntaré a algún profesor de mi facultad.
Te dejo el programa hasta donde he llegado. Y en cuanto lo finalice postearé el programa completo, que seguro que no tiene desperdicio jeje. Pero tengo que ver como "dividir" el archivo en trozos más pequeños por que tal y como está se me hace ilegible algunas veces hasta a mí.
Muchas gracias!!
2
« en: Lunes 6 de Diciembre de 2004, 21:41 »
Bueno!! Esto esta ya casi visto para sentencia. Aún tiene algunos fallos. --> Si añades en una misma ejecución palabras de una misma letra NO REPETIDAS, funciona. --> Si añades en varias ejecuciones palabras de una misma letra NO REPETIDAS, funciona.
En los demás casos, pasan cosas extrañas.
A ver si alguien me ayuda a testarlo! Yo tengo dos fallos, y me gustaria que me dijeseis algunso más; especialmente tú, Cirrus, que parece que eres el único que está viendo los avances del programa.
Muchas gracias!!
3
« en: Domingo 5 de Diciembre de 2004, 17:59 »
Bueno! Espero que esta sea la última duda porque me estoy desesperando.
He hecho la traza del algoritmo de ordenación retocado y parece que funciona bastante bien, pero me ha surgido otro problema, que es prácticamente el mismo que el anterior.
Necesito abrir y cerrar el fichero DB.dat (Base de Datos) al mismo tiempo que el de índices, para actualizarlo entre inclusiónes de palabras.
He probado con los tres tipos de apertura de ficheros, y con los tres me da el mismo error. Escribo 3 o 4 palabras en una misma ejecución, y el fichero de índices se comporta bien; pero el de la base de datos no: al finalizar el programa sólo tiene la última palabra introducida.
Adjunto el código básico (sin el algoritmo de ordenación) y bastante depurado.
Graciass!
4
« en: Domingo 5 de Diciembre de 2004, 12:44 »
A esa misma conclusión llegué yo ayer a las 3 y pico de la mañana... Efectivamente era eso, no sabía que se tenía que cerrar el fichero para que se actualizara. Así que eso ya está arreglado.
Respecto a los fallos, te agradezco mucho que los dijeras, ya que hay alguno que no tenía ni idea. Pero bueno, ahora que tengo bien los índices voy a ponerme a depurarlo. Espero tenerlo para hoy, ya os contaré.
Adios!!
5
« en: Domingo 5 de Diciembre de 2004, 02:55 »
No creo que nadie te haga el trabajo sucio...
Yo tengo otra idea, de un encriptador mucho más simple. Sumale 1 al codigo ascii de cada letra:
aaa --> bbb vaca --> wbdb verde --> wfsef
Es el que utilizaba Julio César para encriptar sus mensajes, y es relativamente sencillo.
Suerte (para tu amiga) ...
6
« en: Domingo 5 de Diciembre de 2004, 02:53 »
Aquí estoy otra vez! Ya he acabado el programa, pero no funciona... Le tengo que hacer algunos retoques, y empiezo por el primero; a ver si me podéis ayudar. Se trata del fichero de índices: // Para actualizar el fichero de índices a=registro.palabra1[0]-65; fseek(findex,a*sizeof(struct index),SEEK_SET); // Busca posicion fread(&entrada, sizeof(struct index), 1, findex); // Lee índice entrada.cantidad++; // incrementa fseek(findex,a*sizeof(struct index),SEEK_SET); // Vuelve a la posición fwrite(&entrada, sizeof(struct index), 1, findex); // Actualiza el índice //
El problema es que el programa sólo sabe incrementar de 0 a 1. Si escribes dos palabras que empiecen por la misma letra, el valor máximo de 'A' en el fichero es 1. No sé por qué... He probado a cambiar el modo de apertura del fichero de índices, pero nada. Bueno, adjunto dos zips para quien les quiera echar un ojo. En el primero de ellos está el programa "básico" (sin la implementación de ordenación), y en el segundo está el programa "acabado". A ver si me podéis ayudar a solucionar el problema de los índices!! El resto del programa creo que funcionará si funciona bien el fichero de índices, o en cualquier caso, si está mal, será fácil retocarlo para que funcione. Adioss!!
7
« en: Lunes 29 de Noviembre de 2004, 23:55 »
OK, verás, el fichero en el que quiero buscar palabras estaría ya ordenado. Si pudieras indicarme algunos enlaces donde informarme acerca de esto te lo agradecería muchísimo.
Luego, respecto a la ordenación, ya me comentaron que el quicksort era quizás la mejor de las alternativas, pero no me convence mucho, ya que también me interesaría tener expresiones en el diccionario... Aunque si no hay otro remedio tendre que intentarlo a ver qué sale...
El fichero de los índices está ordenado, por supuesto. Va a serme de gran ayuda, seguro, pero aún queda buscar la forma de ordenar "bloques" de palabras (según la letra por la que empiece).
Gracias!
8
« en: Domingo 28 de Noviembre de 2004, 21:28 »
Hola:
---> Para buscar en ficheros <--- En el caso en el que me encuentro, en el que trabajo con un "fichero-diccionario", se me ha ocurrido una forma para buscar una determinada palabra cuando se solicite. Se trata de "indexar" de alguna forma el fichero. Es decir, hay un fichero auxiliar que guarda el número de palabras para cada letra del abecedario: para la letra 'A' hay x1 palabras, para la 'B' hay x2 palabras, etc. Os contaré que tal funciona. ¿Sabéis alguna otra forma de buscar una palabra (una entrada/registro) en un fichero?
---> Para ordenar ficheros <--- Aquí ya estoy más perdido... He pensado en aprovechar lo anterior para ir más rápido, pero a partir de ahí ya estoy perdido. Me interesa colocar una palabra entre otras dos (todo el mundo sabe cómo funciona un diccionario). Si alguien me pudiera decir alguna forma de hacer esto con un algoritmo no excesivamente complejo, le estaría muy agradecido!
Muchas gracias por adelantado!
9
« en: Domingo 28 de Noviembre de 2004, 21:18 »
Bueno, para los que le interesen, adjunto el código con el programa corregido y con algunas mejoras más...
Ahora sólo falta implementar la ordenación de las palabras, o sea, casi nada...
Un saludo!
10
« en: Domingo 28 de Noviembre de 2004, 17:13 »
Hola: Esta vez se trata de: 1. Actualizar un fichero binario de datos ya existente. En principio, se actualizaría añadiendo los nuevos registros al final. Pero en posteriores mejoras, se reordenarían los registros del fichero (si fuera necesario), y se añadirían nuevos. 2. Una vez hemos terminado de trabajar con el fichero, no lo cerramos; ya que tenemos que pasar los datos binarios a un fichero de texto. Por tanto, vamos leyendo uno a uno los registros, y los "traducimos". La primera acción con fread sobre el fichero inicial (que ha sido abierto con "r+b", y la segunda con fprintf sobre un nuevo fichero que abrimos (con "w", ya que este fichero se tiene que crear y destruir en cada ejecución del programa; para actualizarlo, destruimos el viejo y creamos uno nuevo). Pues, hay algo que falla... Supongo que la forma en la que abro los ficheros. Adjunto el código en la siguiente dirección: http://www.rafb.net/paste/results/uHkqD358.htmlHa sido modificado en las líneas: 16, 51 y 122 en adelante. Se ha añadido una nueva función, FichTXT, que será la encargada de crear un fichero de texto legible a partir de la base de datos (*.dat) en binario. Se ha definido en la linea 16, se ha llamado en la línea 51, y se ha construido a partir de la línea 122. Se me ha ocurrido que podría abrir el fichero inicial de una manera, cerrarlo, y después abrirlo de otra forma (solo lectura), pero quería consultaros antes para ver en qué estoy fallando y si puedo evitar lo que he dicho. Muchas gracias! P.D.: Adjunto también el archivo del código.
11
« en: Domingo 28 de Noviembre de 2004, 16:53 »
Sí!! Era eso lo que fallaba.
Ahora tengo otro problema, también relacionado con los ficheros, pero de otro modo. Lo posteo en un nuevo tema.
Muchas gracias!
12
« en: Domingo 28 de Noviembre de 2004, 02:21 »
Hola! Veréis, pretendo abrir un fichero desde el main (porque me interesa tenerlo abierto durante todo el programa) y cerrarlo también desde el main. Para trabajar con el fichero, en teoría debería pasar el puntero del archivo a las funciones que lo vayan a trabajar. Pero no resulta, me da un error del tipo cannot. El código del programa está en la siguiente dirección: http://www.rafb.net/paste/results/44EHHH22.htmlSi alguien pudiera darme alguna pista... Muchas gracias por adelantado!! Un saludo, Jorge.
13
« en: Sábado 3 de Julio de 2004, 18:14 »
Hola:
Tengo WinXP, y VC++ bajado del eMule. Al instalarlo, me dice "Error launching ... acmboot.exe".
Ejecuto acmboot.exe que está en la misma carpeta, y me sale un mensaje de error: "El parámetro no es correcto".
¿Alguien se le ocurre qué pasa?
Gracias!
14
« en: Viernes 2 de Julio de 2004, 00:50 »
Hola:
Supongamos que el usuario introduce una respuesta una pregunta:
- ¿ Te sientes gorda ? - Sí, me siento bastante gorda.
El propósito es, buscar en la cadena de la respuesta la palabra (Sí, sí, si, Si, SI, sI, sÍ), para, dependiendo de si se encuentra o no, hacer una cosa u otra.
Lo único que sé es que se debería utilizar la función strstr de la librería string.h. Supongo que tendré que hace además una función yo mismo, ya que no creo que esté en ninguna librería de C.
Os pido algunos consejos, y cómo puedo tratar el carácter í, ya que en eso estoy un poco perdido.
Tembién quería saber si hay alguna instrucción del preprocesador para sustituír el símbolo raro de la ñ que te aparece al ejecutar el programa, y colocar el verdadero símbolo de la ñ.
Muchas gracias.
15
« en: Miércoles 21 de Abril de 2004, 20:31 »
Vale, se trata de un bucle infinito, en el while que está encima de "Prueba 3". Si ponéis un system("pause"); justo antes de Prueba 3 lo veréis mucho mejor.
El problema parece que se resuelve correctamente, pues lo he seguido un poco con el Debugger; pero no logra salir del bucle principal :S.
A ver si conseguis ayudarme a ver qué es lo que pasa. Yo creo que el error debe estar en los siono (siono1 y siono2) que son los que controlan cuando se vuelve a entrar en un bucle y cuando no.
Bueno creo que así habrá quedado más "desglosada" mi duda. Espero que sepais ayudarme.
Un saludo!
16
« en: Lunes 19 de Abril de 2004, 23:00 »
Hola:
Escribir una función que dado un entero n y un vector de enteros cuyas primeras componentes contienen los primeros n números primos, añadir en el vector el siguiente número primo. Notar que para comprobar si un número es primo basta comprobar que no es divisible por ningún primo menor que él, y que todos los números primos son impares, exceptuando el 2.
Os paso lo que tengo hecho, pero está mal... A ver si podéis ayudarme.
Muchas gracias.
17
« en: Lunes 19 de Abril de 2004, 22:59 »
Nadie dijo dónde está el límite de lo que es un reto y lo que no. No quiero que nadie me haga el programa, puesto que ya lo he desarrollado yo, como tú dices... Te lo puedes descargar si quieres y ves que lo tengo prácticamente hecho, si bien lo único que necesito es que me echen una mano para encontrar el fallo.
Pero ya veo que el nivel está muy alto para poner estos problemas aquí...
18
« en: Lunes 19 de Abril de 2004, 22:10 »
Hola:
Escribir una función que dado un entero n y un vector de enteros cuyas primeras componentes contienen los primeros n números primos, añadir en el vector el siguiente número primo. Notar que para comprobar si un número es primo basta comprobar que no es divisible por ningún primo menor que él, y que todos los números primos son impares, exceptuando el 2.
Os paso lo que tengo hecho, pero está mal... A ver si podéis ayudarme.
Muchas gracias.
19
« en: Domingo 22 de Febrero de 2004, 01:12 »
Sé lo que se siente al no ser ayudado en estos foros pero... es lo que hay. La gente, o no sabe, o no le apetece estudiar el problema (además, hay problemas que son ya complejos como el tuyo, y aún da más pereza ponerse a pensar.
De todas formas, gracias por el código. Le echaré un ojo porque hay partes del código que me interesan especialmente.
20
« en: Viernes 13 de Febrero de 2004, 23:26 »
Hola! Necesito ayuda: Con este programa: http://rafb.net/paste/results/C1205987.htmlse genera contenido pseudo-aleatorio en un fichero. Y con este otro: http://rafb.net/paste/results/jx407622.htmlse ordena el contenido del fichero anterior. Esto es, las entradas o registros se ordenan de menor a mayor según un campo del registro (codAlumno := Código del alumno). Pero este segundo programa no funciona correctamente. Compila perfectamente, pero da fallo en tiempo de ejcución. Para controlar dónde puede fallar más concretamente, encontraréis líneas de código de tipo printf ("Bien %d", cont);
, siendo cont un contador que controla el número de "accesos" que va superando (por ejemplo, si el programa se ejecuta correctamente tras solicitar el nombre de un fichero, se imprimirá por pantalla "Bien 1"). Así, dentro del código he puesto el lugar desde donde comienza a fallar. ¿Podéis ayudarme a descubrir dónde me estoy equivocando? Muchas gracias!!
21
« en: Viernes 13 de Febrero de 2004, 12:41 »
Es muy sencillo, pero no sé hacerlo: El programa te pide que introduzcas el nombre del fichero de salida. El usuario introduce el nombre con el que se creará el fichero de salida. Pero, el archivo que se crea, no tiene ninguna extensión (.txt, .dat, etc.). printf ("Introduce el nombre del archivo a generar: "); scanf ("%s", nombre); f1 = fopen(nombre, "w");
Así creo que se verá más claro. Bueno, mi intención es quen el fichero que se cree vaya con la "extensión incluida". Bueno, creo que se me acaba de ocurrir ahora mismo  , así que para los que no sabíais, lo pongo: Introducir como nombre: "nombredearchivo.extension", y ya está! Era simplemente eso, como dije una tontada pero yo no lo sabía!
22
« en: Viernes 13 de Febrero de 2004, 12:35 »
Bueno, tras un par de horas de trabajo, no considero de que este "problema" sea un reto... No sé si no habéis querido colaborar en mi problema por pereza, o simplemente porque no sabíais cómo hacerlo... En fin, posteo el código:
Random2-perfecto: Genera un fichero, con MAX entradas (registros). Estos registros tienen, además, 3 campos: - El primer campo es un número de 3 cifras de 1 a NA (Número Alumnos). - El segundo campo es un número de 3 cifras de NCA (Número Comienzo Asignatura) a NTA (Número Total Asignaturas). - El tercer campo es un número en coma flotante (con 2 decimales), comprendido en el rango 0 a 10.
Random3-perfecto: Ídem que el anterior, pero los alumnos se identifican mediante 3 iniciales en mayúsculas, en vez de por un número de 3 cifras.
Como sólo puedo postear 1, posteo el más completo.
23
« en: Martes 10 de Febrero de 2004, 00:05 »
Mucho me temo que la condición:
if (num >= 0 || num <=7)
no es correcta, ya que si introduces el -1 la condición se verifica, y esto no debería de ser así. Estaría bien de este modo:
while (0 <= num <= 7){ // hacer algo }
// Cuando sale del bucle while, se finaliza el programa.
También se puede hacer con el if...
if (0 <= num <= 7){ // hacer algo }else{ // mostrar mensaje de error, finalizar el programa, etc. }
Un saludo!
24
« en: Lunes 9 de Febrero de 2004, 23:08 »
Se pide constuir un algoritmo, cuya función sea generar ficheros con un contenido aleatorio.
Dicho fichero se utilizará para probar a otros algoritmos, cuya función sea trabajar con unos archivos dato extraídos de un determinado fichero (el cual pretendemos sea nuestro fichero aleatorio ("Random"). El algoritmo que debemos construir debe ser fácilmente modificable.
Tomemos como módelo de fichero Random uno del tipo:
codAlumno codAsignatura Puntos 001 018 7.8 484 012 3.4
Así pues, nuestro algoritmo, apoyándose en una estructura "struct datos dato", irá escribiendo en un fichero los datos que se vayan "fabricando" aleatoriamente.
Las líneas del archivo tendrán, cada una, la información de la nota de una asignatura de un determinado alumno. Controlaremos estás "líneas" o "informaciones" mediante un bucle for, por ejemplo.
He aquí las mayores dificultades del programa: 1. Generar un número DE 3 DÍGITOS, sabiendo que este número se encuentra entre 0<num<=MAX. No se dará por válido un codAlumno de tipo "1" (deberá ser 001). He pensado que este número puede construirse utilizando una cadena de números de 4 componentes: 3 componentes para cada dígito, y otra componente para el final de cadena '\0'. Esta cadena se imprimirá en el archivo, sabiendo que cuando se lea este archivo para toma de datos, estos tres dígitos se interpretarán como un número entero de 3 cifras, y no como un vector de 3 cifras. Podemos generar el número aleatorio con las funciones que todos sabréis: rand y srand. ¿Cómo se hace esto?
2. Análogamente se procedería para codAsignatura.
3. ¿Cómo generar un número decimal CON 3 DECIMALES, comprendido entre 0 <= num <= 10?
4. Suponiendo que en codAlumno nos interesasen las iniciales del alumno, se procedería de manera similar; con las funciones anteriormente citadas. ¿Pero cómo se haría exactamente?
Quizás sea un reto más que una duda. En fin, si el moderador lo cree conveniente, que lo traslade al subforo Retos.
Un saludo!
25
« en: Lunes 9 de Febrero de 2004, 21:44 »
Hola! Bueno, antes de nada muchísimas gracias a ambos por molestaros en contestar. Me ha quedado una pequeña duda: // Función desde la que no se puede modificar void Func1(int num) { num = num + 1; printf("Dentro de Func1: %d\n", num); } // Función que sí modifica void Func2(int *num) { *num = *num + 1; printf("Dentro de Func2: %d\n", *num); } // Ejemplo de su uso x = 1; Func1(x); // Desde aqui dentro se imprimirá 2 printf("Tras llamar a Func1: %d\n", x); // Imprimirá 1 Func2(&x); // Desde aqui se imprimirá 2 printf("Tras llamar a Func2: %d\n", x); // Imprimirá 2
Mirando en este ejemplo. Cuando llamamos a Func2, estamos pasando por referencia un valor que, tras la ejecución de Func2, cambiará su valor. Mi duda está en la manera de hacer esto... Equivalentemente, ¿se podría hacer esto? // Función desde la que no se puede modificar void Func1(int num) { num = num + 1; printf("Dentro de Func1: %d\n", num); } // Función que sí modifica void Func2(int *num) { num = num + 1; printf("Dentro de Func2: %d\n", *num); } // Ejemplo de su uso x = 1; Func1(x); // Desde aqui dentro se imprimirá 2 printf("Tras llamar a Func1: %d\n", x); // Imprimirá 1 Func2(x); // Desde aqui se imprimirá 2 printf("Tras llamar a Func2: %d\n", x); // Imprimirá 2
Lo que he hecho es modificar y también, dentro de Func2: Sólo eso, muchas gracias!
|
|
|