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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en programa en C (Resuelto)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error en programa en C (Resuelto)  (Leído 3,731 veces)
joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Error en programa en C (Resuelto)
« 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 :)

S

(PD: los comentarios y enunciado estan en catalan)


-> Traducido e.e


« Última modificación: 24 Enero 2014, 14:18 pm por joanj94 » En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error en programa en C
« Respuesta #1 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:





« Última modificación: 2 Enero 2014, 18:18 pm por leosansan » En línea

joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: Error en programa en C
« Respuesta #2 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
En línea


joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: Error en programa en C
« Respuesta #3 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++
« Última modificación: 24 Enero 2014, 14:19 pm por joanj94 » En línea


amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error en programa en C
« Respuesta #4 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
  1. #define bool char
  2. #define false 0
  3. #define true 1

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
  1. while(d_c!='.')

¿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.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: Error en programa en C
« Respuesta #5 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
« Última modificación: 2 Enero 2014, 20:04 pm por joanj94 » En línea


joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: Error en programa en C
« Respuesta #6 en: 2 Enero 2014, 21:08 pm »

He provado de todo, y no hay manera estoy desesperao xD
En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error en programa en C
« Respuesta #7 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:



Código
  1. #include <stdio.h>
  2.  
  3. void pillo_cadena (char cad[600],int flag);
  4. int con_pal,con_frase,cont_l_on_palabras,lon_frase;
  5. void palabras_en_palabras (char palabras[],char frase[]);
  6. void ordenar (char cadena[10]);
  7. int comparar (char temp1[10],char temp2[10]);
  8. int longitud_cadena (char cadena[10]);
  9. char convertidor(char caracter);
  10.  
  11. char palabras[10],n_palabras[10][51],temp [10],frase[600];
  12.  
  13. int main (){
  14.  
  15.    char palabras[]="leon San noel.";
  16.    char frase[]="NeoL aSN sAn Nas LeoN.";
  17.    /*
  18.     Acticva lo que sigue para introducir a mano
  19.     los datos y desactiva entonces los dos anteriores
  20.     */
  21.  
  22.    /*int flag=0;
  23.     char palabras[10],frase[600];
  24.     palabras[0]=frase[0]='\0';
  25.      flag=1;
  26.     printf("Introduce un seguido de palabras (10 max) de 50 caracteres como mucho, terminando con un '.'\n");
  27.     pillo_cadena (palabras,flag);
  28.     flag=2;
  29.     printf("Introduce el texto, separando las palabras con especios i terminando con un '.', las palabras deben de ser de 50 letras max\n");
  30.     pillo_cadena (frase,flag);*/
  31.    palabras_en_palabras (palabras,frase);
  32.    return 0;
  33. }
  34.  
  35. void pillo_cadena (char cad[600],int flag){
  36.    int i=0;
  37.    int pillo_cad;
  38.    cad[0]='\0';
  39.    do{
  40.        pillo_cad=getchar();
  41.        cad[i]=pillo_cad;
  42.        if (flag ==1)
  43.            palabras[i]=cad[i];
  44.        if (flag ==2)
  45.            frase[i]=cad[i];
  46.        i++;
  47.    } while (pillo_cad != '\n');
  48.    cad[i-1]='\0';
  49.    if (flag ==1)
  50.        palabras[i-1]=cad[i-1];
  51.    if (flag ==2)
  52.        frase[i]=cad[i-1];
  53. }
  54.  
  55. void palabras_en_frase (char frase[],int con_pal,char temp[]){
  56.    int i,cont=0,cont2=0;
  57.    char aux [10],ch;
  58.    aux [0]='\0';
  59.    for (i=0;frase[i];i++){
  60.        aux[cont]=frase[i];
  61.        ch=frase[i];
  62.        aux[cont]=convertidor (ch);
  63.        cont++;
  64.        if (frase[i]==' ' || frase[i]=='.'){
  65.            aux[cont-1]='\0';
  66.            ordenar  (n_palabras[con_pal]);
  67.            ordenar  (aux);
  68.            if (comparar (aux,n_palabras[con_pal])==0)
  69.                cont2++;
  70.            cont=0;
  71.            aux [0]='\0';
  72.        }
  73.    }
  74.    printf ("\nLa palabra %s tiene %d anagramas " ,temp,cont2);
  75.    printf ("en: %s" ,frase);
  76. }
  77. void palabras_en_palabras (char palabras[],char frase[]){
  78.    int i,j,cont=0,con_pal=0;
  79.    char aux1 [10],temp [10],ch ;
  80.    aux1 [0]=temp [0]='\0';
  81.    for (i=0;palabras[i];i++){
  82.        temp[cont]=palabras[i];
  83.        ch=palabras[i];
  84.        aux1[cont]=convertidor (ch);
  85.        cont++;
  86.        if (palabras[i]==' ' || palabras[i]=='.'){
  87.            aux1[cont-1]=temp[cont-1]='\0';
  88.            for (j=0;aux1[j];j++)
  89.                n_palabras[con_pal][j]=aux1[j];
  90.            n_palabras [con_pal][j]='\0';
  91.            palabras_en_frase (frase,con_pal,temp);
  92.            cont=0,con_pal++;
  93.            aux1 [0]='\0';
  94.        }
  95.    }
  96. }
  97.  
  98. void ordenar (char cadena[10]){
  99.    int i,j,lon;
  100.    char temp1;
  101.    lon=longitud_cadena (cadena);
  102.    for (i = 1; i < lon; i++){
  103.        for (j = 0 ; j < lon-i; j++){
  104.            if (cadena[j] > cadena[j+1]){
  105.                temp1 = cadena[j];
  106.                cadena[j] = cadena[j+1];
  107.                cadena[j+1] = temp1;
  108.            }
  109.        }
  110.    }
  111. }
  112.  
  113. int comparar (char temp1[10],char temp2[10]){
  114.    int i,si_o_no=0;
  115.    if (longitud_cadena(temp1) != longitud_cadena(temp2))
  116.        si_o_no=1;
  117.    else {
  118.        for(i=0;temp1[i];i++)
  119.            if (temp1[i]!=temp2[i])
  120.                si_o_no=1;
  121.        si_o_no=0;
  122.    }
  123.    return si_o_no;
  124. }
  125.  
  126. int longitud_cadena (char cadena[10]){
  127.    int i;
  128.    for (i=0;cadena[i];i++);
  129.    return i;
  130. }
  131. char convertidor(char caracter){
  132.    if (caracter>96 && caracter<123)
  133.            caracter-=32;
  134.    return (caracter);
  135. }
  136.  

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:
En línea

joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: Error en programa en C
« Respuesta #8 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 :)
En línea


joanj94

Desconectado Desconectado

Mensajes: 64



Ver Perfil
Re: Error en programa en C
« Respuesta #9 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.
« Última modificación: 3 Enero 2014, 16:42 pm por joanj94 » En línea


Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error en programa
.NET (C#, VB.NET, ASP)
zhynar_X 4 2,552 Último mensaje 8 Mayo 2007, 15:35 pm
por zhynar_X
error de programa
Windows
hardyan2 3 5,929 Último mensaje 2 Agosto 2010, 08:48 am
por NSaneBMX
Un programa me da un error
Dudas Generales
Mikroscopik0 4 2,009 Último mensaje 29 Septiembre 2010, 09:08 am
por Mikroscopik0
Error en programa c++
Programación C/C++
z_ane_666 1 2,654 Último mensaje 9 Diciembre 2010, 15:50 pm
por winroot
programa en c++ el programa me da un error dice que la llave correspondiente a {
Programación C/C++
eduardo17445 2 3,002 Último mensaje 5 Junio 2012, 19:51 pm
por eduardo17445
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines