Título: Error en programa en C (Resuelto) Publicado por: joanj94 en 2 Enero 2014, 13:11 pm Hola, bien estoy haciendo una practica en la universidad en la que me piden, guardar palabras (10 como maximo) y luego ir metiendo palabras i comprovar si la palabra metida es anagrama de alguna de las guardadas anteriormente.
No se porque no funciona bien, creo que trabaja mal las palabras la funcion "llegir_comparar" pero no lose, aqui os dejo el pastebin y me decis que es lo que puede fallas. Gracias de antemano :) (PD: los comentarios y enunciado estan en catalan) -> Traducido e.e Título: Re: Error en programa en C Publicado por: leosansan en 2 Enero 2014, 14:56 pm (PD: los comentarios y enunciado estan en catalan) ¡¡¡Chacho!!!, afloja un punto. No cuesta tanto castellanizar un código simple y nos ahorras un esfuerzo adicional. ;) ;) ;) De entrada el código no furula, vamos no compila. Eso porque creo te falta la librería <stdbool.h>, además de un "return" al final de la función main. Lo he mirado sólo por encima y me parece poco clara la explicación de lo que hay que introducir y muy rebuscada la solución que planteas. Los diez nombres que hay que introducir, ¿seguro que pueden llevar espacios y además acabar con punto?. Me parece muy raro si lo que pretendes es buscar anagramas. Me parece que lo más lógico es que los diez nombres sean simples palabras, sin espacios ni ná de ná, y que la cadena, que es la que parece que puede contener 50 caracteres como máximo, o sea que sí pueda tener espacios y acabar con un punto y ya luego buscar si alguna de las palabras posee anagrama o no en la cadena. ¿Me equivoco?. ¿Puedes sacarme de la duda?. ¡¡¡¡ Saluditos! ..... !!!! :rolleyes: ;) ;) ;) :rolleyes: Título: Re: Error en programa en C Publicado por: joanj94 en 2 Enero 2014, 14:59 pm Si tienes razon en lo de los comentarios jajaja, perdon, el programa compila perfectamente, lo que no da bien los anagramas
Título: Re: Error en programa en C Publicado por: joanj94 en 2 Enero 2014, 15:00 pm Ahora traduzco
Aqui esta traducido ah si, es en C++ por los bool y eso, pero la programacion de este es en C ya que no uso punteros ni clases ni nada mas del C++ Título: Re: Error en programa en C Publicado por: amchacon en 2 Enero 2014, 16:05 pm Los punteros son de C no de C++, y los bools se pueden representar con un char perfectamente. Yo lo que he hecho es poner esto al principio del código:
Código
Y ya con eso compila con el compilador de C. En cuanto al código, te recomendaría quitar el "." como identificador de final de la línea. Para eso ya está caracter nulo '\0'. Y hablando de caracteres nulos, no me parece muy adecuado tu forma de leer. Lo que puedes hacer es leer la línea entera con fgets: http://www.cplusplus.com/reference/cstdio/fgets/ (el FILE* es el stdin, que es el archivo del teclado). Y después ir guardando las palabras una a una en un array, separandolas con un espacio. Otra forma es leerlas una a una con el scanf y finalizar cuando la palabra introducida sea "Terminar". Y bueno tu problema es: Código
¿Has dado arrays? Pues d_c debe tratarse como un array bidimensional, lo que estás haciendo es comparar la dirreción de memoria donde está el array (d_c funciona como un puntero si no usas los operadores []). Eso siempre va a ser un bucle infinito. Título: Re: Error en programa en C Publicado por: joanj94 en 2 Enero 2014, 16:21 pm Bien, dije que era C, porque aun no he dado punteros, ni usar memoria y eso, solo di las tablas o arrays multidimensionales etc
Prove usando el condicional while(strlen(txt)!=0) y tampoco Título: Re: Error en programa en C Publicado por: joanj94 en 2 Enero 2014, 21:08 pm He provado de todo, y no hay manera estoy desesperao xD
Título: Re: Error en programa en C Publicado por: leosansan en 3 Enero 2014, 15:00 pm He provado de todo, y no hay manera estoy desesperao xD ¡¡¡Chacho!!!, tranquilito. No me convence del todo tu código así que lo he "variado" un poquitito. Y ya que no usas para entrar las cadenas ninguna función -scanf, gets, fgets, etc-, da la sensación que no quieres usar las funciones más habituales. Eso me lleva a que en este caso tampoco tendría sentido usar strcpy, strlen, isupper, bool, isblank, strcmp , vamos "ná de ná" y mucho menos las correspondientes librerías <ctype.h>, <string.h> y<stdbool.h>. Así que sólo uso la mísera librería <stdio.h> y su función asociada getchar. ¡¡¡Todo un reto!!!. Y opara que veas que funciona, un pantallazo: (http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/palabrasenfrase_zps5a98e3df.jpg) Código
Es muy mejorable usando las funciones que mencioné, como para que se puedan introducir números, más espacios entre palabras -como está sólo admite un espacio entre palabras- etc. Pero bueno, creo que lo que te pongo es lo que pedías. Al menos espero te sirva de orientación. ;) ¡¡¡¡ Saluditos! ..... !!!! :rolleyes: ;) ;) ;) :rolleyes: Título: Re: Error en programa en C Publicado por: joanj94 en 3 Enero 2014, 15:51 pm Gracias por la ayuda :D, pero por asi decirlo los conocimientos que me permiten usar en este programa son los que habeis visto en el codigo, es en C++(porque uso bool) pero simplon, sin class, ni punteros, ni uso de funciones utiles mas de las que he usado.
Igualmente voy a provar algunas cosas que has dicho haber si se usarlas bien y lo arreglo :) Título: Re: Error en programa en C Publicado por: joanj94 en 3 Enero 2014, 16:09 pm Por cierto, el texto que se introduce despues de los anagramas, se debe tractar cada palabra sin guardarla en memoria, no termino de ver si el codigo que has hecho lo hace asi, esque me cuesta un poco entendrerlo :rolleyes:
Y se dicen segun se van encontrando anagramas al introducir palabras del texto, y si se encuentra uno se suma 1 al contador de anagramas indistintamente que sean el mismo o no. Título: Re: Error en programa en C Publicado por: SoyelRobert en 3 Enero 2014, 23:11 pm el problema que yo le veo al codigo de leosansan es que el problema pide explicitamente que las palabras a buscar anagramas sean introducidas por fichero o teclado... podría solucionarse así?
Código
Es solo una idea, usar estructuras para guardar todas las palabras y usar un par de fors para ir guardando cada letra en una casilla de un array para despues comprobar si las palabras del texto pueden ser una permutación de dichas letras. :huh: :huh: :huh: es lo unico que se me ha ocurrido Título: Re: Error en programa en C Publicado por: amchacon en 3 Enero 2014, 23:27 pm No hay ninguna diferencia entre leer de teclado y un fichero. Podrías incluso cambiar el stdin (fichero del teclado) hacia un txt para que se lea directamente con las mismas funciones:
Código
Por cierto la indentación no es la adecuada. No es tabular todo el código, sino tabular los bloques. La idea esque puedas reconocer cual es cada bloque (entiendase por bloque un condicional, una función, un bucle...): Código
Cada llave abierta son 4 espacios a la derecha más que tabular, y cada llave cerrada son 4 espacios menos para tabular. Título: Re: Error en programa en C Publicado por: joanj94 en 3 Enero 2014, 23:47 pm No he dado estructuras, como mucho si a eso os referis son tablas multidimensionales como la de los anagramas que es anagramas[10][50] (10 palabras de 50 letras)
Y un fallo que tengo, es que las palabras las lee bien excepto si terminan con . Ej: linux(espacio). me leera bien la palabra, pero si pongo linux. no la lee bien, de hecho hace como si no hubiera leido nada y la deja a 0 Título: Re: Error en programa en C Publicado por: joanj94 en 5 Enero 2014, 05:26 am Y bueno tu problema es: Código
Me congratula decir que conseguir que el programa funcionase bien lo que era leer palabras, cambiando ese condicional por: Código: while(strlen(txt)!=0) Muchas gracias por vuestro tiempo :D |