Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: -esifu- en 14 Diciembre 2010, 00:07 am



Título: Duda sobre el ejercicio del palindromo.
Publicado por: -esifu- en 14 Diciembre 2010, 00:07 am
Pues eso, hay algo que me falla en el codigo pero no logro darme cuenta.

Gracias.
Código:
#include <stdio.h> 
#include <stdlib.h>
#include <windows.h>
void main(void)
 {
     char v[10];      /* Declaración de un vector de 10 caracteres*/
     int tam;             /* Tamaño de la cadena */
     int i;               /* Índice para indexar el vector */
     int res;             /* Resultado. Vale 1 si es palíndromo        */   
     printf("Introduzca una palabra de menos de 11 caracteres:\n");
     
     i=0;
     do
 {     
       i++;
       printf("Letra_%d=",i);
       scanf(" %c",&v[i-1]);
     }while(v[i-1]!=';' && i<10);
     i=0; /*No quitar esta sentencia*/
                 
     /*************INICIO CÓDIGO*****************/
     
for (i=0; i<10; i++)

if (i == ';')
{
tam=i;
}
else
{
tam=10;
}
while(i != tam)
{
i++;
tam--;
}
if(v[i-1] == v[tam])
{
res=1;
}
else
{
res=0;
}

     /***************FIN CÓDIGO ******************/
     
     /* ESCRITURA DE RESULTADOS */
     if (res==1) printf("Es palindromo");
     if (res==0) printf("No es palindromo");
     /* BLOQUEO DE PANTALLA*/
     printf("\n");
     system("pause");
}


Título: Re: Duda sobre el ejercicio del palindromo.
Publicado por: diskontrol en 14 Diciembre 2010, 01:40 am
Buenas,

te voy a dar un consejo, si haces los incrementos (y decrementos) al final de los bucles, te vas a evitar hacer cálculos raros con los índices. No he probado a compilar el código pero así a simple vista diría que no funciona porque no comparas los elementos del vector entre si. Pasas de la memoria reservada para este ya que antes de empezar las comprobaciones no inicializas el índice. Además las lineas de comprobación están fuera del bucle. También deberías salir del bucle a la primera que la variable res adquiera el valor 0, porque luego se puede sobreescribir el resultado y quedaría falseado (y así ya de paso te ahorras las operaciones res=1). Y para finalizar te recomiendo empezar a usar punteros para este tipo de problemas. También es muy probable que me haya saltado cosas :-D.

Saludos!


Título: Re: Duda sobre el ejercicio del palindromo.
Publicado por: Shell Root en 14 Diciembre 2010, 05:11 am
Y si la palabra tiene más de 10 caracteres?. Podrías usar algo como,
Código
  1.    int sMAX = 0;
  2.    printf("Enter word: ");
  3.    scanf("%d", sMAX);
  4.  
  5.    char sWords[ strlen(sMAX) ];
  6.    printf("%d", sizeof( sWords ));


Título: Re: Duda sobre el ejercicio del palindromo.
Publicado por: 08l00D en 14 Diciembre 2010, 07:14 am
Y si la palabra tiene más de 10 caracteres?. Podrías usar algo como,
Código
  1.    int sMAX = 0;
  2.    printf("Enter word: ");
  3.    scanf("%d", sMAX);
  4.  
  5.    char sWords[ strlen(sMAX) ];
  6.    printf("%d", sizeof( sWords ));
??
a strlen se le pasa una cadena osea un puntero a char ... no un entero..
para lo que decis habria que utilizar las funciones para pedir memoria dinamicamente...
primero malloc y despues realloc sucesivamente a medida que quieras seguir metiendo caracteres en la cadena...


Título: Re: Duda sobre el ejercicio del palindromo.
Publicado por: Garfield07 en 14 Diciembre 2010, 18:30 pm
No, es correcto. A strlen se le pasa una cadena y devuelve un entero. El code es correcto.


Título: Re: Duda sobre el ejercicio del palindromo.
Publicado por: Littlehorse en 14 Diciembre 2010, 18:47 pm
a strlen se le pasa una cadena osea un puntero a char ... no un entero..

No, es correcto. A strlen se le pasa una cadena y devuelve un entero. El code es correcto.

Sagrini, vuelve a leer el código. Esta mal como bien dice 08l00.


Código
  1.  char sWords[ strlen(sMAX) ];

En esa linea se le pasa un entero a strlen, siendo que el prototipo de strlen es:

Código
  1. size_t strlen ( const char * str );

Ademas, no solo esta mal si no que tampoco es necesario utilizar strlen para esa tarea, puesto que sMAX ya es un entero y podría hacerse así perfectamente:

Código
  1. char sWords[sMAX];

Por otro lado, si se quiere utilizar un arreglo dinámico, lo recomendable es utilizar memoria dinámica y no pedir un valor al usuario para utilizarlo en un arreglo estático. Es inseguro y poco útil.

Saludos


Título: Re: Duda sobre el ejercicio del palindromo.
Publicado por: Garfield07 en 14 Diciembre 2010, 19:16 pm
perdona, te doy la razon. en verdad no lei todo el codigo, sobre todo no lei la parte del entero.... fff
bueno, pero el codigo correcto seria:

    int size;
    char word [30];

    printf("Enter a word [MAX 30]: ");
    fgets (word, 30, stdin);

   if (strlen (word)>30)
   {
       printf ("Error: the word is too long...\n");
       return 1;
   }

realmente no entiendo el proposito del code...
algo asi? me perdi xD...
diganme el proposito al menos porque no lo pillo...