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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre el ejercicio del palindromo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre el ejercicio del palindromo.  (Leído 6,326 veces)
-esifu-

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Duda sobre el ejercicio del palindromo.
« 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");
}


En línea

diskontrol

Desconectado Desconectado

Mensajes: 89


RAWR!


Ver Perfil
Re: Duda sobre el ejercicio del palindromo.
« Respuesta #1 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!


En línea

Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: Duda sobre el ejercicio del palindromo.
« Respuesta #2 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 ));
En línea

Te vendería mi talento por poder dormir tranquilo.
08l00D

Desconectado Desconectado

Mensajes: 168


Ver Perfil
Re: Duda sobre el ejercicio del palindromo.
« Respuesta #3 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...
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Duda sobre el ejercicio del palindromo.
« Respuesta #4 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.
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Duda sobre el ejercicio del palindromo.
« Respuesta #5 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
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Duda sobre el ejercicio del palindromo.
« Respuesta #6 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...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre un ejercicio vb 6
Programación Visual Basic
juni85 4 2,995 Último mensaje 14 Enero 2011, 11:14 am
por juni85
Duda funcion palindromo
Programación C/C++
cazagavilan 2 3,000 Último mensaje 9 Abril 2012, 16:07 pm
por cazagavilan
DUDA SOBRE EJERCICIO
Java
hola777 1 2,134 Último mensaje 27 Noviembre 2013, 00:01 am
por Mitsu
Duda sobre este ejercicio
Java
CarlosvAlencia 1 1,852 Último mensaje 18 Febrero 2014, 15:01 pm
por NikNitro!
Ejercicio Palindromo en Python
Scripting
Dracco07 3 3,206 Último mensaje 13 Marzo 2017, 05:00 am
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines