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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con script C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con script C  (Leído 5,707 veces)
luisito45

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Problema con script C
« en: 27 Abril 2017, 21:12 pm »

Buenas tardes;

Este script tiene como fin decir si una frase es palindroma o no. Funciona solo con frases que no tienen espacios y no encuentro el fallo. Al meter una frase que contenga espacios no funciona.

Os dejo aquí el código.

https://pastebin.com/4TGSe8d5

Muchas Gracias



« Última modificación: 28 Abril 2017, 16:43 pm por luisito45 » En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: Problema con script C
« Respuesta #1 en: 28 Abril 2017, 10:27 am »

Buenas tardes;

Este script tiene como fin decir si una frase es palindroma o no. Funciona solo con frases que no tienen espacios y no encuentro el fallo. Al meter una frase que contenga espacios no funciona.

Os dejo aquí el código.

https://pastebin.com/vXK1Vy8A

Muchas Gracias

No deberías de hacer el codigo tan amplio sólo para determinar si una palabra es palíndroma.
Código
  1. char palabra[20];
  2. char palabra_al_reves[20];
  3. for ( p = 0, i = strlen(palabra); i > 0; --i, ++p )
  4.  if ( palabra_al_reves[p] != palabra[i]; )
  5.    {
  6.      printf("No es palindroma\n");
  7.      break;
  8.    }
  9. printf("Es palindroma\n");

Creo que sería algo así. Consiste en comparar las dos palabras, una desde el principio y la otra desde el final.


En línea

Justicia es dar a cada uno lo que se merece
luisito45

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con script C
« Respuesta #2 en: 28 Abril 2017, 10:48 am »

Mi código es tan largo porque antes de comprobar si la frase es palindroma, quita todos las comas, puntos, espacios y demas signos de la frase. Después, pasa a comprobar si es palibdroma esa palabra que ha formado.

Ejemplo: Arde ya la yedra!
1º paso lo convierte ha: ardeyalayedra
2º paso, comprueba si es palibroma esa palabra.

Las 2 partes funcionan sin problema por separado pero al juntarlas no.

Agradecería mucho que alguien encontrara el error de mi código.

Un Saludo
En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: Problema con script C
« Respuesta #3 en: 28 Abril 2017, 10:51 am »

Prueba a quitar el -1 de aquí:
Código
  1. if(palin[cont] == palin[(i-cont)-1])
En línea

Justicia es dar a cada uno lo que se merece
luisito45

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con script C
« Respuesta #4 en: 28 Abril 2017, 10:56 am »

He probado pero sigue sin funcionar. El problema no esta en el código que dice si es palindromo o no porque funciona perfectamente por separado, es decir, sin el primer paso.

Gracias y un saludo
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con script C
« Respuesta #5 en: 28 Abril 2017, 12:17 pm »

Para este caso la función de la biblioteca estándar isalpha te va muy bien.
Con el siguiente código lo comprenderás.
Sea frase la frase válida con al menos una letra a operar, i y j los índices del inicio de la frase y final de frase respectivamente:
Código:
for(i = 0, j = strlen(frase); j >= i; ++i, --j) {
    if(!isalpha(frase[i]))
        ++j;
    else if(!isalpha(frase[j]))
        --i;
    else if(tolower(frase[i]) != tolower(frase[j]))
        break;
}

Cómo funciona:
sabemos que al final de cada bucle i aumentará y j disminuirá por tanto si el caracter en i no es una letra lo debemos descartar. Eso lo hará el bucle automáticamente cuando llegue al final pero debemos impedir que j no se mueva. Cómo ya hemos dicho que al final j va a disminuir en una unidad vamos a tener que incrementarlo en una unidad para que en la próxima iteración se quede igual (apuntando al mismo caracter.
El funcionamiento de j para i es similar.
Cuando el bucle ya compara dos caracteres si son iguales pasa a la próxima iteración, si son diferentes quiere decir que la frase no es palíndromo y para el bucle con break.

Lo que nos dará si la frase es palíndromo será mirar si i es menor a j.
« Última modificación: 28 Abril 2017, 13:57 pm por MAFUS » En línea

luisito45

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con script C
« Respuesta #6 en: 28 Abril 2017, 12:32 pm »

Para este caso la función de la biblioteca estándar isalpha te va muy bien.
Con el siguiente código lo comprenderás.
Sea frase la frase a operar, i y j los índices del inicio de la frase y final de frase respectivamente:
Código:
for(i = 0, j = strlen(frase); j >= i; ++i, --j) {
    if(!isalpha(frase[i]))
        ++j;
    else if(!isalpha(frase[j]))
        --i;
    else if(tolower(frase[i]) != tolower(frase[j]))
        break;
}

Cómo funciona:
sabemos que al final de cada bucle i aumentará y j disminuirá por tanto si el caracter en i no es una letra lo debemos descartar. Eso lo hará el bucle automáticamente cuando llegue al final pero debemos impedir que j no se mueva. Cómo ya hemos dicho que al final j va a disminuir en una unidad vamos a tener que incrementarlo en una unidad para que en la próxima iteración se quede igual (apuntando al mismo caracter.
El funcionamiento de j para i es similar.
Cuando el bucle ya compara dos caracteres si son iguales pasa a la próxima iteración, si son diferentes quiere decir que la frase no es palíndromo y para el bucle con break.

Lo que nos dará si la frase es palíndromo será mirar si j es diferente a la mitad del tamaño de la frase menos 1.

Buenos días;

Te comento lo mismo que le he dicho al usuario @mester más arriba; la finalidad de mi código no es la de decir si una palabra es palindroma o no, sino decir si una frase es palindroma o no.

Mi código quita todos las comas, puntos, espacios y demás signos de la frase. Después, pasa a comprobar si es palindroma esa palabra que ha formado.

Ejemplo: Arde ya la yedra!
1º paso; lo convierte de una frase a una palabra: ardeyalayedra
2º paso, comprueba si es palibroma esa palabra.

Las 2 partes funcionan sin problema por separado pero al juntarlas no.

Agradecería mucho que alguien encontrara el error de mi código.

Un Saludo
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con script C
« Respuesta #7 en: 28 Abril 2017, 15:31 pm »

¿Lo que falla en tu código?
Hay muchos signos de puntuación. Mejor si usaras isalnum para saber si un carácter es una letra/número o algo más.

Cuando usas gets para tomar una frase también copias el carácter de nueva línea. Si no lo eliminas de ella, que no lo haces, siempre tendrás que el último carácter de dicha frase nunca será igual al primero

Cuando copias frase2 a palin usas el mismo índice para los dos. Esto quiere decir que cuándo te saltas un signo de puntuación de los que has indicado en el if el contenido de palin en esa posición se quedará con un dato basura.

¿Qué quiere decir esto?
Código:
frase2: hola? soy yo
palin : 3klmQRjkla34

Y copias con tu código frase2 a palin
Código:
frase2: hola? soy yo
palin : holaQRsoyayo

Recuerda que las variables locales no se inicializan a 0.

De igual forma se te olvida marcar el final de la cadena palin con el carácter nulo.

En el while(lol<100), si dices que la cadena tiene como máximo 100 caracteres ¿cómo llegas al indice 100 para mostrarla letra a letra? deberías llegar hasta i que es el largo calculado con strlen.


En línea

luisito45

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Problema con script C
« Respuesta #8 en: 28 Abril 2017, 16:24 pm »

Citar
Cuando copias frase2 a palin usas el mismo índice para los dos. Esto quiere decir que cuándo te saltas un signo de puntuación de los que has indicado en el if el contenido de palin en esa posición se quedará con un dato basura.

Como pódria solucionar esto, alguna idea?

Muchas Gracias, me has ayduado muhco.
« Última modificación: 28 Abril 2017, 16:41 pm por luisito45 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con script C
« Respuesta #9 en: 28 Abril 2017, 20:18 pm »

Puedes usar dos índices diferentes, uno para cada cadena, e incrementarlos cuándo corresponda.
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con script... #!/usr/bin/php5-cgi -q
PHP
ZyrroX 1 1,684 Último mensaje 7 Abril 2007, 05:56 am
por дٳŦ٭
Problema con script en php.
PHP
calvin2sr 3 2,250 Último mensaje 22 Noviembre 2012, 21:05 pm
por itsukisekaiakiba
Problema con script en rar
Scripting
Alex_san 1 1,997 Último mensaje 3 Abril 2013, 15:42 pm
por Eleкtro
Problema script
PHP
seniorgare 2 1,891 Último mensaje 24 Abril 2014, 08:34 am
por seniorgare
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines